Android 使用MediaRecorder录音

首先要获取录音权限,读写磁盘权限

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

工具类

package com.zhangyu.myopengl.utils;

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

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

public class MediaRecorderUtil {

    private static final String TAG = "MediaRecorderUtil";

    private String path;
    private MediaRecorder recorder;

    private Type type = Type.AAC_AAC;

    /**
     * 枚举了两种常用的类型
     */
    public enum Type {
        AAC_M4A(".m4a", MediaRecorder.AudioEncoder.AAC, MediaRecorder.OutputFormat.MPEG_4),
        AAC_AAC(".aac", MediaRecorder.AudioEncoder.AAC, MediaRecorder.OutputFormat.AAC_ADTS),
        AMR_AMR(".amr", MediaRecorder.AudioEncoder.AMR_NB, MediaRecorder.OutputFormat.AMR_NB);
        String ext;
        int audioEncoder;
        int outputFormat;
        Type(String ext, int audioEncoder, int outputFormat) {
            this.ext = ext;
            this.audioEncoder = audioEncoder;
            this.outputFormat = outputFormat;
        }
    }

    /**
     * 初始化
     * @param context
     */
    public MediaRecorderUtil(Context context) {
        String fileName = "recorder_" + System.currentTimeMillis() + type.ext;
        Log.e(TAG, "MediaRecorderUtil: fileName=" + fileName);
//        String fileDir = context.getFilesDir() + "/record";
        String fileDir = Environment.getExternalStorageDirectory() + "/1";
        File file = new File(fileDir);
        //判断文件夹是否存在,如果不存在则创建文件夹
        if (!file.exists()) {
            file.mkdirs();
        }
        file = new File(fileDir, fileName);
        path = file.getAbsolutePath();
    }

    /**
     * 开始录制
     */
    public void start() {
        try {
            recorder = new MediaRecorder();
            recorder.setOutputFile(path);
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setOutputFormat(type.outputFormat);
            recorder.setAudioEncoder(type.audioEncoder);
            recorder.prepare();
            recorder.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 停止录制
     */
    public void stop() {
        if (recorder != null) {
            recorder.stop();
            recorder.release();
            recorder = null;
        }
    }

    /**
     * 获取音频的振幅
     * @return
     */
    public float getVoiceLevel() {
        float level = 0.1f;
        try {
            if (recorder != null) {
//                getMaxAmplitude()的范围是 1-32767
//                mediaRecorder.getMaxAmplitude()/32768 占总量的百分比
//                这里7*mediaRecorder.getMaxAmplitude()/32768 的最大值为6
                level = recorder.getMaxAmplitude() / 32768f;
                return level;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return level;
    }
}

调用方法

    public void onClick(View view) {
        if (mediaRecorderUtil == null) {
            mediaRecorderUtil = new MediaRecorderUtil(this);
            mediaRecorderUtil.start();
            btMediaRecorder.setText("正在录音...");
        } else {
            mediaRecorderUtil.stop();
            mediaRecorderUtil = null;
            btMediaRecorder.setText("开始录音");
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值