【问题标题】:android fastest way to decode mp3 to pcm dataandroid将mp3解码为pcm数据的最快方法
【发布时间】:2013-04-01 10:26:40
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java android mp3 decode


    【解决方案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)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 演示很糟糕。我想要的只是将 MP3 解码为 PCM。
      • 我使用了 JLayer 的这个修改版本并对其进行了基准测试:在我的例子中(解码几个几秒钟的 mp3 单声道音轨)这个版本并不比原始版本快。时间大致相同。
      猜你喜欢
      • 1970-01-01
      • 2013-06-06
      • 2013-10-02
      • 2021-06-24
      • 1970-01-01
      • 2012-12-07
      • 2019-06-27
      • 2011-07-15
      相关资源
      最近更新 更多