电话结束后Android手机麦克风灵敏度发生变化

5
我的应用程序正在测量捕获音频的体积,作为样本绝对幅度的函数。
我注意到了Android SDK中的android.media.AudioRecord的意外行为。假设以下流程:
1. 启动应用程序 2. 正在测量音频音量 3. 回答/拨打电话 4. 正在测量音频音量
麦克风周围的噪音是由电视产生的,音量设置恒定。第2点测得的值在[55-65]范围内,第4点测得的值在[15-25]范围内(请参见下面2和4的音频可视化)。
我理解在电话呼叫发生时必须进行某些音量调整。是否可能监视这些调整或摆脱它们?
我尝试了AutomaticGainControl,但它不支持我的Nexus 5,并且我不想使用它,因为目标设备也可能不支持它。
更新:这种音量调整不仅发生在电话后。当手机只是放在桌子上测量音量时,我刚刚注意到了相同的行为。

PCM audio before and after the phone call

1个回答

2
关于您的应用程序与其他应用程序共享的资源(例如麦克风)- 您应该始终小心处理它们,并假设配置可能在电话呼叫或切换到使用麦克风的另一个应用程序期间发生更改。
与其尝试监视增益变化,这可能需要 root 或其他提升的权限 - 我会采取另一种方法并执行以下操作:
1. 在用户录制时,在您的记录活动中将麦克风灵敏度级别保存到配置文件(shared_prefs)中。当用户在使用您的应用程序期间更改它时,也要执行相同的操作。 2. 在您的记录活动的 onResume 过程中,加载麦克风灵敏度级别值并在继续录制之前进行设置。
如果有电话呼叫将您的应用程序推到后台并控制麦克风,一旦完成,您的应用程序将返回前台并保留麦克风灵敏度级别以进行进一步的录制。
希望这可以帮助您。

你非常明智地小心处理像麦克风这样的共享资源。你在第一点中具体指什么?我为每个录制的音频样本计算音量,这不是一个 UI 设置。我另外担心的是,增益不会保持音质。 - Maciej Donajski
1
对于第一步 - 保存每个录音所需的所有麦克风设置,并在您的应用程序返回前台时恢复它。 - FunkSoulBrother
感谢你的建议@FunkSoulBrother。这些都是有效的建议,但对我来说主要问题在于一个更新部分中所强调的。敏感度的变化发生在没有电话事件的情况下 - 应用程序在前台运行,手机甚至没有SIM卡。我需要在录音时提供稳定的高质量声音。 - Maciej Donajski
这意味着当您的应用程序使用麦克风时,有些东西正在干扰它。我建议检查一下是否在多个设备上都存在这个问题,以了解该问题是其他应用程序使用麦克风还是操作系统导致的。您肯定需要更多关于该问题的信息。此外,我建议阅读AudioManager的文档(http://developer.android.com/reference/android/media/AudioManager.html),并检查操作系统是否广播任何意图,以响应麦克风状态变化而您的应用程序可以接收到。 - FunkSoulBrother

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接