Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏

13.9. MediaRecorder 录音例子

		
package cn.netkiller.conference.ai.media;

import android.media.MediaRecorder;
import android.os.Environment;
import android.util.Log;

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

public class AudioRecorder {
    private static final String TAG = AudioRecorder.class.getSimpleName();
    private static AudioRecorder instance;

    private MediaRecorder mediaRecorder;
    private String filePath;

    public AudioRecorder() {

    }

    public static synchronized AudioRecorder getInstance() {
        if (instance == null) {
            instance = new AudioRecorder();
        }
        Log.d(TAG, "AudioRecorder getInstance()");
        return instance;
    }

    public String start() {
        String dir = String.valueOf(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
//        String dir = Environment.getExternalStorageDirectory().getPath();
        String date = new SimpleDateFormat("yyyy-MM-dd.hhmmss").format(new Date());
        filePath = String.format("%s/%s.amr", dir, date);
//        Log.d(TAG, "AudioRecorder " + filePath);
        start(filePath);
        return filePath;
    }

    public void start(String filename) {
        if (mediaRecorder == null) {
            mediaRecorder = new MediaRecorder();
        }
        filePath = filename;
        try {
            mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_WB);
            mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
            mediaRecorder.setAudioEncodingBitRate(128000);
            mediaRecorder.setAudioSamplingRate(16000);
            mediaRecorder.setOutputFile(filePath);
            mediaRecorder.prepare();
            mediaRecorder.start();
            Log.i(TAG, "Start recording " + filePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void stop() {
        if (mediaRecorder != null) {
            mediaRecorder.stop();
            mediaRecorder.release();
            mediaRecorder = null;
        }
        Log.i(TAG, "Stop recording " + filePath);
    }
}