读取MP3文件

时间:2010-06-03 18:20:00

标签: c++ mp3

我想用C ++阅读MP3文件,我更喜欢为此编写自己的代码。基本上要了解文件类型的工作原理。我想读取MP3文件的十六进制数据的所有位,并让我的扬声器播放它。 :)我不知道从哪里开始,因为我还不知道数据实际上是如何存储到MP3文件中的。

感谢您的帮助

6 个答案:

答案 0 :(得分:19)

您可以从here购买MP3格式的规格。大概是160EUR。

哦,顺便说一下,它不是“十六进制数据”。如果您仍处于将任何非人类可读数据称为“十六进制”(这是一个数字系统)的位置,那么首先将头部转换为涉及复杂解码/编码算法的二进制数据格式可能会有点对你来说太暂时了。

如何开始编写可播放.wav文件的播放器? (任何合理的.wav文件,请注意,考虑到文件格式和不同的音频格式)

答案 1 :(得分:17)

首先阅读structure on an mp3 file。然后,如果您仍然感兴趣,请在how to decode the audio data in each frame上找到一个很好的教程。它非常复杂,所以你需要花很多时间从头开始。

答案 2 :(得分:6)

我做了一些研究,也许它会帮助你。

文件结构

enter image description here MP3文件由多个MP3帧组成,包括标题和数据块。这个帧序列称为基本流。帧不是独立的项(“字节存储器”),因此不能在任意帧边界上提取。 MP3数据块包含频率和幅度方面的(压缩)音频信息。该图显示MP3标头包含一个同步字,用于标识有效帧的开头。接下来是一个指示这是MPEG标准的位和两个指示使用第3层的位;因此MPEG-1 Audio Layer 3或MP3。此后,值将有所不同,具体取决于MP3文件。 ISO / IEC 11172-3定义了报头每个部分的值范围以及报头的规范。今天大多数MP3文件都包含ID3元数据,这些元数据位于MP3帧之前或之后;如图所示。

LAME的源代码

LAME是一个MP3库,但它也是开源的,这意味着您可以下载源代码并查看它。 http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz/download 我自己看了一下,好像是用C或C ++编写的,所以你很幸运。 如果您检查LAME的源代码,并了解它的工作原理,也许您可​​以成功制作自己的MP3库。请注意,LAME不是用于播放MP3文件的库,而是用于编码它们的库。但是因为它创造了MP3而不是阅读它们,我认为结构应该比任何其他MP3播放器库更清晰。

MP3文件格式说明

这也似乎解释了MP3如何运作得相当好,但它是纯粹的理论,所以你需要很多耐心。 http://www.mp3-converter.com/mp3codec/

答案 3 :(得分:4)

嗯,这很难:)

无论如何,您的应用程序应该由两部分组成 - 解压缩库/例程和您的主后端,这将需要一些解压缩的数据块,实际上 播放它。

我建议通过 David Salomon 推荐“数据压缩”,以了解您的解码器应该如何实际。不幸的是,你的第二部分的变体太宽泛,不能用一句话来覆盖它们。

您还可以尝试调查一些开源mp3解码器/解码库,例如this one.

答案 4 :(得分:0)

如果你坚持自己做,你几乎必须从规范开始:

http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html

答案 5 :(得分:0)

您需要为您的任务使用一些解码器库,例如http://sourceforge.net/projects/mpg123net/

还有MAD解码器...... http://www.underbit.com/products/mad/

要正确阅读mp3文件,需要涉及大量数学,我想你真的不想进入那个......