【问题标题】:Android microphone sensitivity change after phone call通话后Android麦克风灵敏度发生变化
【发布时间】:2016-04-19 17:05:59
【问题描述】:

我的应用程序正在测量捕获音频的音量作为样本绝对幅度的函数。

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

  1. 应用程序已启动
  2. 正在测量音量
  3. 电话已接听/已拨
  4. ​​>
  5. 正在测量音量

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

我了解来电时必须进行音量调节。是否可以监控这些调整或摆脱它们?

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

更新 此音量调整仅在通话后发生。当手机放在桌子上测量音量时,我刚刚注意到了同样的行为。

【问题讨论】:

    标签: android audio signal-processing android-audiorecord


    【解决方案1】:

    关于您的应用与其他应用共享的资源(这里指的是麦克风) - 您应该始终谨慎对待它们,并假设在通话或其他用途(例如切换到正在使用麦克风。

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

    1. 在用户录制时将麦克风灵敏度级别保存到录制活动中的配置文件 (shared_prefs) 中。如果用户在使用您的应用程序期间当然更改它,请执行相同操作。
    2. 在录制活动的 onResume 过程中 - 加载麦克风灵敏度级别值并在继续录制之前进行设置 (How to adjust microphone sensitivity while recording audio in android - Solved)

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

    希望这会有所帮助。

    【讨论】:

    • 谨慎使用麦克风等共享资源是绝对正确的。你在1.中到底是什么意思?我计算每个记录样本的音量,它不是 UI 设置。我担心的另一个问题是增益不会保持音质。
    • For 1 - 保存每次录制所需的所有麦克风设置,并在应用返回前台后恢复。
    • 感谢您的想法@FunkSoulBrother。这些是有效的建议,但对我来说主要问题在 Update 部分中突出显示。在没有电话事件的情况下,我发生了灵敏度变化——应用程序在前台,手机甚至没有 SIM 卡。我需要在录制时提供恒定质量的声音。
    • 这意味着当您的应用程序使用麦克风时,有东西干扰了麦克风。我会检查这在多个设备上是否一致,以了解问题是否是由于其他应用程序使用麦克风或操作系统造成的。您肯定需要有关该问题的更多信息。此外 - 我会通读 AudioManager (developer.android.com/reference/android/media/AudioManager.html) 的文档,并检查操作系统广播是否有任何意图,您的应用程序可以接收到以响应麦克风的状态变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多