将 AVAudioSession 模式设置为 AVAudioSessionModeVideoChat 时出现麦克风低语音录制问题

Posted

技术标签:

【中文标题】将 AVAudioSession 模式设置为 AVAudioSessionModeVideoChat 时出现麦克风低语音录制问题【英文标题】:Microphone low voice recording issue when AVAudioSession mode is set to AVAudioSessionModeVideoChat 【发布时间】:2014-02-14 01:47:06 【问题描述】:

根据AVAudiosessionModeVideoChat的文档 -

使用此模式时,设备的音调均衡针对语音进行了优化,允许的音频路由集减少到仅适用于视频聊天的那些。

所以系统会降低适合该模式的音频输出和输入路由的默认灵敏度。

我将 setMode 用于AVAudioSessionModeVideoChat,以便应用程序/系统即时自动识别并适应硬件集成(有线和蓝牙耳机)。但是,似乎将此模式设置为视频聊天会大大降低内置麦克风的灵敏度,因此声音会以低音录制。我的目标应用用户大多处于嘈杂的环境中。

有什么方法可以将输入和输出灵敏度提高到最大,同时利用AVAudioSessionModeVideoChat 模式?

以下是用于在我的应用程序中设置 AudioSession 的代码...

if (![[[AVAudioSession sharedInstance] category] isEqualToString:AVAudioSessionCategoryPlayAndRecord]) 
    [[AVAudioSession sharedInstance] setActive:NO error:&error];

    [[AVAudioSession sharedInstance] setActive:YES error:&error];
    NSLog(@"setActive error = %@", error);

    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
    NSLog(@"setCategory error = %@", error);

    [[AVAudioSession sharedInstance] setMode:AVAudioSessionModeVideoChat error:&error];
    NSLog(@"setMode error = %@", error);

测试环境详情:-

设备测试:iPad mini Retina 4G 和 iPad 2

iOS:7.0.3

使用内置扬声器和麦克风的设备进行测试。

【问题讨论】:

【参考方案1】:

以下是适用于我的应用目标用户的一种可能的替代解决方案/方法。 使用处理蓝牙耳机集成的AVAudioSessionCategoryOptions 设置类别,声音默认为扬声器。

if (![[[AVAudioSession sharedInstance] category] isEqualToString:AVAudioSessionCategoryPlayAndRecord]) 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:(AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetooth) error:&error];
    NSLog(@"setCategory error = %@", error);

    [[AVAudioSession sharedInstance] setActive:YES error:&error];
    NSLog(@"setActive error = %@", error);

注意 - 我必须删除 AVAudioSessionModeVideoChat 模式设置方法,因为系统倾向于优化输入/输出系统资源,因此我的问题中提到了麦克风灵敏度问题。

到目前为止,我已经在 iPad mini 和 iPad 2 上进行了一些测试。仍然需要在 iPhone 上进行测试。

我希望这个答案能帮助别人,如果不是我的话!

【讨论】:

对我来说,这个选项 "AVAudioSessionCategoryOptionDefaultToSpeaker" 可以返回正常的音量值

以上是关于将 AVAudioSession 模式设置为 AVAudioSessionModeVideoChat 时出现麦克风低语音录制问题的主要内容,如果未能解决你的问题,请参考以下文章

iOS 应用中调整手机系统音量

如何取消 AVAudioSession

华为网机顶盒出现问题怎么办

Swift:设置 AVAudioSession 输出音量

设置 AVAudioSession 类别对来自 WKWebView 的声音没有影响

AVAudioSession - 捕获 setMode 和 setCategory 错误