Проблемы с написанием ArtWork с помощью Taglib-sharp 2.0.4.0 в .Net

У меня возникли проблемы с записью обложки в файл MP3. Я могу читать и отображать все изображения внутри файла MP3, используя Taglib-sharp, но когда дело доходит до вставки более 1 изображения (например, FrontCover и BackCover) в тег MP3, у меня возникают проблемы с этим .Если это всего лишь одна работа... я могу это сделать. Кто-нибудь, пожалуйста, бросьте мне кость и покажите, как это сделать?? (vb.net было бы здорово, но C# тоже помогает).

Еще одна просьба... а удалить изображение внутри тега mp3?? Может кто-нибудь, пожалуйста, дайте мне пример того, как это сделать.

Спасибо за вашу помощь


person Paul    schedule 29.08.2011    source источник


Ответы (4)


Как вы вставляете и удаляете изображения? Можете ли вы опубликовать код?

Все теги работают с использованием интерфейса IPicture и методов получения и установки Tag.Pictures. Изменение содержимого массива Tag.Pictures не повлияет на файл, поэтому изменение существующего списка включает в себя получение текущего значения, его обработку и последующую установку обратно. Простая настройка или очистка изображения проще.

Вы можете настроить файл на одно изображение с помощью:

IPicture pictures = new IPicture[1];
pictures[0] = new Picture("path/to/picture.jpg");
file.Tag.Pictures = pictures;

Вы можете удалить все изображения из тега следующим образом:

file.Tag.Pictures = new IPicture[0];
file.Save();

Манипуляция или более сложная, но следует тому же мышлению. Было бы лучше, если бы Tag.Pictures был IEnumerable, а не массивом, но что сделано, то сделано.

Вот пример программы, которая устанавливает изображения из аргументов командной строки: https://github.com/mono/taglib-sharp/blob/master/examples/SetPictures.cs

person Brian Nickel♦    schedule 11.10.2011

Я столкнулся с той же проблемой, что и Бобби Бхамра. Я обнаружил, что iTunes ненавидит UTF-16, и в этом проблема.

targetMp3File = TagLib.File.Create(...);

// define picture
TagLib.Id3v2.AttachedPictureFrame pic = new TagLib.Id3v2.AttachedPictureFrame();
pic.TextEncoding = TagLib.StringType.Latin1;
pic.MimeType     = System.Net.Mime.MediaTypeNames.Image.Jpeg;
pic.Type         = TagLib.PictureType.FrontCover;
pic.Data         = TagLib.ByteVector.FromPath(...);

// save picture to file
targetMp3File.Tag.Pictures = new TagLib.IPicture[1] { pic };    
targetMp3File.Save();

Так что по сути все дело в строке pic.TextEncoding. Кроме того, я назначил тип Mime через константу .NET.

В результате нет необходимости в TagLib.PictureType.Other или обходном пути с использованием описания. Единственным недостатком моего решения является то, что оно будет корректно работать только с файлами MP3.

person Daniel Fuchs    schedule 03.12.2012

Я использую следующий код taglib-sharp в своем приложении для тегов MP3. Без установки «мима» и «типа» мне не удалось отобразить обложку в ITunes, а затем и на моем Ipod, хотя Windows/WMP правильно отображала ее.

TagLib.File targetFileMp3Tag = TagLib.File.Create(...);

Picture picture = new Picture();
picture.Type = PictureType.Other;
picture.MimeType = "image/jpeg";
picture.Description = "Cover";        
picture.Data = ByteVector.FromStream(...);

targetFileMp3Tag.Tag.Pictures = new IPicture[1] { picture };
targetFileMp3Tag.save()

чт

person Bobby Bhamra    schedule 21.02.2012

Я использую Taglib версии 2.1.0.0, и пока для этой версии нет документации. Поэтому мне пришлось прийти сюда, чтобы просмотреть все ответы, чтобы найти что-то, что действительно работало с этой версией, и вот что я придумал...

Private Sub SetTags()
    Me.Cursor = Cursors.WaitCursor

    'Set the version and force it.
    TagLib.Id3v2.Tag.DefaultVersion = 3
    TagLib.Id3v2.Tag.ForceDefaultVersion = True

    'Set all standard tags.
    strInput = Trim(txtMP3Input.Text)
    strTitle = Trim(txtTitle.Text)
    strArtist = Trim(txtArtist.Text)
    strAlbumArtist = Trim(txtAlbumArtist.Text)
    strAlbum = Trim(txtAlbum.Text)
    intYear = Convert.ToInt32(Val(cmbDate.SelectedItem))
    strGenre = cmbGenre.SelectedItem
    strComments = Trim(txtComment.Text)
    strArt = Trim(txtAlbumArt.Text)

    'Create a file (mp3)
    Dim fName As TagLib.File = TagLib.File.Create(strInput)

    'Set the Album art.
    Dim pics As Picture = New Picture(strArt)

    'Insert the standard tags.
    fName.Tag.Title = strTitle
    fName.Tag.Performers = New String() {strArtist}
    fName.Tag.AlbumArtists = New String() {strAlbumArtist}
    fName.Tag.Album = strAlbum
    fName.Tag.Year = intYear
    fName.Tag.Genres = New String() {strGenre}
    fName.Tag.Comment = strComments

    'Insert Album art and
    ' save to file and dispose.
    Dim picsFrame As New TagLib.Id3v2.AttachedPictureFrame(pics)
    picsFrame.MimeType = System.Net.Mime.MediaTypeNames.Image.Jpeg

    'set the type of picture (front cover)
    picsFrame.Type = TagLib.PictureType.FrontCover

    'Id3v2 allows more than one type of image, just one is needed here.
    Dim pictFrames() As TagLib.IPicture = {picsFrame}

    'set the pictures in the tag
    fName.Tag.Pictures = pictFrames

    fName.Save()
    fName.Dispose()

    Me.Cursor = Cursors.Default
    lblSuccess.Text = "Tags Set Successfully."
End Sub

Я установил эту версию с помощью Visual Studio 2012, используя пункты меню «Инструменты» -> «Диспетчер пакетов библиотеки» -> «Консоль диспетчера пакетов». В приглашении «PM>» введите «Install-Package taglib». Это добавит пакет Taglib-Sharp в ваше приложение. На самом деле это утилита командной строки для Power Shell. Подождите несколько секунд, и вы готовы к работе.

person rspercy65    schedule 24.12.2012
comment
Спасибо, это здорово! Пришлось добавить 'picsFrame.Description =', иначе исходное расположение обложки сохраняется в mp3-файле. - person vr_driver; 27.02.2018