无法在.Net中使用Taglib-sharp 2.0.4.0编写ArtWork

时间:2011-08-29 23:57:50

标签: .net id3-tag artwork taglib-sharp

我在MP3文件中写作艺术品时遇到了麻烦。 我能够使用Taglib-sharp读取和显示MP3文件中的所有艺术作品,但是当在MP3标签中插入多于1张图片(例如:FrontCover和BackCover)时,我遇到了问题如果只是一件艺术作品......我可以做到 谁能请我扔骨头,并告诉我该怎么做? (vb.net会很棒,但C#也可以做到这一点。)

还有一个请求......并删除了mp3标签内的图片?有人可以给我一个如何做的例子。

感谢您的帮助

4 个答案:

答案 0 :(得分:4)

您如何插入和删除图像?你能发一些代码吗?

所有标签都使用IPicture界面和Tag.Pictures getter和setter。修改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 :(得分:4)

我遇到了与Bobby Bhamra相同的问题。我发现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行。另外,我通过.NET常量指定了Mime类型。

因此,不需要TagLib.PictureType.Other或使用说明的变通方法。我的解决方案唯一的缺点是它只能正常用于MP3文件。

答案 2 :(得分:1)

我在我的MP3标记应用中使用以下taglib-sharp代码。如果没有设置'mime'和'type',即使Windows / WMP正确显示它,我也无法在iTunes中显示艺术品并随后在我的Ipod上显示。

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()

HTH

答案 3 :(得分:1)

我正在使用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的命令行实用程序。等几秒钟,你准备好了。