Android MediaRecorder 录音器
Android 提供了 MediaRecorder 可以用来录音
使用 MediaRecorder 的一般流程
-
首先实例化一个
MediaRecorder
对象MediaRecorder mr = new MediaRecorder();
-
然后调用相关方法设置一些参数
// 设置音频输入源 mr.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置输出格式 mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB); // 设置编码格式 mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB); // 设置录音保存地址 mr.setOutputFile(soundFile.getAbsolutePath());
-
调用
mr.prepare()
进入开始录音 -
调用
mr_start()
开始录音这个方法可能会抛出异常
IOException
,因为可能写入文件失败 -
录音完毕后可以调用
mr.stop()
停止录音 -
调用
mr.release()
释放资源
范例
我们将用一简单的范例来讲解 MediaRecorder
,包括开始和停止录音,保存录音文件等
-
创建一个 空的 Android 项目
cn.twle.android.MediaRecord
-
修改
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/btn_control" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始录音" /> <Button android:id="@+id/btn_play" android:layout_width="wrap_content" android:layout_height="wrap_content" android:enabled="false" android:text="播放" /> </LinearLayout>
-
修改
AndroidManifest.xml
添加录音器需要的访问权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/>
-
修改
MainActivity.java
package cn.twle.android.mediarecord; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.net.Uri; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import java.io.File; import java.io.IOException; public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btn_control, btn_play; private File soundFile; private boolean isStart = false; private MediaRecorder mr = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_control = (Button) findViewById(R.id.btn_control); btn_play = (Button) findViewById(R.id.btn_play); btn_play.setOnClickListener(this); btn_control.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_control: if (!isStart) { startRecord(); btn_control.setText("停止录制"); btn_play.setEnabled(false); isStart = true; } else { stopRecord(); btn_control.setText("开始录制"); btn_play.setEnabled(true); isStart = false; } break; case R.id.btn_play: MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mediaPlayer.setDataSource(soundFile.toString()); mediaPlayer.prepare(); mediaPlayer.start(); } catch ( Exception e ) {} } } //开始录制 private void startRecord(){ if(mr == null){ File dir = new File(Environment.getExternalStorageDirectory(),"sounds"); if(!dir.exists()){ dir.mkdirs(); } soundFile = new File(dir,System.currentTimeMillis()+".amr"); if(!soundFile.exists()){ try { soundFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } mr = new MediaRecorder(); mr.setAudioSource(MediaRecorder.AudioSource.MIC); //音频输入源 mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB); //设置输出格式 mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB); //设置编码格式 mr.setOutputFile(soundFile.getAbsolutePath()); try { mr.prepare(); mr.start(); //开始录制 } catch (IOException e) { e.printStackTrace(); } } } //停止录制,资源释放 private void stopRecord(){ if(mr != null){ mr.stop(); mr.release(); mr = null; } } }