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