• Android MediaRecorder录音


    1. 简介

    在android中录制音频有两种方式,MediaRecorderAudioRecord。两者的区别如下:

    • MediaRecorder
      简单方便,不需要理会中间录制过程,结束录制后可以直接得到音频文件进行播放;录制的音频文件是经过压缩的,需要设置编码器;录制的音频文件可以用系统自带的播放器播放。
    • AudioRecord
      在声音录制过程中,可以处理采集的声音数据,如降噪、合成等。过程为一段一段进行录制然后得到数据分别进行处理。录制的是PCM格式的音频文件,需要用AudioTrack来播放,AudioTrack更接近底层。

    添加录音权限

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    
    • 1

    2. MediaRecorder的使用

    MediaRecorder的使用

    // 开始录音
    fun startRecord(filePath: String) {
        mMediaRecorder = MediaRecorder()
        try {
            // 音频来源,麦克风
            mMediaRecorder?.setAudioSource(MediaRecorder.AudioSource.MIC)
            // 采样率
            mMediaRecorder?.setAudioSamplingRate(44100)
            // 输出格式
            mMediaRecorder?.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
            // 音频编码
            mMediaRecorder?.setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
            // 音质频率
            mMediaRecorder?.setAudioEncodingBitRate(96000)
            // 输出文件
            mMediaRecorder?.setOutputFile(filePath)
            mMediaRecorder?.prepare()
            mMediaRecorder?.start()
        } catch (e: Exception) {
        }
    }
    
    // 结束录音
    fun stopRecord() {
        mMediaRecorder?.stop()
        mMediaRecorder?.reset()
        mMediaRecorder?.release()
        mMediaRecorder = null
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3. MediaRecorder的音量

    使用MediaRecorder.getMaxAmplitude来获取一小段时间内音频源数据中的最大振幅,返回的是0到32767范围的16位整型。

    //计算分贝
    var amplitude = mMediaRecorder?.maxAmplitude ?: 0
    var db = 0.0
    if (amplitude > 1) {
    	db = 20 * log10(ratio)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    bash -s 的作用
    最低通行费
    归并排序精讲
    git工作常用命令
    Linux命令之用户管理(详解)
    软件研发团队适用的项目管理工具推荐
    山东省首版次高端软件申报指导
    android10.0(Q) MTK 6765 user版本打开root权限
    C++中指针与引用的区别
    c# 字典与内存碎片化
  • 原文地址:https://blog.csdn.net/chennai1101/article/details/132711700