简短版本:将 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<> 模板时遇到了问题。