使用TagLib设置Apple .m4a文件的显式标记#

时间:2017-02-23 18:56:37

标签: c# .net metadata itunes taglib-sharp

我正在使用此方法添加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,或者什么?

谢谢!

1 个答案:

答案 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