基本上我很绝望。
我已经尝试过我在每个Google搜索结果中看到的有关此问题的所有信息。
我有一个与WMP非常相似的程序。它使用axWMP控件播放歌曲等。
我有很多类型的音频文件,mp3,m4a,wma等。我已经成功编写了一些东西来获取标签:track#,title,album,artist,year。我唯一无法正确完成的是专辑封面。
我使用的代码仅适用于某些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
此功能进入Internet Explorer临时文件夹并将图像复制到外部以便使用它。它可以工作,但是只能用于相同的mp3文件。
我已经了解了我可以用于m4a文件的Apple Quick Time控件,但我无法从中获取任何内容。
真正困扰我的一件事是它适用于mp3但不适用于所有这些。
我所知道的唯一线索是:“索引超出范围。必须是非负数且小于集合的大小。 参数名称:索引“在线MP3Tag.Read(路径)上面和”参数不正确。 (来自HRESULT的异常:0x80070057(E_INVALIDARG))“在线pic = tWMP.currentMedia.getItemInfoByType(”WM / Picture“,”“,i),无论何时文件都是无效的mp3或其他文件格式。
我知道这并非不可能,因为WMP 12本身可以为任何文件显示专辑艺术。
感谢您帮助我。
答案 0 :(得分:0)
WMP将其专辑封面存储在%LOCALAPPDATA%\Microsoft\Media Player\Art Cache\LocalMLS
文件夹中。此文件夹中JPEG文件的文件名对应于库中WMP媒体项的TrackingID属性。