iOS6 使用 PlayAndRecord 音频会话类别时音量非常低

Posted

技术标签:

【中文标题】iOS6 使用 PlayAndRecord 音频会话类别时音量非常低【英文标题】:iOS6 very low volume when using PlayAndRecord audio session category 【发布时间】:2012-11-26 16:59:17 【问题描述】:

我有一个通过 AVAudioPlayer 播放音频的应用程序以及一个 AudioUnit 播放器实现。从 ios6 开始,通过扬声器的播放音量(无论播放机制如何)已显着降低——即使在最大音量下也几乎听不到音量。如果我只是将音频会话更改为其他会话之一,例如 kAudioSessionCategory_SoloAmbientSound 或 kAudioSessionCategory_MediaPlayback,音量将恢复到 iOS6 之前的水平,但我当然无法录制音频。在运行 iOS5(或 iOS4)的同一设备上,不同音频会话类别的音量级别没有差异。

还有其他人遇到过这个问题吗?我一直试图弄清楚如何在我的应用程序中将音量恢复到正常水平。我已经向 Apple 提交了一个错误,因为这似乎是一个错误,因为不同类别之间的音量水平差异很大,但我不希望很快从他们那里得到答案(或解决方案)。

配置音频会话:

UInt32 category = kAudioSessionCategory_PlayAndRecord;
error = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category),  &category);
if (error) 
    // handle error


UInt32 speakerOverride = 1;
error = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(speakerOverride), &speakerOverride);
if (error) 
    // handle error

【问题讨论】:

我也有这个问题..你解决了吗? @Ippier 将类别设置为 PlaybackAndRecord 时,声音会传到接收器(耳机扬声器),是这样吗? 我也对这个问题的答案感兴趣。即使在 iOS 9.2 上,使用 kAudioSessionPlayAndRecord 的音量也远低于使用 AVAudioSessionCategoryPlayback 的音量。 【参考方案1】:

您是否检查/设置了当前的硬件输出音量?

kAudioSessionProperty_CurrentHardwareOutputVolume

如果您使用多声道混音器音频单元,您还可以通过以下方式检查/设置音量:

kMultiChannelMixerParam_Volume

【讨论】:

是的,我正在从音频会话中获取硬件输出音量,并在我的音频单元混音器单元、AVAudioPlayer 或 AudioQueue 组件中进行设置。相对音量级别与硬件音量级别一致,并且会在您调整音量时正确缩放。【参考方案2】:

实际上,您应该将您的 speakerOverride 参数指定为 'spkr',就像在 audiosession 标头中一样

enum

    kAudioSessionOverrideAudioRoute_None    = 0,
    kAudioSessionOverrideAudioRoute_Speaker = 'spkr'
;

【讨论】:

以上是关于iOS6 使用 PlayAndRecord 音频会话类别时音量非常低的主要内容,如果未能解决你的问题,请参考以下文章

iPhone SDK audioSession 问题

AVAudioSession 不会自动连接蓝牙 A2DP 音频?

使用 AudioQueue 在 iOS 上进行失真(机器人)音频录制

iOS6 AVAudioPlayer - AAC音频文件的持续时间总是返回0。

iOS 6 音频多路由 - 同时使用外部麦克风和内部扬声器

使用 AVAudioRecorder 录制后,AVAudioPlayer 不通过扬声器播放