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
Эта функция входит во временную папку Internet Explorer и копирует изображение наружу, чтобы использовать его. Это работает, но опять же только для тех же файлов mp3.
Я читал об элементе управления Apple Quick Time, который я мог бы использовать для файлов m4a, но я ничего не мог извлечь из него.
Одна вещь, которая действительно беспокоит меня, - то, что это работает для mp3, но не все из них.
Единственные подсказки, которые у меня есть, почему это не работает: "Индекс был вне диапазона. Должен быть неотрицательным и меньше размера коллекции. Имя параметра: индекс" в строке MP3Tag.Read(path) выше и "The неверный параметр. (Исключение из HRESULT: 0x80070057 (E_INVALIDARG))" on line pic = tWMP.currentMedia.getItemInfoByType("WM/Picture", "", i) для случаев, когда файл является неработающим mp3 или другим форматом файла.
Я знаю, что это не невозможно, поскольку сам WMP 12 прекрасно отображает обложки альбомов для любого файла.
Спасибо за помощь мне.
1 ответ
WMP хранит обложки альбомов в %LOCALAPPDATA%\Microsoft\Media Player\Art Cache\LocalMLS
папка. Имена файлов файлов JPEG в этой папке соответствуют атрибуту TrackingID элементов мультимедиа WMP в библиотеке.