package com.safeluck.floatwindow.util;
|
|
|
import android.media.AudioFormat;
|
import android.media.AudioRecord;
|
import android.media.MediaRecorder;
|
import android.os.Environment;
|
import android.util.Log;
|
|
import java.io.File;
|
import java.io.FileNotFoundException;
|
import java.io.FileOutputStream;
|
import java.io.IOException;
|
|
/**
|
* aaa
|
* Created by lzw on 2019/8/29. 11:19:57
|
* 邮箱:632393724@qq.com
|
* All Rights Saved! Chongqing AnYun Tech co. LTD
|
*/
|
public class AudioRecordManager {
|
|
private static final String TAG = "AudioRecordManager";
|
private static AudioRecordManager instance;
|
|
/***标记是否正在录音**/
|
private boolean isRecording = false;
|
|
private AudioRecord audioRecord;
|
/***最小缓冲区大小*/
|
private int bufferSize = 0;
|
/***采样率*/
|
private int sampleRateInHz = 32000;
|
/***量化位数**/
|
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
|
/***存放音频数据的buffer**/
|
private byte[] buffer;
|
|
private int channelConf = AudioFormat.CHANNEL_IN_STEREO;
|
private OnAudioRecordListener onAudioRecordListener;
|
|
|
private AudioRecordManager() {
|
//计算最小缓冲区
|
bufferSize = AudioRecord.getMinBufferSize(sampleRateInHz, channelConf, audioFormat);
|
// bufferSize = bufferSize > 320 ? 320 : bufferSize;
|
Log.i(TAG,"mini buffersize="+bufferSize);
|
|
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRateInHz, channelConf, audioFormat, bufferSize);
|
}
|
|
|
public static AudioRecordManager getInstance() {
|
if (instance == null) {
|
synchronized (AudioRecordManager.class) {
|
if (instance == null) {
|
instance = new AudioRecordManager();
|
}
|
}
|
}
|
return instance;
|
}
|
|
/***
|
* 开始采集音频
|
*/
|
public void startRecording(final OnAudioRecordListener onAudioRecordListener) {
|
setAudioRecordListener(onAudioRecordListener);
|
if (audioRecord == null){
|
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRateInHz, channelConf, audioFormat, bufferSize);
|
}
|
buffer = new byte[bufferSize];
|
|
isRecording = true;
|
audioRecord.startRecording();
|
try {
|
while (isRecording){
|
int readSize = audioRecord.read(buffer,0,bufferSize);
|
Log.i(TAG, "run: buffer length"+buffer.length+" readSize="+readSize);
|
if (onAudioRecordListener != null){
|
onAudioRecordListener.onVoiceRecord(buffer,bufferSize);
|
}
|
}
|
audioRecord.stop();
|
destroy();
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
|
|
}
|
|
/***
|
* 停止音频采集
|
*/
|
public void stopRecording(){
|
Log.i(TAG, "stopRecording");
|
isRecording = false;
|
setAudioRecordListener(null);
|
}
|
|
public void destroy(){
|
if (audioRecord!=null){
|
audioRecord.release();
|
audioRecord = null;
|
}
|
|
}
|
|
public interface OnAudioRecordListener {
|
/***
|
* 采集到的音频信息回调到上层
|
* @param data
|
* @param size
|
*/
|
void onVoiceRecord(byte[] data,int size);
|
}
|
|
private void setAudioRecordListener(OnAudioRecordListener onAudioRecordListener){
|
this.onAudioRecordListener = onAudioRecordListener;
|
}
|
|
}
|