Возникли проблемы при написании ArtWork с Taglib-sharp 2.0.4.0 в .Net - PullRequest
1 голос
/ 30 августа 2011

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

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

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

Ответы [ 4 ]

4 голосов
/ 03 декабря 2012

Я столкнулся с той же проблемой, что и Бобби Бхамра.Я обнаружил, что 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 Type через константу .NET.

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

4 голосов
/ 12 октября 2011

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

Все теги работают с использованием интерфейса 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

1 голос
/ 24 декабря 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. Подождите несколько секунд, и вы готовы к работе.

1 голос
/ 21 февраля 2012

Я использую следующий taglib-sharp код в моем приложении для тегирования MP3. Без установки «mime» и «type» я не смог отобразить иллюстрацию в 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()

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...