ZlwAudioRecorder
功能
- 使用AudioRecord进行录音
- 实现pcm、wav、mp3音频的录制
- 实时获取录音的音量、及录音byte数据
- 获取wav/mp3录音文件的时长
- 可配置录音的采样率、位宽 (v1.04更新)
- 录音可视化 (v1.05更新)
Gradle
dependencies {
implementation 'com.github.zhaolewei:ZlwAudioRecorder:v1.07'
}
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
如何使用
- 初始化
-
init
/** * 参数1: Application 实例 * 参数2: 是否打印日志 */ RecordManager.getInstance().init(MyApp.getInstance(), false);
-
在清单文件中注册Services
<service android:name="com.zlw.main.recorderlib.recorder.RecordService" />
-
确保有录音权限
录音需要使用到AudioRecord类,这里说一下他的构造方法中的参数的意义
public AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes);
构造器参数很多,我们一点一点来看:
- audioSource : 声源,一般使用MediaRecorder.AudioSource.MIC表示来自于麦克风
- sampleRateInHz :官方明确说到只有44100Hz是所有设备都支持的。其他22050、16000和11025只能在某些设备上使用。
- channelConfig : 有立体声(CHANNEL_IN_STEREO)和单声道(CHANNEL_IN_MONO)两种。但只有单声道(CHANNEL_IN_MONO)是所有设备都支持的。
- audioFormat : 有ENCODING_PCM_16BIT和ENCODING_PCM_8BIT两种音频编码格式。同样的,官方声明只有ENCODING_PCM_16BIT是所有设备都支持的。
- bufferSizeInBytes : 录音期间声音数据的写入缓冲区大小(单位是字节)。
这里参数audioSource 、sampleRateInHz 、channelConfig 、audioFormat 都是可以根据需要进行选择,只有bufferSizeInBytes 这个参数,需要通过计算来获得。在介绍计算方法之前,先看一下音频数据的读取与转换。
- 配置录音参数
-
修改录音格式(默认:WAV)mp3
RecordManager.getInstance().changeFormat(RecordConfig.RecordFormat.MP3);
-
修改录音配置
RecordManager.getInstance().changeRecordConfig(recordManager.getRecordConfig().setSampleRate(16000)); RecordManager.getInstance().changeRecordConfig(recordManager.getRecordConfig().setEncodingConfig(AudioFormat.ENCODING_PCM_8BIT));
-
修改录音文件存放位置(默认sdcard/Record)
RecordManager.getInstance().changeRecordDir(recordDir);
-
录音状态监听
RecordManager.getInstance().setRecordStateListener(new RecordStateListener() { @Override public void onStateChange(RecordHelper.RecordState state) { } } @Override public void onError(String error) { } });
-
录音结果监听
RecordManager.getInstance().setRecordResultListener(new RecordResultListener() { @Override public void onResult(File result) { } });
-
声音大小监听
RecordManager.getInstance().setRecordSoundSizeListener(new RecordSoundSizeListener() { @Override public void onSoundSize(int soundSize) { } });
-
音频数据监听
recordManager.setRecordDataListener(new RecordDataListener() { @Override public void onData(byte[] data) { } });
-
音频可视化数据监听
recordManager.setRecordFftDataListener(new RecordFftDataListener() { @Override public void onFftData(byte[] data) { audioView.setWaveData(data); } }); 录音控制
- 开始录音/暂停录音/恢复录音/停止
RecordManager.getInstance().start()/pasue()/resume()/stop();
最讨厌的源码为你们奉上:https://github.com/zhaolewei/ZlwAudioRecorder