Android MediaRecorder录音

1. 简介

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

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

添加录音权限

xml 复制代码
<uses-permission android:name="android.permission.RECORD_AUDIO" />

2. MediaRecorder的使用

MediaRecorder的使用

kotlin 复制代码
// 开始录音
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
}

3. MediaRecorder的音量

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

kotlin 复制代码
//计算分贝
var amplitude = mMediaRecorder?.maxAmplitude ?: 0
var db = 0.0
if (amplitude > 1) {
	db = 20 * log10(ratio)
}
相关推荐
流星白龙1 小时前
【MySQL高阶】21.撤销表空间,撤销日志
android·mysql·adb
我命由我123452 小时前
Android 开发,FragmentPagerAdapter 的 isViewFromObject 方法问题
android·java-ee·kotlin·android studio·android jetpack·android-studio·android runtime
weiggle3 小时前
第五篇:Modifier 解析——链式调用的艺术
android
awu的Android笔记3 小时前
Android 弱网模拟:别只会用均匀分布——三种延迟模型和两种丢包模型的原理与实现
android·tcp/ip
sensor_WU3 小时前
【Delphi】 开发 android 升级模块硬核实现
android·delphi android·android 升级·apk升级 delphi
帅次4 小时前
Kotlin MVVM 实战入门:从分层到状态闭环
android·kotlin·android studio·android jetpack
YF02114 小时前
Android BLE 信号强度获取与 底层原理深度解析
android·蓝牙
随遇丿而安4 小时前
第7周:RecyclerView 高级功能与列表硬核优化
android
qq3621967054 小时前
手机App下载安装完全指南:2026最新教程(Android & iOS)
android·ios·智能手机
想取一个与众不同的名字好难4 小时前
安卓设置亮度的时候,系统会在100%与0%反复横跳
android·java·开发语言