这个问题已经在我脑海中萦绕了几年,但我从未真正找到答案。
我想做的是提取 MP3 文件的实际波形/PCM,这样我就可以使用声卡播放它(当然)。
理想情况下,我会尝试一些 DSP 效果。
我的第一步是研究 LAME,但我没有发现任何与程序中的 MP3 解码相关的内容或类似的东西。
所以我问我在哪里可以找到这样的东西。
我应该使用什么语言?我在想 C,但也许有一些编程语言可以更有效地完成这项工作。
谢谢!
纪尧姆。
问题归结为:你想要完成什么?
从您对 MP3 解码并在声卡上播放的问题的描述中,听起来好像您正在尝试制作媒体播放器。
但是,如果您的意图是玩弄 DSP 效果,那么听起来问题更多是关于处理声音而不是解码 MP3。如果是这种情况,可能会考虑为现有媒体播放器(例如Windows Media Player和Winamp )编写插件,这将是您想要完成的最简单的途径。
坦率地说,从头开始学习编写自己的解码器不仅仅是一个编程问题,而是一个数学问题,因此使用现有的库是可行的方法。如果有的话,与操作系统或 DirectSound 等库对话以输出音频似乎是不必要的工作。我觉得为现有播放器开发插件是可行的方法,除非您的目标是制作自己的媒体播放器。
如果您真正想要完成的是播放音频数据,那么可能使用任何 MP3 解码器将 MP3 解码为未压缩的 PCM,然后以您选择的语言对其进行操作将实现您处理声音效果的目标。
语言选择将取决于您是否要直接与 MP3 解码库交互,或者您是否可以只使用原始音频输入,这将允许您使用几乎任何您选择的语言。
前段时间有一个类似的问题,程序化音频入门,我在其中发布了有关操作音频的一些基本方法的答案,例如放大、更改播放速度以及使用 FFT 进行一些工作。
libmpg123应该可以解决问题。
我一直在使用 Windows Media SDK,不是为了这个目的,但我很确定有钩子可以让你截取音频流,或将 MP4 转换为未压缩的 WAV。我使用了 C++。
很多:
http://www.mp3-tech.org/programmer/decoding.html
选择你的毒药...
此外,LAME 会解码 MP3(查看 --decode 选项),因此您可能会在该源中发现一些有趣的东西。
-亚当
这真的取决于你在什么平台上编程以及你想用代码做什么。如果您在 Windows 上,您应该查看windows 媒体格式 sdk或DirectShow。它们都应该能够将 mp3 文件解码为原始波形。在 Mac 上,我希望 Quicktime 也有同样的能力。其他人已经建议了 Linux/开源代码的源代码。
我建议您查看 Cubase 和 Wavelab,因为它们都可以将 MP3 转换为 WAV 等,并允许您播放波形