电话通话后Android麦克风灵敏度发生变化

Mac*_*ski 5 audio android signal-processing android-audiorecord

我的应用是测量捕获音频的音量作为样本绝对幅度的函数.

我注意到android.media.AudioRecord了Android SDK 中的意外行为.让我们假设以下流程:

  1. 应用程序启动
  2. 正在测量音量
  3. 电话呼叫被接听/拨打
  4. 正在测量音量

麦克风周围的噪音是由具有恒定音量设置的电视产生的.针对点2测量的值在[55-65]范围内,针对点4测量的值在[15-25]范围内(请参见下面的2.和4的音频可视化).

我知道发生电话时必须进行一些音量调整.是否有可能监控这些调整或摆脱它们?

我已经尝试过AutomaticGainControl,但我的Nexus 5不支持它,我不想使用它,因为目标设备可能也不支持它.

更新 该音量调整正在发生的事情不是只有在电话.我刚刚注意到当手机正躺在桌子上测量音量时的相同行为.

电话前后的PCM音频

Fun*_*her 2

关于您的应用程序与其他应用程序共享的资源(在本例中为麦克风) - 您应该始终小心对待它们,并假设在通话或其他使用过程中(例如切换到使用麦克风的其他应用程序),配置可能会发生变化。

我不会尝试监视增益的变化,这可能需要 root 或其他提升的权限 - 我会采取另一种方法并执行以下操作:

  1. 当用户录音时,将麦克风灵敏度级别保存到录音活动中的配置文件 (shared_prefs) 中。如果用户在使用您的应用程序期间当然更改了它,请执行相同的操作。
  2. 在录音活动的 onResume 过程中 - 加载麦克风灵敏度级别值并在继续录音之前进行设置(如何在 android 中录制音频时调整麦克风灵敏度 - 已解决

如果有电话将您的应用程序置于后台并控制麦克风,则一旦完成,您的应用程序将返回前台并保留麦克风灵敏度级别以供进一步录音。

希望这可以帮助。