电话结束后,Android话筒灵敏度发生变化

时间:2016-01-14 11:28:15

标签: android audio signal-processing android-audiorecord

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

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

  1. 推出应用程序
  2. 正在衡量音量
  3. 接听/拨打电话
  4. 正在衡量音量
  5. 麦克风周围的噪音是由具有恒定音量设置的电视产生的。针对点2测量的值在[55-65]范围内,针对点4测量的值在[15-25]范围内(请参见下面的2.和4的音频可视化)。

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

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

    更新 只有在通话后,此音量调整才会发生。当电话只是躺在桌子上测量音量时,我才注意到同样的行为。

    PCM audio before and after the phone call

1 个答案:

答案 0 :(得分:2)

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

我没有尝试监控可能需要root权限或其他提升权限的收益变化,而是采取其他方法并执行以下操作:

  1. 当用户录制时,将麦克风灵敏度级别保存到录制活动中的配置文件(shared_prefs)。如果用户在使用您的应用程序时更改了它,请执行相同的操作。
  2. 在录制活动的onResume proc中 - 加载麦克风灵敏度级别值并在继续录制之前设置它(How to adjust microphone sensitivity while recording audio in android - Solved
  3. 如果有电话会将您的应用程序抛到后台并控制麦克风,一旦完成,您的应用程序将返回到前台并保留麦克风灵敏度级别以便进一步录制。

    希望这有帮助。