使用MediaRecorder录制音频步骤:
创建MediaRecorder对象
调用MediaRecorder的setAudioSource()方法设置声音来源。一般传入MediaRecorder.AudioSource.MIC參数指定录制来自麦克风的声音
调用MediaRecorder对象的setOutputFormat()设置所录制的音频 文件的格式
调用MediaRecorder对象的setAudioEncoder() ,setAudioEncodingBitRate(int bitRate),setAudioSamplingRate(int samplingRate)设置所录制的声音的编码格式。编码位率,採
样率等。这些參数将能够控制所录制的声音的品质,文件的大小 ,一般来说品质越好,声音文件越大
调用MediaRecorder的setOutputFile(String path)方法设置 录制的音频文件的保存位置
调用MediaRecorder的prepare()方法准备录制
调用MediaRecorder对象的start()方法開始录制
录制完毕,调用MediaRecorder对象的stop()方法停止录制。并调用release()方法释放资源
例如以下:
MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(PATH_NAME); recorder.prepare(); recorder.start(); // Recording is now started ... recorder.stop(); recorder.reset(); // You can reuse the object by going back to setAudioSource() step recorder.release(); // Now the object cannot be reused
样例程序:
Activity:
import java.io.File; import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageButton; import android.widget.Toast; public class RecordSound extends Activity implements OnClickListener { // 定义界面上的两个button ImageButton record, stop; // 系统的音频文件 File soundFile; MediaRecorder mRecorder; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取程序界面中的两个button record = (ImageButton) findViewById(R.id.record); stop = (ImageButton) findViewById(R.id.stop); // 为两个button的单击事件绑定监听器 record.setOnClickListener(this); stop.setOnClickListener(this); } @Override public void onDestroy() { if (soundFile != null && soundFile.exists()) { // 停止录音 mRecorder.stop(); // 释放资源 mRecorder.release(); mRecorder = null; } super.onDestroy(); } @Override public void onClick(View source) { switch (source.getId()) { // 单击录音button case R.id.record: if (!Environment.getExternalStorageState().equals( android.os.Environment.MEDIA_MOUNTED)) { Toast.makeText(RecordSound.this, "SD卡不存在,请插入SD卡!", Toast.LENGTH_SHORT).show(); return; } try { // 创建保存录音的音频文件 soundFile = new File(Environment .getExternalStorageDirectory().getCanonicalFile() + "/sound.amr"); mRecorder = new MediaRecorder(); // 设置录音的声音来源 mRecorder.setAudioSource(MediaRecorder .AudioSource.MIC); // 设置录制的声音的输出格式(必须在设置声音编码格式之前设置) mRecorder.setOutputFormat(MediaRecorder .OutputFormat.THREE_GPP); // 设置声音编码的格式 mRecorder.setAudioEncoder(MediaRecorder .AudioEncoder.AMR_NB); mRecorder.setOutputFile(soundFile.getAbsolutePath()); mRecorder.prepare(); // 開始录音 mRecorder.start(); //① } catch (Exception e) { e.printStackTrace(); } break; // 单击停止button case R.id.stop: if (soundFile != null && soundFile.exists()) { // 停止录音 mRecorder.stop(); //② // 释放资源 mRecorder.release(); //③ mRecorder = null; } break; } } }
<!-- 授予该程序录制声音的权限 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 授予该程序向外部存储器写入数据的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />