MediaRecorder录制音频

Android音视频架构与学习路线

MediaRecorder是Android提供的简单的录制音视频的API,它只能以文件的形式输出。这里我们要讲的是它的录音功能。

比较简单,开始录制前需要配置几个参数

private void initRecorder() {
        try {
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置源
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); // 设置编码格式
            mRecorder.setOutputFile(mRecordFile.getAbsolutePath());
            mRecorder.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

MediaRecorder不支持暂停,而且需要注意的点是每次录制完后需要重新调用该方法进行配置,不然会报错

下面看全部代码

package com.codeforfree.cffaudiorecorddemo;

import androidx.appcompat.app.AppCompatActivity;

import android.media.MediaRecorder;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

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

public class MediaRecordActivity extends AppCompatActivity {

    private MediaRecorder mRecorder;
    private File mRecordFile;
    private RecordStatus mRecordStatus;
    private Button mRecordBtn;
    private TextView mResultText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_media_record);
        mRecordBtn = findViewById(R.id.record_btn);
        mResultText = findViewById(R.id.result_text);
        mRecordFile = new File(getExternalFilesDir(""), "demo.aac");
        mRecordStatus = RecordStatus.IDLE;
        mRecordBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onButtonClick();
            }
        });

    }

    /**
     * 每次录完必须重新调调用此方法,不然会报错
     **/
    private void initRecorder() {
        try {
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置源
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); // 设置编码格式
            mRecorder.setOutputFile(mRecordFile.getAbsolutePath());
            mRecorder.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void onButtonClick() {
        if (mRecordStatus == RecordStatus.IDLE) {
            startRecord();
            mRecordBtn.setText("结束录制");
            mResultText.setText("录制中...");

        } else if (mRecordStatus == RecordStatus.RECORDING) {
            stopRecord();
            mRecordBtn.setText("开始录制");
            mResultText.setText("文件存储在" + mRecordFile.getAbsolutePath());
        }
    }


    private void startRecord() {
        initRecorder();
        mRecordStatus = RecordStatus.RECORDING;
        mRecorder.start();
    }

    private void stopRecord() {
        if (mRecorder != null && mRecordStatus == RecordStatus.RECORDING) {
            mRecordStatus = RecordStatus.IDLE;
            mRecorder.stop();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mRecorder != null) {
            mRecorder.release();
        }
    }

    enum RecordStatus {
        IDLE,
        RECORDING
    }

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值