如何在 Android 设备上将 WAV 编码为 mp3
Posted
技术标签:
【中文标题】如何在 Android 设备上将 WAV 编码为 mp3【英文标题】:How to encode a WAV to a mp3 on a Android device 【发布时间】:2011-04-08 04:50:00 【问题描述】:我已经简化了我的问题并提供了赏金: 有哪些选项可用于在 android 设备上将原始 PCM 音频数据压缩为 mp3。
我的原帖: 我正在我的 Android 手机上创建一个合成器,并且我一直在生成 PCM 数据以发送到扬声器。现在我想知道是否可以将此 PCM 数据编码为 mp3 以保存到 SD 卡。 MediaRecorder 对象可以将来自麦克风的音频编码为各种格式,但不允许对以编程方式生成的音频数据进行编码。
所以我的问题是,是否有用于编码音频的标准 Android API?如果没有,有哪些纯 Java 或基于 NDK 的解决方案?你能推荐其中任何一个吗?
如果做不到这一点,我只需将生成的音频保存为 WAV 文件,这很容易做到。
【问题讨论】:
“所以我的问题是,有没有用于编码音频的标准 Android API?” - 不。我会用java
标签重新标记您的问题,以帮助您获得意见...
仅供参考:MP3 技术已获得专利,因此将其包含在商业应用程序中会使您面临潜在的诉讼。你最好的防御就是不要让你的产品成功。 :)
是否还有另一种比 mp3 更开放的紧凑且受良好支持的(Android、Mac、Windows)格式?另外,mp3 真的会追随任何人使用这种格式吗?
@VictorGrazi Ogg Vorbis 音频 (.ogg) 实际上是一种比 mp3 更好的格式(文件大小更小,音质更好),但使用较少。
【参考方案1】:
据我所知,仅使用 SDK 中的工具是无法做到这一点的。根据官方开发者指南,平台中没有 MP3 编码器(Android Supported Media Formats),因此您必须使用 NDK 自行移植编码器,然后编写一些包装器代码以通过 JNI 接收音频样本。
我目前正在为我自己的音乐播放器从 Rockbox 项目中移植一些音频解码器,它可以将音频录制到 MP3 中,所以也许你应该尝试查看它的源并找到编码器库。大多数解码器都有 ARM 优化,可以加快速度,所以我猜一些编码器也有这个添加。
【讨论】:
【参考方案2】:纯 Java 查看 Tritonus 的 javasound 洁净室实现,它在此处提供 MP3 编码器 插件:http://www.tritonus.org/plugins.html 其次,我建议查看 jzoom 的库 JLayer 或 JLayerME:http://www.javazoom.net/javalayer/javalayer.html(这可能只是解码,不确定) 如果这些不适合您的需要,您可以查看 2000 年关于将 MP3 功能添加到 J2SE 的这篇文章(带有源代码):http://www.javaworld.com/javaworld/jw-11-2000/jw-1103-mp3.html 原生路线 如果您想要“本机”性能,我会查看适用于 Android 的 FFmpeg 或 Lame 端口。 跛脚:http://lame.sourceforge.net/
【讨论】:
嗨,我正在使用 Android 上的 AudioRecorder 录制音频,结果输出格式为 WAV。输出的大小非常大,例如 1 分钟的记录最多需要 2mb 大小。我可以在使用 tritonus jar 转换为 mp3 时减小大小吗?如何在 android 上实现 tritonus。请帮帮我。【参考方案3】:Mp3 编码器在 android 中不可用。你必须使用 mp3 lame lib 编译 libav,你可以从中找到代码 http://libavandroid.wordpress.com
【讨论】:
以上是关于如何在 Android 设备上将 WAV 编码为 mp3的主要内容,如果未能解决你的问题,请参考以下文章
为 android 设备开发应用程序以从 WAV 文件中获取频率值
如何在 Android 中播放附加到(IP 语音)语音邮件文件的 .wav 文件? [复制]
如何以编程方式在 Android 中将 .mid 转换为 .wav 文件?