的类型参数customTag.SetData()
必须正好是 4 个字节,因为它被用作保存标签数据的对象的BoxType
属性。TagLib.Mpeg4.AppleTag
ITUNESADVISORY标签实际上是使用包含标识的,它转换为 rtng 的字符串值。BoxType
{114, 116, 110, 103}
static void SetExplicit(string file)
{
var f = TagLib.File.Create(file);
TagLib.Mpeg4.AppleTag customTag = (TagLib.Mpeg4.AppleTag)f.GetTag(TagLib.TagTypes.Apple, true);
var vector = new TagLib.ByteVector();
vector.Add((byte)1);
customTag.SetData("rtng", vector, (int)TagLib.Mpeg4.AppleDataBox.FlagType.ContainsData);
f.Save();
}
注意: 默认情况下,这些 Taglib.ByteVector
方法创建一个 4 字节数组,但是rtng标签的数据值必须只包含一个字节值。
rtng标签的有效值为:
0
- 无评级(内容从一开始就没有明确)。
1
- 显式(内容包含攻击性语言)。
2
- 干净(内容已清除攻击性语言)。
备用代码示例
我以一种更容易一目了然的方式重写了您的示例代码。我是一个初级程序员,所以我可能违反了一些事实上的标准。我还更改了大多数变量的名称,以更好地反映它们实际包含的内容。例如,tags
您调用的变量customTag
包含几乎所有的标签和歌曲数据;它不仅仅是您尝试创建或编辑的单个标签。希望这对像我这样的新手有所帮助。
static void SetExplicit(string file)
{
var f = TagLib.File.Create(file);
var tags = (TagLib.Mpeg4.AppleTag) f.GetTag(TagLib.TagTypes.Apple);
TagLib.ByteVector customTagName = "rtng";
TagLib.ByteVector customTagData = new byte[] { 1 };
var customTagFlag = (UInt32)TagLib.Mpeg4.AppleDataBox.FlagType.ContainsData;
tags.SetData(customTagName, customTagData, customTagFlag);
f.Save();
}