是否可以使用TagLib#库向 mp3 文件添加自定义标签(比如“SongKey: Em”) ?
问问题
3288 次
1 回答
10
您可以通过在自定义(私有)帧中写入数据来将自定义标签添加到 MP3。
但首先:
如果您使用的是 ID3v1,则必须切换到 ID3v2。任何版本的 ID3v2 都可以,但与大多数东西兼容的版本是ID3v2.3。
所需的 using 指令:
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[]
可以写入框架,只要您正确转换(并在读取时转换回)数据,不仅可以将文本,而且几乎任何对象类型都可以保存在标签中。
要将任何对象转换为 a byte[]
,请参阅使用 a执行此操作的此答案Binary Formatter
。
于 2015-12-29T10:04:41.763 回答