繁体   English   中英

在Android上慢速解码MP3

[英]Slow MP3 decoding on Android

我一直在从本教程开始研究Android中的MP3解码

不知何故,解码4:30持续时间的歌曲需要1分钟以上,这在我的情况下是完全不可接受的。 我一直试图弄清楚问题是什么,并寻找提高速度的方法。 几天来一直在互联网上搜索仍然无法找出原因,因为资源非常有限。 我想我完全被困在这里,因为我无法从研究中获得任何东西。

有人可以指出有关在Android中处理MP3文件的任何信息吗? 我使用的libmad解码MP3文件,并移植到用的Android NDK。 也许有人可以指出MP3解码的任何替代方案。 我很感激有关它的任何信息,非常感谢你。

您寻找的所有答案都已在教程页面上。

正如他在文章中解释的那样,时间似乎是正常的:

我用歌曲“Schism”通过工具测试了它,这是一首长度为6:47分钟的歌曲,编码为192kbps。 文件权重为9.31mb,对于mp3 imo来说相当大...没有任何优化(拇指代码,-O0,-DFPM_DEFAULT == libmad中的标准定点数学,没有arm汇编程序优化的fp math)解码完整的文件需要在我的里程碑上184秒。

然后他解释了他如何优化它。 您应该遵循相同的步骤:

神圣的狗屎,蝙蝠侠! 如果我消除了缓慢到44秒的buffer.get(samples)调用! 难以置信。 现在我仍然认为这是慢的方式所以我开始添加优化。 我做的第一件事是编译成直臂而不是拇指代码。 你可以通过将它放在Android.mk文件中来告诉NDK工具链这样做:

LOCAL_ARM_MODE := arm

使用此功能,解码需要36秒。 接下来我做的是通过-O3作为CFLAG进行积极的优化。 那只剃了2秒钟,所以没有什么可写回家的。 最后一次优化是特定于libmad的。 我链接到上面的config.h文件没有定义libmad应该使用的定点数学模式。 现在,当你看一下libmad的fixed.h时,你可以看到一些固定点数学的选项。 还有一个专门用于臂式处理器的选项,它使用一些漂亮的小臂装配器代码来完成繁重的工作。 您可以通过将-DFPM_ARM作为CFLAG传递来启用此功能。 现在那确实有奇迹! 我现在可以用20秒的时间来解码407秒的mp3编码音频。 这大约是实时的20倍,这对我来说完全没问题。 我选择的歌曲是我在下一个音频游戏项目中必须处理的歌曲长度谱的极端。 用户使用的歌曲将被处理一次,在我的书中等待20秒即可。

最重要的部分来自:

我担心我不会发布移植音频框架的来源,因为它有点混乱,需要一些工作来清理。

许多人在评论中对图书馆大肆抨击并说他们放弃了libmpg123

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM