音频变声实质上是通过调整 PCM 数据的音调、节拍等属性,实现听感上的变化。如果是 mp3、aac 等压缩音频,则需提前解码成 PCM 数据,Android 端可以通过 MediaExtractor 及 MediaCodec 解码得到 PCM,但调整音调、节拍仅靠 Android api 就无能为力了,只能集成第三方库来实现,常见的音频处理库有 Fmod 、 SoundTouch 。
Fmod
Fmod 是一个跨平台的音频处理引擎,官网提供了各个平台的 接入文档,可以实现变调、变速变声效果以及混响、颤音等高级效果。开发调用简单,sdk 对外提供了播放器接口,传入音频文件即可直接变声播放。但不支持保存处理后的音频到文件,商业用途需要购买许可证。
如果你不需要保存处理后的音频到文件,那就使用 Fmod 吧,你会发现音频变声是如此简单,而且还支持混响、颤音等高级变声效果!
如果需要保存处理后的音频到文件,那么…我就请你再认真的思考一下,你的需求真的必须要保存处理后的音频吗?假设一个聊天 app 要实现语音消息变声,那这段语音只会在你的应用中播放,那就都可以通过 Fmod 播放器变声播放啊,要知道 Fmod 可是一个跨平台的音频引擎,不论是 Android、IOS 还是 Web 端,只要知道变声参数就可以变声播放了,不需要保存处理后的音频到文件。