C++跨平台MP3解码器?

5

我寻遍各处,却找不到一个像样的MP3解码器 =/

我需要一个能在gcc/linux下编译的解码器。

最接近的是libmad,但它没有任何文档,而且我能找到的唯一示例是它们主页上的那个,非常复杂。

有人知道我可以在哪里找到一个吗?


你看过LAME吗?http://lame.sourceforge.net/ - Brian Kelly
是的...我之前以为它只用于编码...我再确认一下。 - CuriousGeorge
看了一下命令行页面:http://lame.cvs.sourceforge.net/viewvc/lame/lame/USAGE 我至少可以看到几个看起来很有前途的选项,比如 --decode--mp3input。这表明底层库有能力做你需要的事情,我想象中是这样的。无论它是否具有漂亮、封装良好的 C++ 函数来解码 mp3,这又是另一回事了... - Brian Kelly
请注意,如果您将此添加到任何项目并分发它们,则可能会遇到Fraunhofer IIS和其他几家拥有MP3技术权利的公司的专利问题。 - Billy ONeal
@Brian:你应该把那个发表为答案。 - Billy ONeal
4个回答

4

您看过Lame了吗?

从它的命令行页面来看,我至少可以看到一些看起来很有前途的选项,比如--decode--mp3input。这表明底层库有能力做你需要的事情,可以想象的是。不管它是否有漂亮、封装良好的C++函数来解码mp3文件是另一个故事。

正如评论中正确指出的那样,您应该仔细检查许可和专利协议。


+1 给真正的第一个答案(也可能是最好的答案)。 - Billy ONeal

4

我曾经使用过MAD(MPEG音频解码器),并取得了很好的效果,所以我不会轻易放弃它。 MAD是专为没有浮点运算的CPU设计的,这在开发移动设备应用程序时非常理想。
我建议你看一下此项目(GSPlayer)的源代码。 它是一个Windows CE / Windows Mobile音频播放器,使用libmad。 代码完全功能齐全,整洁,而且不太大,因此可以帮助你了解如何在自己的项目中使用libmad。

但是,您可能需要验证libmad的许可证(GPL),因为它可能不适合您的需求。


1
他已经因为拥有该功能而面临许可证问题。该死的软件专利。(他在问题中已经提到了这一点) - Billy ONeal
2
我终于让它工作了...但是直到我看了一些FMOD的例子,才发现程序员需要提供自己的读写函数。在我用作参考的另一个解码示例中,ogg vorbis库正在从文件中读取并填充缓冲区 =/ 但我想这种做法是为了更好的可移植性?而这正是我需要的。感谢您的帮助 :) - CuriousGeorge
@platinoob_ 直接在 Windows 中使用 MAD 需要了解低级 Windows API 的知识。如果你现在需要从零开始学习这些 API,那么你会发现这个任务非常具有挑战性。 - yms
@platinoob_ 我建议你看一下libzplay,它在幕后使用mad,对你来说更容易理解。你仍然需要知道如何在Windows C++应用程序中加载dlls。回答你的问题,我不认为MAD库在Windows 7和VS2019下不能工作,它是一个普通的Windows库,没有特殊的先决条件,但我从未亲自测试过。 - yms
@platinoob_ 这应该足够了,参见这里:https://dev59.com/J3VC5IYBdhLWcg3w7V_3:~:text=A%20static%20library%20must%20be%20linked%20into%20the,separate%20from%20the%20executable%20as%20a%20DLL%20file. - yms
显示剩余2条评论

2

FFmpeg应该能够轻松处理MP3。但实际上访问该功能有多容易,我无法确定。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接