package org.zywx.wbpalmstar.plugin.uexaudio; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import android.media.MediaRecorder; public class AudioRecorder { public static final String TAG = "AudioRecorder"; private static final int STATE_IDLE = 0; private static final int STATE_STARTED = 1; private MediaRecorder mediaRecorder; private int currentState = STATE_IDLE; private String recordFile; AudioRecorder2Mp3Util util = null; int backRecordType=0;//得到的录音文件类型,2-为MP3格式,其他为amr格式 /** * 开始后台录音 * * @param folder * 指定录音的文件夹 * @return 录音是否成功启动 */ public boolean startRecord(File folder,int type) { boolean isSuc = false; if (currentState == STATE_IDLE) { try { backRecordType=type; currentState = STATE_STARTED; File file = new File(folder, formatDateToFileName(System.currentTimeMillis()));//文件路径 if (type != 2) { startMediaRecord(file); } else { startAudioRecord(file); } isSuc = true; } catch (Exception e) { currentState = STATE_IDLE; e.printStackTrace(); } } return isSuc; } /** * 开始media录音 * @param file * @throws IOException */ private void startMediaRecord(File file) throws IOException { mediaRecorder = new MediaRecorder(); mediaRecorder.reset(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mediaRecorder.setOutputFile(file.getAbsolutePath()); mediaRecorder.prepare(); mediaRecorder.start(); recordFile = file.getAbsolutePath(); } /** * 开始audio录音 * @param file */ private void startAudioRecord(File file) { if (util == null) { util = new AudioRecorder2Mp3Util(null, file.getAbsolutePath(), file.getAbsolutePath().replaceAll(".raw", ".mp3")); } util.cleanFile(AudioRecorder2Mp3Util.MP3 | AudioRecorder2Mp3Util.RAW);//清除MP3和raw文件 util.startRecording();//开始录音 recordFile = util.getFilePath(0X00000002); } private String formatDateToFileName(long milliSeconds) { final SimpleDateFormat sdf = new SimpleDateFormat("HH-mm-ss"); return sdf.format(new Date(milliSeconds)) + (backRecordType==2?".raw":".amr"); } public void stopRecord() { if (currentState == STATE_STARTED) { currentState = STATE_IDLE; try { if (backRecordType != 2) { stopMediaRecord(); } else { stopAudioRecord(); } } catch (Exception e) { e.printStackTrace(); } } } /** * 停止media录音停止 */ private void stopMediaRecord() { mediaRecorder.stop(); mediaRecorder.release(); mediaRecorder = null; } /** * 停止audio录音停止 */ private void stopAudioRecord() { util.stopRecordingAndConvertFile();// 停止录音 util.cleanFile(AudioRecorder2Mp3Util.RAW);// 清除中间录音raw文件,保留MP3文件 // 如果要关闭可以 util.close(); util = null; } public String getRecordFile() { return recordFile; } }