为了保证录制时只有一个录音机,采取单例模式。
public class AudioManager {
private MediaRecorder mediaRecorder;
private String mDir;
private String mCurrentFilePath;
private boolean isPrepare = false;
private static AudioManager mAudioManager;
public interface OnMediaRecorderPrepared{void prepared();}
private OnMediaRecorderPrepared onMediaRecorderPrepared;
private AudioManager(String dir){
this.mDir = dir;
};
public void setOnMediaRecorderPrepared(OnMediaRecorderPrepared onMediaRecorderPrepared){
this.onMediaRecorderPrepared = onMediaRecorderPrepared;
}
public static AudioManager getInstance(String dir){
if(mAudioManager == null){
synchronized (AudioManager.class){
if(mAudioManager == null){
mAudioManager = new AudioManager(dir);
}
}
}
return mAudioManager;
}
public void prepare(){
isPrepare = false;
File dir = new File(mDir);
if(!dir.exists()){
dir.mkdir();
}
String fileName = generateFile();
File file = new File(dir,fileName);
mCurrentFilePath = file.getAbsolutePath();
mediaRecorder = new MediaRecorder();
<span style="white-space:pre"> </span>//设置输出路径
mediaRecorder.setOutputFile(mCurrentFilePath);
//设置声音来源 这个设置一定要在setOutputFormat()前调用,否则运行会报错
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
<span style="white-space:pre"> </span>//设置输出格式
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
<span style="white-space:pre"> </span>//设置音频编码
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mediaRecorder.prepare();
mediaRecorder.start();
isPrepare = true;
if(onMediaRecorderPrepared != null)
onMediaRecorderPrepared.prepared();
} catch (IOException e) {
e.printStackTrace();
}
}
public void release(){
if(isPrepare){
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
}
}
public void cancle(){
release();
if(mCurrentFilePath != null){
File file = new File(mCurrentFilePath);
if(file.exists()){
file.delete();
}
mCurrentFilePath = null;
}
}
public String getCurrentFilePath(){
return mCurrentFilePath;
}
private String generateFile() {
return UUID.randomUUID().toString() + ".amr";
}
}