Android录音功能--MediaRecorder

MediaRecorder

MediaRecorder集成了录音、编码、压缩等功能,所以使用起来相对比较简单。

缺点:支持的格式过少并且无法实时处理音频数据。

开始录音

package com.example.audiotest;

import android.media.MediaRecorder;

import java.io.File;
import java.io.IOException;

public class MyAudioRecord {

    private MediaRecorder mediaRecorder;

    public void start(File saveFile) throws IOException {

        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        //设置输出文件类型3gp
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        //自适应多速率窄带编解码器,唯一的选择。採样率是8kHz,码率在 4.75~12.2kbps之间。不太适合语音之外其他内容
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        //输出的文件
        mediaRecorder.setOutputFile(saveFile.getAbsolutePath());
        mediaRecorder.prepare();
        mediaRecorder.start();//开始录音
    }

    public void stop() {
        if (mediaRecorder != null) {
            mediaRecorder.stop();
            mediaRecorder.release();
            mediaRecorder = null;

        }

    }

}

传入的start的文件为录音文件,需自定义:

package com.example.audiotest;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author rb
 */
public class MainActivity extends Activity {

    private MyAudioRecord myAudioRecord;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void click(View view) {
        int id = view.getId();
        switch (id){
            case R.id.start:
                startAudio();
                break;
            case R.id.stop:
                if (myAudioRecord !=null){
                    myAudioRecord.stop();
                }
                break;
            default:
                break;
        }
    }

    private void startAudio(){
        if (myAudioRecord != null) {
            myAudioRecord.stop();
            myAudioRecord = null;
        }
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy_MM_dd-HH_mm_ss");
        String filePath;
        filePath = "mnt/sdcard/" + dateFormat.format(new Date()) + ".3gp";
        final File saveFile = new File(filePath);
        myAudioRecord = new MyAudioRecord();

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    myAudioRecord.start(saveFile);
//                    Thread.sleep(time * 1000);
                    //如果想定时,在这里传入时间,然后调用myAudioRecord.stop()
//                    myAudioRecord.stop();
                } catch (Exception e) {
                        e.printStackTrace();
                }

            }
        }).start();
    }
}

记得添加权限

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

猜你喜欢

转载自blog.csdn.net/Zaajuan1150/article/details/80267344