读取MP3文件

Mid*_*das 17 c++ mp3

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

谢谢你的帮助

Mat*_*nen 19

您可以从这里购买MP3格式的规格.大概是160EUR.

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

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

  • 可购买的规范与其他答案提供的链接之间有什么区别? (2认同)

jba*_*all 18

首先阅读mp3文件结构.然后,如果您仍然感兴趣,请找一个关于如何解码每帧中音频数据的好教程.它非常复杂,所以你需要花很多时间从头开始.


Rob*_*inJ 7

我做了一些研究,也许它会对你有所帮助.

文件结构

在此输入图像描述 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/


Cos*_*ert 5

好吧,这将很难:)

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

我会推荐David Salomon撰写的“ Data Compression”一书,以了解您的解码器实际上应该如何做。不幸的是,第二部分的变体太宽,无法用一句话涵盖它们。

您也可以尝试研究一些开源的mp3解码器/解码库,例如这样的