我在MP3文件中写作艺术品时遇到了麻烦。 我能够使用Taglib-sharp读取和显示MP3文件中的所有艺术作品,但是当在MP3标签中插入多于1张图片(例如:FrontCover和BackCover)时,我遇到了问题如果只是一件艺术作品......我可以做到 谁能请我扔骨头,并告诉我该怎么做? (vb.net会很棒,但C#也可以做到这一点。)
还有一个请求......并删除了mp3标签内的图片?有人可以给我一个如何做的例子。
感谢您的帮助
答案 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的命令行实用程序。等几秒钟,你准备好了。