【问题标题】:Reading MP3 files [closed]读取 MP3 文件 [关闭]
【发布时间】:2010-06-03 18:20:00
【问题描述】:

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

感谢您的帮助

【问题讨论】:

  • 如果你需要这样问,我建议你放弃自己写的想法,而是使用一些库。

标签: c++ mp3


【解决方案1】:

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

【讨论】:

【解决方案2】:

您可以从here 购买 MP3 格式的规范。大约 160 欧元。

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

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

【讨论】:

  • 可购买的规范和其他答案提供的链接有什么区别?
  • +1 建议从 .wav 文件开始
  • @Pindatjuh:我想说的是完整性(可能在世界的某些地方,合法性)。另外,很多链接似乎都在谈论文件格式(相当简单),而不是实际的解压缩算法。
  • MP3的合法性问题似乎与encoding MP3有关。这是一个难题:决定要省略什么。这需要人类听力的数学模型。解码不需要这么复杂的决定。
  • @MSalters:因此,“可能”。我很少费心去熟悉无聊的法律内容。
【解决方案3】:

我做了一些研究,也许对你有帮助。

文件结构

一个 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/

【讨论】:

    【解决方案4】:

    好吧,这将是艰难的:)

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

    我会推荐 David Salomon 所著的“数据压缩”一书,以了解您的解码器实际上应该如何执行此操作。不幸的是,您的第二部分的变体过于宽泛,无法用一句话来涵盖它们。

    您也可以尝试研究一些开源 mp3 解码器/解码库,例如 this one.

    【讨论】:

    • +1 推荐阅读现有代码。
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

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

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

      要正确读取 mp3 文件,涉及到很多数学问题,我猜你真的不想进入那个...

      【讨论】:

        猜你喜欢
        • 2013-03-20
        • 2014-05-20
        • 2019-01-27
        • 2010-11-03
        • 2015-04-18
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 2013-04-30
        相关资源
        最近更新 更多