是否可以使用TagLib# libary将自定义标签(例如" SongKey:Em")添加到mp3文件中?
答案 0 :(得分:8)
您可以通过在自定义(私有)框架中写入数据,为MP3添加自定义标签。
但首先:
如果您使用的是ID3v1,则必须切换到ID3v2。任何版本的ID3v2都可以,但与大多数的东西兼容的版本是 ID3v2.3 。
所需的使用指令:
using System.Text;
using TagLib;
using TagLib.Id3v2;
创建私人相框:
File f = File.Create("<YourMP3.mp3>"); // Remember to change this...
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)f.GetTag(TagTypes.Id3v2); // You can add a true parameter to the GetTag function if the file doesn't already have a tag.
PrivateFrame p = PrivateFrame.Get(t, "CustomKey", true);
p.PrivateData = System.Text.Encoding.Unicode.GetBytes("Sample Value");
f.Save(); // This is optional.
在上面的代码中:
"<YourMP3.mp3>"
更改为MP3文件的路径。"CustomKey"
更改为您希望密钥的名称。"Sample Value"
更改为您要存储的任何数据。阅读私人相框:
File f = File.Create("<YourMP3.mp3>");
TagLib.Id3v2.Tag t = (TagLib.Id3v2.Tag)f.GetTag(TagTypes.Id3v2);
PrivateFrame p = PrivateFrame.Get(t, "CustomKey", false); // This is important. Note that the third parameter is false.
string data = Encoding.Unicode.GetString(p.PrivateData.Data);
在上面的代码中:
"<YourMP3.mp3>"
更改为MP3文件的路径。"CustomKey"
更改为您希望密钥的名称。读取和写入之间的差异是PrivateFrame.Get()
函数的第三个布尔参数。在阅读时,您会通过false
并在撰写时通过true
。
其他信息:
由于byte[]
可以写在帧上,不仅可以写入文本,而且几乎任何对象类型都可以保存在标记中,只要您正确转换(并在读取时转换回来)数据。
要将任何对象转换为byte[]
,请参阅使用Binary Formatter
的{{3}}来执行此操作。