android最快的解码mp3到pcm数据的方法

时间:2013-04-01 10:26:40

标签: java android mp3 decode

在我的应用中,我需要将mp3文件解码为pcm缓冲区。这是很多数据,所以当我读取并解码时,我将它下采样到单声道22050Hz。

目前我正在使用javazoom jlayer decoder http://www.javazoom.net/javalayer/javalayer.html

它工作但速度慢,30秒可以在运行模式下解码3分钟的歌曲,在调试模式下老化。在我使用libmpg的Windows机器上,我可以在大约1秒内完成。

是否有更快的方式,任何人都知道肯定更快?我不想浪费时间实现另一种方法,如果它没有明显更快。感谢。

顺便说一句,在我的应用程序中,我需要将整个内容下载到内存中的pcm缓冲区,所以我对那些只播放mp3文件的内容不感兴趣。

2 个答案:

答案 0 :(得分:1)

这是你在Android中使用Native的时刻!

- 使用NDK并找到一个快速的c / c ++库(它们比jlayer快20倍,例如18秒内9min sogn)

- 有些库可能很有用:

http://www.mpg123.de/

www underbit.com/products/mad /

www oracle.com/technetwork/java/javase/download-137625.html(不确定这个支持MP3toPCM)

lame.sourceforge.net/about.php(这个在github上有一个android开源项目,我希望对你非常有用! https://github.com/intervigilium/liblame

答案 1 :(得分:1)

JLayer是原始Fraunhoffer mp3 C代码的转换。可悲的是,转换它的人在整个代码中分散了大量不必要的缓冲区副本,因为他可能不太了解发生了什么(不是问题,那些事情发生)。然而,结果是一个非常慢的mp3解码器。最终,我们开始删除所有不必要的缓冲区副本,并为JLayer源添加了精确的可搜索性。可以在http://bpmdj.yellowcouch.org/credits.html,JLayer1.0.1部分找到存储库和如何使用它的演示。结果比原来快2.5倍。