12

简短版本:将 MP3(最好是 AAC/Ogg/WMA)中编码的数据转换为我可以操作的 Java 数组或 ByteBuffer 的最佳方法是什么?

我正在整理一个程序,该程序具有减慢和加速声音文件的功能之一。这适用于 WAV 文件,它是一个标题加上需要发送到扬声器的确切二进制数据,现在我需要为 MP3 实现它(理想情况下,这也将支持 AAC、Ogg 和 WMA,但是因为这些是不太流行的格式,这不是必需的)。Android 不会公开一个接口来解码 MP3 而不播放它,所以我需要创建那个接口。

尽管我对其他人持开放态度,但会出现三个选项:

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

2) 使用 JLayer 或等效的 Java 库来处理解码。我不完全清楚这里的许可证后果是什么。

3) 连接到 libmedia 库/MediaPlayerService。这就是 SoundPool 所做的事情,该服务的使用量让我相信,虽然它在官方上不稳定,但该实现不会有任何进展。这意味着编写 JNI 代码来连接到服务,但我发现这是一个很深的兔子洞。从表面上看,我在使用 sp<> 模板时遇到了问题。

4

2 回答 2

1

我用 libmad 和 NDK 做到了这一点。JLayer 是一种缓慢的方式,而媒体框架是一个移动的目标。您可以在http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=231找到信息和源代码

于 2010-02-28T00:54:09.457 回答
1

我没有尝试过,但mp3transform是 LGPL。

于 2012-09-19T11:47:26.270 回答