Android MediaRecorder 录音器

Android 提供了 MediaRecorder 可以用来录音

使用 MediaRecorder 的一般流程

  1. 首先实例化一个 MediaRecorder 对象

    MediaRecorder mr = new MediaRecorder();
    
  2. 然后调用相关方法设置一些参数

    // 设置音频输入源
    mr.setAudioSource(MediaRecorder.AudioSource.MIC);
    
    // 设置输出格式
    mr.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);
    
    // 设置编码格式
    mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
    
    // 设置录音保存地址
    mr.setOutputFile(soundFile.getAbsolutePath());
    
  3. 调用 mr.prepare() 进入开始录音

  4. 调用 mr_start() 开始录音

    这个方法可能会抛出异常 IOException,因为可能写入文件失败

  5. 录音完毕后可以调用 mr.stop() 停止录音

  6. 调用 mr.release() 释放资源

范例

我们将用一简单的范例来讲解 MediaRecorder,包括开始和停止录音,保存录音文件等


  1. 创建一个 空的 Android 项目 cn.twle.android.MediaRecord

  2. 修改 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>
    
  3. 修改 AndroidManifest.xml 添加录音器需要的访问权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    
  4. 修改 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;
            }
        }
    }
    

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.