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

在Android上解码编码音频数据(MP3等),而不播放,android,audio,mp3,decoding,Android,Audio,Mp3,Decoding,简短版本:什么是将数据编码到MP3中的最佳方式(理想情况下是在MP3中) AAC/Ogg/WMA)转换为Java数组或ByteBuffer,然后我可以 操纵 我正在制定一个程序,它有慢有快 声音文件作为其功能之一。这适用于WAV文件, 哪一个是头加上需要发送到的确切二进制数据 扬声器,现在我需要为MP3实现它(理想情况下,这个 也将支持AAC、Ogg和WMA,但由于它们不太受欢迎 格式(这不是必需的)。Android不公开接口 解码MP3而不播放它,所以我需要创建它 接口 虽然我对其他人持开放态

简短版本:什么是将数据编码到MP3中的最佳方式(理想情况下是在MP3中) AAC/Ogg/WMA)转换为Java数组或ByteBuffer,然后我可以 操纵

我正在制定一个程序,它有慢有快 声音文件作为其功能之一。这适用于WAV文件, 哪一个是头加上需要发送到的确切二进制数据 扬声器,现在我需要为MP3实现它(理想情况下,这个 也将支持AAC、Ogg和WMA,但由于它们不太受欢迎 格式(这不是必需的)。Android不公开接口 解码MP3而不播放它,所以我需要创建它 接口

虽然我对其他人持开放态度,但有三种选择:

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

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

3) 连接到libmedia库/MediaPlayerService。这是什么 SoundPool确实如此,而且这项服务的使用量让我相信 虽然官方称其不稳定,但该实现不会继续 在任何地方这意味着要编写JNI代码来连接到服务,但是 我发现那是一个很深的兔子洞。在表面上,我是
sp模板有问题。

我用libmad和NDK解决了这个问题。JLayer是一种缓慢的方式,而媒体框架是一个移动的目标。您可以在

上找到信息和源代码,我没有尝试过,但它是LGPL。

这似乎是一个有限的解决方案,因为libmad是根据GPL授权的;这意味着要使用它,我需要在GPL下授权我的应用程序,这不是我计划要做的事情(听起来你可能也在同一条船上)。这是JLlayer吸引人的部分原因:它是LGPL许可的。Android是Apache授权的,所以你真的很清楚。我有很大一部分人怀疑媒体框架是否是一个移动的目标:在这一点上,它深深扎根于如此多的高级对象(主要是MediaPlayer和SoundPool)中,我怀疑它们是否会被删除。您成功解码音频数据了吗?如果是,你是怎么做到的?android不支持javax.sound。这个库使用它,所以它对android没有用处