2015-01-21 7 views
0

기본적으로 나는 절망적입니다.VB.Net - 오디오 파일 앨범 아트

이 문제와 관련된 모든 Google 결과에서 나는 모든 것을 시도했습니다.

나는 WMP와 매우 유사한 프로그램을 가지고있다. 그것은 axWMP 컨트롤을 사용하여 노래 등을 연주합니다.

나는 많은 종류의 오디오 파일, mp3, m4a, wma 등을 가지고 있습니다. 트랙 #, 제목, 앨범, 아티스트, 올해. 내가 제대로 할 수없는 유일한 것은 앨범 아트입니다.

사용중인 코드는 일부 mp3 파일에서만 작동합니다. 물론 그것은 내가 UltraID3를 사용하고 있으며 mp3에서만 작동하기 때문입니다. 여기

코드입니다 :

   Dim MP3Tag As New UltraID3 

      albumArt = Nothing 

      Try 
       MP3Tag.Read(path) 
       Try 
        Dim pics = MP3Tag.ID3v2Tag.Frames.GetFrames(CommonMultipleInstanceID3v2FrameTypes.Picture) 
        albumArt = CType(pics(0), ID3v2PictureFrame).Picture 
       Catch ex As Exception 
        'albumArt = FetchAlbumImage(j, path) 
       End Try 
      Catch ex As Exception 
      End Try 

그러나 나는 태그의 나머지했던 것과 마찬가지로, WMP 컨트롤 자체를 통해 앨범 아트를 가져 오는 시도 :

Function FetchAlbumArt(index As Integer, filePath As String) As Image 

    FetchAlbumArt = Nothing 

    Dim pic As WMPLib.IWMPMetadataPicture = Nothing 

    Dim tWMP As New WindowsMediaPlayer 

    tWMP.currentMedia = Me.WMP.currentPlaylist.Item(index) 

    For i = 0 To tWMP.currentMedia.getAttributeCountByType("WM/Picture", "") 
     Try 
      pic = tWMP.currentMedia.getItemInfoByType("WM/Picture", "", i) 
      Exit For 
     Catch ex As Exception 
      Debug.Print(Err.Description) 
     End Try 
    Next 

    If Not IsNothing(pic) Then 

     Dim path As String = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache) 
     Dim fInfo, fInfos() As IO.FileInfo 
     Dim dInfo As IO.DirectoryInfo 

     dInfo = New IO.DirectoryInfo(path) 
     fInfos = dInfo.GetFiles("*" & FindStringBeforeLastIndexOfChar(FindStringAfterLastIndexOfChar(pic.URL, "/"), ".", False) & "*", IO.SearchOption.AllDirectories) 

     For Each fInfo In fInfos 
      If fInfo.Name Like "*" & FindStringBeforeLastIndexOfChar(FindStringAfterLastIndexOfChar(pic.URL, "/"), ".", False) & "*" Then 
       System.IO.File.Copy(fInfo.FullName, dbFolderPath & "\temp.jpg", True) 
      End If 
     Next 

     Dim albumArt As Image 
     albumArt = Bitmap.FromFile(dbFolderPath & "\temp.jpg") 

     FetchAlbumArt = albumArt 

    End If 

End Function 

이 기능은 간다 인터넷 익스플로러 템플리트 폴더에 복사하고 이미지를 외부로 복사하여 사용하십시오. 그것은 작동하지만, 같은 mp3 파일에 대해서만 다시 작동합니다.

m4a 파일에 사용할 수있는 Apple Quick Time 컨트롤에 대해 읽었지만 아무 것도 얻을 수 없었습니다.

나를 괴롭히는 한 가지 사실은 mp3에서는 작동하지만 전부는 아닙니다.

내가 작동하지 않는 유일한 단서는 "인덱스가 범위를 벗어났습니다. 컬렉션의 크기가 음수가 아니어야합니다. 매개 변수 이름 : index"온라인 MP3Tag.Read (path) 및 "이 매개 변수가 올바르지 않습니다 (파일에서 작동하지 않을 때마다 pic = tWMP.currentMedia.getItemInfoByType ("WM/Picture "," ", i)의 (HRESULT : 0x80070057 (E_INVALIDARG) 예외) 또는 다른 파일 형식.

WMP 12 자체가 모든 파일의 앨범 아트를 표시하므로 불가능하지 않습니다.

나를 도와 주셔서 감사합니다.

답변

0

WMP는 해당 앨범 아트를 %LOCALAPPDATA%\Microsoft\Media Player\Art Cache\LocalMLS 폴더에 저장합니다. 이 폴더에있는 JPEG 파일의 파일 이름은 라이브러리에있는 WMP 미디어 항목의 TrackingID 속성에 해당합니다.