我目前正在开发一个允许用户选择 MP3 音频文件的应用程序。该文件然后由我的应用程序处理。
对于此处理,应用程序需要解码音频文件以获取原始 PCM 输出。
要解码 MP3,我有两个选择:
- 使用Android系统解码MP3,获取PCM数据。
- 自己在手机上解码 MP3,无需支付 MP3 许可费。
我的问题是#1在技术上是否可行?对于#2,手机上的 MP3 许可证是否也涵盖应用程序?
据我所知,没有 Android 提供的解码 MP3 的方法。
我过去使用过JLayer,可以推荐它用于 MP3 处理。将 NDK 与 c++ 库一起使用可能会更快,但如果您希望将其保留为 Java,那就是我会使用的。它仍然比实时更快,大约 30 秒以平均比特率 3 分钟的 MP3 解码所有帧。这是 Galaxy S(1GHz) 的情况,因此任何较新的手机都更快。
就许可而言,我无法帮助你。JLayer 本身是 LGPL,但 MP3 许可的世界比用过的机油更模糊。经过几天寻找具体答案后,我放弃并做到了。整个世界似乎对谁首先持有许可证存在分歧。
Android系统现在可以解码mp3文件了,看这里介绍了Android平台提供的媒体编解码器、容器和网络协议支持。
MedieCodec 是一个非常强大的框架,用于对媒体文件进行编码和解码。
选项 1 绝对不可能(除非您想针对 ICS+ 设备并愿意编写本机 C 代码来使用 OpenSL 解码 MP3)。jLayer 的 Geobits 推荐是一个不错的选择。在大多数情况下,处理 jLayer 是轻而易举的事。这是一篇很好的博客文章,将有所帮助: http: //mindtherobot.com/blog/624/android-audio-play-an-mp3-file-on-an-audiotrack/