繁体   English   中英

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

[英]Is there an equivalent field to Label/Publisher in taglib-sharp?

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

我已经搜索过谷歌和文档,看起来它是一个不适合的领域。

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

提前致谢,

弗朗西斯

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

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

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

  1. 下载

  2. 打开文件TagLib/Tag.cs并插入以下代码(我将其插入到 PerformersSort 下方,第 250 行)

     public virtual string Publisher { get { return ""; } set { } }
  3. 打开文件TagLib/Id3v2/Tag.cs并插入以下代码(我将其插入到 PerformersSort 下方,第 1292 行)

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

     public static readonly ReadOnlyByteVector TPUB = "TPUB";
  5. 现在是“啊哈”的事情。 打开文件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) 并将此 dll 包含在 taglib 项目中。 另外,我需要安装我用 Nuget 制作的 NUnit。 最后,我在测试代码中评论了 GDK 库及其所有错误,因为在生产中不会使用它。

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

为此,请打开文件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# 有这个方法。

2019-12-30 更新:

看起来主要的taglib项目已经包含了publisher 字段,所以你应该只使用最新版本。 我已经从我的 fork 更新到最新的 TagLib,可以证明它按预期工作。

提示:如果您想更改 TagLib 编译到的框架版本(在编写时默认为 462 和 .NET STD 2.0),您需要更改位于 Solutions 文件夹中的 Directory.Build.Props 文件。

<Project>
<PropertyGroup>
    <ReleaseVersion>2.2.0.0-beta</ReleaseVersion>
    <RepositoryUrl>https://github.com/mono/taglib-sharp</RepositoryUrl>
    <RepositoryType>git</RepositoryType>
    <TaglibSharpTargetFramework>net472;netstandard2.0</TaglibSharpTargetFramework>
    <LangVersion>latest</LangVersion>
</PropertyGroup>
</Project>

我在上面粘贴了我的版本,这表明我已将其更改为编译为 .NET 4.7.2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM