MediaRecorder進行手機錄音

MediaRecorder進行手機錄音



以下介紹一項簡單的錄音程式,參考資料在此



程式碼:
public class MediaRecorderEx extends Activity {

private Button btnStart,btnStop,btnPlay;
private MediaRecorder mr;
private String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media_recorder_ex);
btnStart=(Button) findViewById(R.id.btnStart);
btnStop=(Button) findViewById(R.id.btnStop);
btnPlay=(Button) findViewById(R.id.btnPlay);
btnStart.setOnClickListener(btnClick);
btnStop.setOnClickListener(btnClick);
btnPlay.setOnClickListener(btnClick);
new DateFormat();
//path=Environment.getExternalStorageDirectory().toString()+
// "test.3gp";
path="/sdcard/" + "YY" + DateFormat.format("yyyyMMdd_hhmmss",
Calendar.getInstance(Locale.CHINA)) + ".amr";
Log.d("test", "set OK");
}

private OnClickListener btnClick=new OnClickListener(){

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v==btnStart){
try {
mediaRecorderPrepare();
mr.prepare();
mr.start();
Toast.makeText(getApplicationContext(),
"Recording...",
Toast.LENGTH_LONG)
.show();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
else if(v==btnStop){
if(mr!=null){
mr.stop();
mr.release();
mr = null;
}
}
else if(v==btnPlay){
File file=new File(path);
Intent intent = new Intent( Intent.ACTION_VIEW );
intent.setDataAndType( Uri.fromFile(file), "audio/*" );
startActivity(intent);
}
}

};

@SuppressLint("SdCardPath")
void mediaRecorderPrepare(){
/**
* mediaRecorder.setAudioSource设置声音来源。
* MediaRecorder.AudioSource这个内部类详细的介绍了声音来源。
* 该类中有许多音频来源,不过最主要使用的还是手机上的麦克风,MediaRecorder.AudioSource.MIC
*/
mr=new MediaRecorder();
mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
/**
* mediaRecorder.setOutputFormat代表输出文件的格式。该语句必须在setAudioSource之后,在prepare之前。
* OutputFormat内部类,定义了音频输出的格式,主要包含MPEG_4、THREE_GPP、RAW_AMR……等。
*/
mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
/**
* mediaRecorder.setAddioEncoder()方法可以设置音频的编码
* AudioEncoder内部类详细定义了两种编码:AudioEncoder.DEFAULT、AudioEncoder.AMR_NB
*/
mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
/**
* 设置录音之后,保存音频文件的位置
*/
mr.setOutputFile(path);

}
}

加入權限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>




留言