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 音频会话类别时音量非常低的主要内容,如果未能解决你的问题,请参考以下文章
AVAudioSession 不会自动连接蓝牙 A2DP 音频?
使用 AudioQueue 在 iOS 上进行失真(机器人)音频录制