我简化了我的问题并提供了赏金: 有什么选项可以将原始PCM音频数据压缩到Android设备上的mp3。
我的原帖: 我正在Android手机上创建一个合成器,我一直在生成PCM数据发送到扬声器。现在我想知道我是否可以将这个PCM数据编码为mp3以保存到SD卡。 MediaRecorder对象可以将来自麦克风的音频编码为各种格式,但不允许以编程方式生成音频数据进行编码。
所以我的问题是,是否有用于编码音频的标准Android API?如果没有,那么基于Java或NDK的纯解决方案是什么?你能推荐其中任何一个吗?
如果不这样做,我只需要将生成的音频保存为WAV文件,我可以轻松完成。
答案 0 :(得分:31)
纯Java
看看Tritonus的javasound的洁净室实现,它提供了一个 MP3编码器插件:http://www.tritonus.org/plugins.html
其次,我建议查看jzoom的库JLayer或JLayerME:http://www.javazoom.net/javalayer/javalayer.html(这可能只是解码,不确定)
如果这些不符合您的需求,您可以从2000年开始查看有关向J2SE添加MP3功能的文章(有源代码):http://www.javaworld.com/javaworld/jw-11-2000/jw-1103-mp3.html
原生路线
如果你想要“原生”性能,我会看一下Android的FFmpeg或Lame端口。
Lame:http://lame.sourceforge.net/
答案 1 :(得分:9)
据我所知,你不能只使用SDK中的工具。根据官方开发人员指南,平台中没有MP3编码器(Android Supported Media Formats),因此您必须使用NDK自行移植编码器,然后编写一些包装器代码以通过JNI接收音频样本
我目前正在为我自己的音乐播放器移植Rockbox项目中的一些音频解码器,它可以将音频录制到MP3中,所以也许你应该尝试查看它的来源并找到编码器库。大多数解码器都具有ARM优化功能,可以加快显着的速度,所以我猜有些编码器也有这样的功能。
答案 2 :(得分:1)
Android中没有Mp3编码器。你必须用mp3 lame lib编译libav你可以找到代码来自 http://libavandroid.wordpress.com