5

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

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

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

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

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

4

2 回答 2

1

这是您在 android 中使用 Native 的时刻!

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

-这里有一些有用的库:

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

于 2013-07-17T10:36:43.687 回答
1

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

于 2016-01-11T15:45:51.300 回答