【发布时间】:2020-01-13 21:00:48
【问题描述】:
作为个人项目的一部分,我正在为 Rust 中的各种二进制格式编写一个通用解析器库。我已经开始研究 MP3 文件的文件结构。据我了解,MP3 文件结构由标题和数据帧组成。每个标头帧都提供有关正在进行的数据帧的元信息。这是我引用的 MP3 标头帧的 diagram 和 listing of allowed values。
我了解 MP3 标头的格式。我对 MP3 数据帧感到困惑或缺乏信息。我似乎找不到指定在 MP3 文件的数据帧部分中编码的 整数类型 样本的来源。它们是 8 位、16 位、32 位、有符号、无符号等吗?
我能想到的最好的方法是使用采样率频率和比特率的组合来计算每个样本大小应该是什么。但是,这并不能确定每个样本是有符号整数还是无符号整数。
我不是在尝试解码这些文件,我只是在尝试解析它们。我很难找到这些信息。任何人可以提供的信息或帮助将不胜感激。
【问题讨论】:
-
MP3 不包含您所指方式的样本。它是有损压缩,在频域中完成。一旦你通过了标题,我认为你必须查看解码器的源代码才能更深入。
-
此外,频域转换和量化的结果然后是霍夫曼或算术编码(不记得哪个用于第 3 层)。根据定义,编码数据在比特流中是可变长度的。
-
我了解 MP3 是经过压缩的,数据帧的物理格式不会直接转换为比特流。我只是试图解析 MP3 文件的内容,而不是对其进行解码。要解析 MP3 文件,只有指定数据帧的布局才有意义,解码器必须就布局/格式达成一致才能对其进行解码。