在Android上解码已编码的音频数据(如MP3等),而不播放它

12

简短版:如何最好地将MP3(以及最好也包括AAC/Ogg/WMA)中编码的数据转换为Java数组或ByteBuffer,以便进行操作?

我正在编写一个程序,其中减速和加速音频文件是其功能之一。这对于WAV文件来说很好用,因为它们只是一个头以及需要发送到扬声器的确切二进制数据,现在我需要为MP3实现它(最好还支持AAC、Ogg和WMA,但由于这些格式不太流行,不是必需的)。Android没有公开解码MP3而不播放它的接口,所以我需要创建该接口。

有三个选项,但我也可以接受其他选项:

1) 编写自己的解码器。我已经有一个功能性的帧检测器,希望能用于选项(3),现在只需要实现哈夫曼解码表。

2) 使用JLayer或等效的Java库来处理解码。我不完全清楚许可证的影响。

3) 连接到libmedia库/MediaPlayerService。这是SoundPool所做的,并且该服务的使用量使我相信,尽管它正式不稳定,但该实现不会消失。这意味着编写JNI代码以连接到服务,但我发现这是一个深深的兔子洞。在表面上,我遇到了sp<>模板的问题。


你成功解码音频数据了吗?如果是,你是如何做到的? - Swathi EP
2个回答

1

1
这似乎是一个有限的解决方案,因为libmad是根据GPL许可证授权的;这意味着要使用它,我需要将我的应用程序许可证下放到GPL下,这不是我计划做的事情(而且听起来你可能也是同样的情况)。这就是JLayer吸引人的部分:它是LGPL许可证。Android是Apache许可证,所以你真的很清楚。我相当怀疑媒体框架是一个移动目标的一部分:在这一点上,它已经融入了许多更高级别的对象(主要是MediaPlayer和SoundPool),我怀疑它们会被删除。 - David R.

1

2
Android不支持javax.sound。这个库使用它,因此对于Android没有用处。 - Adem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接