我正在使用此方法添加ITUNESADVISORY
标记:
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("ITUNESADVISORY", vector, (int)TagLib.Mpeg4.AppleDataBox.FlagType.ContainsData);
f.Save();
}
除非它不起作用。它会在type
行引发异常(null
不能为SetData(type, vector, flags)
)。我是否需要以某种方式首先添加DataBox,或者什么?
谢谢!
答案 0 :(得分:0)
customTag.SetData()
的类型参数必须正好是4个字节,因为它用作保存标记数据的BoxType
对象的TagLib.Mpeg4.AppleTag
属性。 ITUNESADVISORY 标记实际上是使用包含BoxType
的{{1}}标识的,其转换为字符串值 rtng 。
{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();
}
方法会创建一个4字节的数组,但 rtng的数据值标记必须只包含单个字节值。
rtng 标记的有效值为:
Taglib.ByteVector
- 没有评分(内容从未明确开始)。 0
- 明确(内容包含令人反感的语言)。 1
- 清洁(内容已被消除了令人反感的语言)。 我以一种更容易让我一目了然的方式重写了您的示例代码。我是一名初学者,所以我可能违反了一些事实上的标准。我还更改了大多数变量的名称,以更好地反映它们实际包含的内容。例如,您调用的2
变量tags
几乎可以保存所有标记和歌曲数据;它不仅仅是您尝试创建或编辑的单个标记。希望这能帮助像我这样的新手。
customTag