【问题标题】:Slow MP3 decoding on AndroidAndroid 上的 MP3 解码速度慢
【发布时间】:2023-03-07 00:36:01
【问题描述】:

我一直在基于 tutorial 在 Android 中进行 MP3 解码

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

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

【问题讨论】:

  • 我是 android 新手,我正在我的 android 应用程序中连接 mp3 文件。你能帮助我如何解码两个或多个 mp3 文件并编码成一个文件。我搜索了很多,但没有发现任何有用的东西。你说你在android中做过mp3编解码。你能分享代码sn-p吗?这将是一个很大的帮助。谢谢

标签: android mp3 signal-processing decoding


【解决方案1】:

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

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

我用工具的歌曲“Schism”进行了测试,时长为 6:47 分钟 歌曲,以 192kbps 编码。文件重量为 9.31mb,相当大 对于 mp3 imo... 没有任何优化(拇指代码,-O0, -DFPM_DEFAULT == libmad 中的标准定点数学,没有 arm 汇编器优化的 fp 数学)解码完整文件需要 184 秒 里程碑。

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

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

LOCAL_ARM_MODE := arm

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

最重要的部分来了:

恐怕我不会发布移植音频框架的源代码 这有点乱,需要一些工作来清理。

还有很多cmets里的人吐槽图书馆说他们放弃了,转而支持libmpg123

【讨论】:

  • 我实际上遵循了他所做的一切,没有任何改变。我关注了所有内容,因为网上没有其他参考资料,所以本教程是我唯一的来源。我什至使用比他更快的 Android,所以从技术上讲,我的机器上的解码应该更快。
  • 补充说明,他的情况和我的略有不同。他的案例似乎是独立的音频应用程序,而我的案例是应用程序中的子应用程序。我不确定这是否会影响我的处理速度。
  • 也许您可以尝试增加缓冲区大小并检查它是否有所作为。
猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
相关资源
最近更新 更多