如何在Android设备上将WAV编码为MP3

42

我已经简化了我的问题并提供了悬赏:

在Android设备上,有哪些选项可用于将原始PCM音频数据压缩为mp3格式。

我的原始帖子:

我正在我的Android手机上创建一个合成器,并生成PCM数据发送到扬声器。现在我想知道是否可以将这些PCM数据编码为mp3格式并保存到SD卡中。 MediaRecorder对象可以将来自麦克风的音频编码为各种格式,但不允许从以编程方式生成的音频数据进行编码。

所以我的问题是,是否有标准的Android API用于编码音频?如果没有,有哪些纯Java或NDK基于的解决方案?你能推荐一些吗?

如果失败的话,我只能将生成的音频保存为WAV文件,这很容易做到。


所以我的问题是,是否有用于编码音频的标准Android API?-- 没有。我会重新为您的问题打上“java”标签,以帮助您获得输入... - CommonsWare
6
FYI:MP3 技术受到专利保护,因此在商业应用程序中使用它可能会使您面临潜在的诉讼风险。您最好的防御措施是不要让您的产品获得成功。 :) - MusiGenesis
5
有没有比mp3更开放且受到良好支持(Android、Mac、Windows)的其他紧凑格式?此外,使用mp3格式是否会受到任何追究? - Victor Grazi
@VictorGrazi Ogg Vorbis音频(.ogg)实际上比mp3更好的格式(在相同大小下具有更高的音质),但使用较少。 - user1318194
3个回答

32

纯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
嗨,我正在使用Android上的AudioRecorder记录音频,结果输出格式为WAV。输出文件非常大,例如1分钟记录需要多达2MB的大小。我可以在使用Tritonus jars转换为mp3时减小文件大小吗?如何在Android上实现Tritonus,请帮助我。 - M.A.Murali

10
据我所知,仅使用SDK中的工具无法实现此操作。根据官方开发者指南,平台上没有MP3编码器(Android支持的媒体格式),因此您需要使用NDK自行移植编码器,然后编写一些包装代码通过JNI接收音频样本。
我目前正在为自己的音乐播放器移植Rockbox项目中的一些音频解码器,并且它可以将音频录制为MP3,因此也许您应该尝试查找其源代码并找到编码器库。大多数解码器都具有ARM优化,这可以显着加快速度,因此我认为某些编码器也具有此功能。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接