从 MP3 中提取原始音频/波形

Posted

技术标签:

【中文标题】从 MP3 中提取原始音频/波形【英文标题】:Extracting raw audio/waveform from an MP3 【发布时间】:2009-02-27 03:58:38 【问题描述】:

这个问题已经在我脑海中萦绕了好几年,但我从未真正找到答案。

我想做的是提取 MP3 文件的实际波形/PCM,这样我就可以使用声卡播放它(当然)。

理想情况下,我会尝试一些 DSP 效果。

我的第一步是研究 LAME,但我没有发现任何与程序中的 MP3 解码或类似内容相关的内容。

所以我问我在哪里可以找到这样的东西。

我应该使用什么语言?我在想 C,但也许有一些编程语言可以更有效地完成这项工作。

谢谢!

纪尧姆。

【问题讨论】:

转换为 WAV/PCM/其他一些原始格式是否需要编程,或者是否需要一个实用程序/程序在外部完成它就足够了?我假设前者,因为后者会将这个问题放在与编程无关的领域;-) 【参考方案1】:

问题归结为:您要完成什么?

根据您对 MP3 解码并在声卡上播放的问题的描述,听起来好像您正在尝试制作媒体播放器。

但是,如果您的目的是使用 DSP 效果器,那么听起来问题更多是关于处理声音而不是解码 MP3。如果是这种情况,可能会考虑为现有媒体播放器(例如Windows Media Player 和Winamp)编写插件,这将是您想要完成的最简单的途径。

坦率地说,从头开始学习编写自己的解码器不仅仅是一个编程问题,而是一个数学问题,因此使用现有的库是可行的方法。如果有的话,与操作系统或 DirectSound 等库对话以输出音频似乎是不必要的工作。我觉得为现有播放器开发插件将是可行的方法,除非您的目标是制作自己的媒体播放器。

如果您真正想要完成的是播放音频数据,那么可能使用任何 MP3 解码器将 MP3 解码为未压缩的 PCM,然后以您选择的语言对其进行操作将实现您处理声音效果的目标。

语言选择将取决于您是要直接与 MP3 解码库交互,还是只使用原始音频输入,这样您就可以使用几乎任何您选择的语言。

不久前有一个类似的问题,Getting started with programmatic audio,我在其中发布了有关操作音频的一些基本方法的答案,例如放大、更改播放速度以及使用 FFT 进行一些工作。

【讨论】:

你,先生,真棒!我浏览了你的答案,看起来很棒!我明天去看看。谢谢! 谢谢,很高兴能帮上忙! :)【参考方案2】:

libmpg123 应该可以解决问题。

【讨论】:

【参考方案3】:

我一直在使用 Windows Media SDK,但不是出于此目的,但我很确定有一些钩子可以让您截取音频流,或将 MP4 转换为未压缩的 WAV。我用的是 C++。

【讨论】:

【参考方案4】:

手数:

http://www.mp3-tech.org/programmer/decoding.html

选择你的毒药...

此外,LAME 确实解码 MP3(查看 --decode 选项),因此您可能会在该来源中发现一些有趣的东西。

-亚当

【讨论】:

【参考方案5】:

这实际上取决于您在什么平台上进行编程以及您想对代码做什么。如果您使用的是 Windows,您应该查看 windows media format sdk 或 DirectShow。它们都应该能够将 mp3 文件解码为原始波形。在 Mac 上,我希望 Quicktime 也有同样的能力。其他人已经建议了 Linux/开源代码的源代码。

【讨论】:

【参考方案6】:

我建议您查看 Cubase 和 Wavelab,因为它们都可以将 MP3 转换为 WAV 等,并允许您使用波形

【讨论】:

以上是关于从 MP3 中提取原始音频/波形的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中使用 libsndfile 从 WAV 文件中提取原始音频数据

用于从 MP3 文件中提取音频信息的 Java 库

ffmpeg 音轨提取

如何在 C# 中使用原始音频样本创建波形流?

用Java获取音频文件的波形

从 MP3 音频数据中提取图像艺术品为 PNG