简短版:如何最好地将MP3(以及最好也包括AAC/Ogg/WMA)中编码的数据转换为Java数组或ByteBuffer,以便进行操作?
我正在编写一个程序,其中减速和加速音频文件是其功能之一。这对于WAV文件来说很好用,因为它们只是一个头以及需要发送到扬声器的确切二进制数据,现在我需要为MP3实现它(最好还支持AAC、Ogg和WMA,但由于这些格式不太流行,不是必需的)。Android没有公开解码MP3而不播放它的接口,所以我需要创建该接口。
有三个选项,但我也可以接受其他选项:
1) 编写自己的解码器。我已经有一个功能性的帧检测器,希望能用于选项(3),现在只需要实现哈夫曼解码表。
2) 使用JLayer或等效的Java库来处理解码。我不完全清楚许可证的影响。
3) 连接到libmedia库/MediaPlayerService。这是SoundPool所做的,并且该服务的使用量使我相信,尽管它正式不稳定,但该实现不会消失。这意味着编写JNI代码以连接到服务,但我发现这是一个深深的兔子洞。在表面上,我遇到了sp<>模板的问题。