【问题标题】:How to read XingHeaders and VBRIHeaders from MP3 files using TagLib-Sharp如何使用 TagLib-Sharp 从 MP3 文件中读取 XingHeaders 和 VBRIHeaders
【发布时间】:2011-09-05 23:07:44
【问题描述】:

我需要使用 TagLib-Sharp 提取 MP3 文件的 Xing 和 Fraunhofer VBRI 标头中存储的信息。

我在网上搜索了一个示例,查看了源代码,但如何使用 XingHeader 和 VBRIHeader 类并不明显。它们看起来不是 MPEG 文件/音频文件属性的一部分。

构造函数需要一个在 TagLib 命名空间中定义的 ByteVector 类。

谁能提供使用 XingHeader 和 VBRIHeader 类的示例?任何帮助将不胜感激。

【问题讨论】:

标签: c# mp3 taglib-sharp


【解决方案1】:

类似下面的东西应该可以工作:

foreach(ICodec codec in file.Properties.Codecs) {
    Mpeg.AudioHeader header = (Mpeg.AudioHeader) codec;
    if(header == null)
        return;

    if(header.XingHeader != Mpeg.XingHeader.Unknown) {
        /* CODE HERE */
    }

    if(header.VBRIHeader != VBRIHeader.Unknown) {
        /* CODE HERE */
    }
}

【讨论】:

  • 谢谢,我会试试看,过几天再找你。
  • 与 .Unknown 的比较不起作用,但有一个 .IsPresent 属性指示标头是否存在。这让我走上了正轨。非常感谢!
  • 事实上,在进一步检查之后,TagLib 中的 Xing 实现并没有获取标头中的不同变量,所以我自己做了。此页面是 Xing 标头中的 LAME 扩展的一个很好的参考:gabriel.mp3-tech.org/mp3infotag.html 这并不难,TagLib 将您指向第一帧数据,然后您检测它是否是 Xing 帧并获取编码器延迟/无间隙 MP3 播放所需的填充。再次感谢您的帮助!
  • 顺便说一句,TagLib 似乎无法识别 CBR 文件中的 Xing 标头。这似乎是因为 CBR 文件的标题中包含“Info”而不是“Xing”(请参阅​​ gabriel.mp3-tech.org/mp3infotag.html)。我制作了一个读取 Xing/Info 标头的原型(Xing 用于 VBR 和 ABR 文件,Info 用于 CBR 文件),并确认了这一点。简而言之,TagLib 对标签的支持非常棒,但对于 Xing/Info 和 VBRI 标头来说却很糟糕。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
相关资源
最近更新 更多