我正在尝试使用Taglib-sharp更新label/publisher字段,但在使用Object Browser的对象层次结构中看不到它。
我已经搜索了谷歌和文档,看起来这是一个没有被迎合的领域。
在我寻找替代方案之前(有人能给我建议吗?)可以编辑那些字段,我想我应该有最后一次破解,问问StackOverflow社区中谁熟悉TagLib-sharp,有更有见地的意见吗?
提前谢谢你,
弗朗西斯
更新:我已经研究了mpg123和UltraID3Lib等其他库,但它们似乎都有相同的限制。
发布于 2015-06-30 03:03:36
丹尼尔·福奇的回答对我不起作用。但是,这只是一个开始。
在TagLib-sharp代码中添加字段的步骤如下:
下载Source的
公共虚拟字符串Publisher { get { return "";} set {} }
公共重写字符串发布者{ get { return GetTextAsString(FrameType.TPUB);} set { SetTextFrame(FrameType.TPUB,value);} }
静态只读ReadOnlyByteVector TPUB =“TPUB”;公共静态只读
公共重写字符串发布器{ get { foreach (标签中的标签){ if (标签== null) continue;字符串值= tag.Publisher;if (值!= null)返回值;} return null;} set { foreach (标签中的标签) if (标签!= null) tag.Publisher =值;} }
重要的:我在编译代码时也遇到了问题。您必须下载SharpZipLib dll (Taglib2.0)并将此.NET包含在标记库项目中。此外,我还需要安装NUnit,这是我用Nuget创建的。最后,我在测试代码中注释了GDK库及其所有错误,因为在生产中不会使用它。
发布于 2012-12-05 19:03:55
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文件。
发布于 2012-11-13 22:48:41
我不习惯TagLib#,但我在Qt项目中使用TagLib,在该项目中,我通过检查TagLib::File::properties来检索此信息。看一下文档,它只是一个包含每个属性和值的字符串映射。
希望TagLib#有这个方法。
https://stackoverflow.com/questions/13361102
复制相似问题