【问题标题】:What integer type is used for MP3 data frames?MP3 数据帧使用什么整数类型?
【发布时间】:2020-01-13 21:00:48
【问题描述】:

作为个人项目的一部分,我正在为 Rust 中的各种二进制格式编写一个通用解析器库。我已经开始研究 MP3 文件的文件结构。据我了解,MP3 文件结构由标题和数据帧组成。每个标头帧都提供有关正在进行的数据帧的元信息。这是我引用的 MP3 标头帧的 diagramlisting of allowed values

我了解 MP3 标头的格式。我对 MP3 数据帧感到困惑或缺乏信息。我似乎找不到指定在 MP3 文件的数据帧部分中编码的 整数类型 样本的来源。它们是 8 位、16 位、32 位、有符号、无符号等吗?

我能想到的最好的方法是使用采样率频率和比特率的组合来计算每个样本大小应该是什么。但是,这并不能确定每个样本是有符号整数还是无符号整数。

我不是在尝试解码这些文件,我只是在尝试解析它们。我很难找到这些信息。任何人可以提供的信息或帮助将不胜感激。

【问题讨论】:

  • MP3 不包含您所指方式的样本。它是有损压缩,在频域中完成。一旦你通过了标题,我认为你必须查看解码器的源代码才能更深入。
  • 此外,频域转换和量化的结果然后是霍夫曼或算术编码(不记得哪个用于第 3 层)。根据定义,编码数据在比特流中是可变长度的。
  • 我了解 MP3 是经过压缩的,数据帧的物理格式不会直接转换为比特流。我只是试图解析 MP3 文件的内容,而不是对其进行解码。要解析 MP3 文件,只有指定数据帧的布局才有意义,解码器必须就布局/格式达成一致才能对其进行解码。

标签: audio blob mp3


【解决方案1】:

虽然这与 .mp3 本身无关,但 Will C. Pirkle 的书中可能会提供一些有用的信息,Designing Audio Effect Plugins in C++

他讨论了 .wav 音频格式存储其信息的方式。它使用从 -32,768 到 32,767 的有符号整数。这以双极格式表示 2^16 的范围,其中指数对应于位深度(最常见的是 16 或 24)。

另一个需要注意的重要事项是,虽然相位反转在许多音频应用中很常见,但没有对应的整数用于反转 -32,768。作为补偿,通常将值 -32,768 视为 -32,767。这仅在您在处理中使用值 0 时才重要,这是最常见的情况。否则,可以将上限扩大到 32,768。

他确实指出,音频处理应用程序处理 0.0f 和 1.0f 或 -1.0f 和 1.0f 之间的浮点数更为常见。原因是由于加法和乘法是 DSP 中的常见操作,如果我们使用这些浮点数,我们可以避免溢出该范围。在双极整数格式中,很容易找到导致乘积或总和超出该范围的两个数字。在 -1.0f 到 1.0f 的范围内,任何两个数字都会总是产生仍在该范围内的产品。不幸的是,添加仍然需要谨慎,但是呃...

很抱歉,我没有关于 .mp3 的更多信息,但也许这仍然是有见地的。

祝你好运!

【讨论】:

    猜你喜欢
    • 2011-07-10
    • 1970-01-01
    • 2015-09-19
    • 2011-07-06
    • 2020-09-20
    • 2019-07-05
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多