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 в библиотеке.

Другие вопросы по тегам