Android麦克风探测器

该博客探讨了Android设备上麦克风检测的优化方案,包括录音参数配置、权限检测、占用检测以及音频合法性检查。通过麦克风录音、权限API调用、分析音频数据来判断麦克风是否可用和被占用的情况,适用于确保麦克风采集和上行功能的准确性。
摘要由CSDN通过智能技术生成

一、问题背景

目前麦克风是否可用的检测方案过于简单,容易出现检测不准确的情况。针对此问题做了如下优化。

推荐集成方在使用麦克风的采集和上行功能前要检测麦克风是否可用。

二、麦克风探测器功能介绍

1、录音。包括采样率、声源、采样位数、声道数等参数适配,保存音频文件生成pcm或者wav,获取音频的分贝值。

2、麦克风权限是否授予检测。

3、麦克风当前是否被占用检测。

4、音频数据的合法性检测。采集到的音频有没有被系统静默处理。

检测方案如下图所示:

三、录音机录音以及生成音频文件

系统录音机AudioRecord正常启动是麦克风占用检测的前提,系统录音机正常启动需要给录音机传入正确的参数,包括声源、采样率、声道数、采样位数,录音机才会创建成功。根据AudioRecord提供的API以及以往开发经验,绝大部分(具体数据没有统计)机型传入以下参数系统录音机能创建成功:

mAudioSource = MediaRecorder.AudioSource.MIC;
mSampleRateInHz = 16000;
mChannelConfig = AudioFormat.CHANNEL_IN_MONO;
mAudioFormat = AudioFormat.ENCODING_PCM_16BIT

极其个别机型录音参数需要适配,目前的适配:

//1、魅族、OPPO、realme的Android10系统,开启无障碍时的参数
if (context != null
    && (DeviceUtil.isMeiZu() || DeviceUtil.isOppo() || DeviceUtil.isRealMe())
    && (DeviceUtil.getSdkIntVersion() == 29)
    && DeviceUtil.isAccessibilityEnabled(context.getApplicationContext())) {
  mAudioSource = MediaRecorder.AudioSource.VOICE_RECOGNITION;
  mChannelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
}

 读麦克风返回的数据会先缓存在内存中,最后一次读取的数据(index为负数)返回后,可保存生成pcm或者wav方便测试。麦克风录音流程图如下所示:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值