taglib-sharp中是否有与Label / Publisher等效的字段?

我正在尝试使用Taglib-sharp更新标签/发布者字段,但我无法使用对象浏览器在其对象层次结构中的任何位置看到它。

我搜索了谷歌和文档,它看起来像是一个没有照顾的领域。

在我寻找可以编辑这些字段的替代方案(可以任何人建议吗?)之前,我想我会有最后一个破解,并在StackOverflow社区内询问谁熟悉TagLib-sharp有更明智的意见?

提前致谢,

弗朗西斯

更新:我已经调查了其他库,如mpg123和UltraID3Lib,但它们似乎有相同的限制。

好吧,Daniel Fuchs的回答对我不起作用。 但是,这是一个开始。

在TagLib-sharp代码中添加字段的步骤是:

  1. 下载源代码

  2. 打开File TagLib / Tag.cs并插入以下代码(我将它插入PerformersSort,250行下面)

    public virtual string Publisher { get { return ""; } set { } } 
  3. 打开File TagLib / Id3v2 / Tag.cs并插入以下代码(我在PerformersSort下面插入它,第1292行)

     public override string Publisher { get { return GetTextAsString(FrameType.TPUB); } set { SetTextFrame(FrameType.TPUB, value); } } 
  4. 打开File TagLib / Id3v2 / FrameTypes.cs并插入以下代码(我将其插入TPOS下面,第71行)

     public static readonly ReadOnlyByteVector TPUB = "TPUB"; 
  5. 现在来了“啊哈”的事情。 打开File TagLib / CombinedTag.cs并插入以下代码(我在PerformersSort下面插入它,第318行)

     public override string Publisher { get { foreach (Tag tag in tags) { if (tag == null) continue; string value = tag.Publisher; if (value != null) return value; } return null; } set { foreach (Tag tag in tags) if (tag != null) tag.Publisher = value; } } 
  6. 最后,编译代码。

重要提示 :我在编译代码时遇到了问题。 您必须下载SharpZipLib dll (.NET 2.0)并在taglib项目中包含此dll。 另外,我需要安装NUnit,这是我用Nuget制作的。 最后,我评论了GDK lib及其在测试代码中的所有错误,因为在生产中它不会被使用。

那么TagLib#无法读取发布商代码。 即使是最新版本(2.1.0.0)到目前为止也无法做到这一点。 作为替代方案,您可以使用免费提供的TagLib#源代码自行添加此function。

为此,打开文件TagLib / Id3v2 / FrameTypes.cs并在某处添加以下行:

 public static readonly ReadOnlyByteVector TPUB = "TPUB"; // Publisher field 

TagLib / Id3v2 / Tag.cs文件中:

 public string Publisher { get {return GetTextAsString (FrameType.TPUB);} set {SetTextFrame (FrameType.TPUB, value);} } 

然后,您可以使用类似的方式访问Publisher字段

 TagLib.File tf = TagLib.File.Create(...); // open file tf.Tag.Publisher = "Label XY"; // write new Publisher tf.Save(); // save tags 

请注意,这是一个丑陋的黑客,但适用于MP3文件。

我不习惯TagLib#,但我在Qt项目中使用TagLib,在那里我检索这些信息检查TagLib::File::properties 。 看一下文档,它只是一个包含每个属性和值的字符串映射。

希望TagLib#有这种方法。