Android - 实现录音变声播放

变声功能大家都接触过,比如qq中发送一段变声消息,网络视频中演员经过处理的声音。其实这个功能实现起来并不复杂,因为声音处理的算法有大神已经帮我们写好,拿来用就行。

地址:smbPitchShift.cpp

代码是用c写的,我们来稍微处理一下

一、生成so库文件

1.首先我们使用Android Studio生成一个新项目,勾选Include C++ support

Android - 实现录音变声播放_第1张图片

2.将smbPitchShift.cpp放在app/src/main/cpp目录下

Android - 实现录音变声播放_第2张图片

3..新建VoiceProcessor类,编写native方法,生成JNI函数

Android - 实现录音变声播放_第3张图片

4.将JNI函数拷贝至smbPitchShift.cpp中

Android - 实现录音变声播放_第4张图片

5.调用smbPitchShift函数处理声音数据

Android - 实现录音变声播放_第5张图片

6.修改CMakeLists.txt构建脚本文件

Android - 实现录音变声播放_第6张图片

7.删除MainActivity中多余代码,运行项目得到so库文件

Android - 实现录音变声播放_第7张图片
Android - 实现录音变声播放_第8张图片

二、在项目调用so库中处理声音函数

1.声音录制和播放

由于播放时需要对声音进行处理,所以声音的录制和播放我们用AudioRecord和AudioTrack来做,具体如何实现文章最后我会放出demo地址

2.将so库文件拷贝至src/main/jniLibs目录下

Android - 实现录音变声播放_第9张图片

3.新建VoiceProcessor类,路径和生成so文件时一致

Android - 实现录音变声播放_第10张图片

4.加载库,编写调用方法

Android - 实现录音变声播放_第11张图片

5.OK,最后在需要对声音进行处理的地方进行调用


三、效果

pitchShift值在0-2之间,改变pitchShift值声音发生改变,达到qq录音变声中萝莉,搞怪,惊悚等效果,pitchShift值为1时声音不变。

Android - 实现录音变声播放_第12张图片
Android - 实现录音变声播放_第13张图片



Github:MyVoice

你可能感兴趣的:(Android - 实现录音变声播放)