【问题标题】:How to mute background audio while recording (using Audio Queue Services)如何在录制时静音背景音频(使用音频队列服务)
【发布时间】:2011-01-28 22:02:06
【问题描述】:
我有一个应用程序,它使用音频队列来记录语音用户输入。
这只会在短时间内发生,并且仅在用户按下按钮时发生。
我想让用户的背景音乐继续播放,除非在实际进行录制时将其静音或以低得多的音量播放(以避免录制从扬声器播放的音频)。
对于我的录制队列,我使用的是 PlayAndRecord 类别,并且我将 OverrideCategoryMixWithOthers 属性设置为 true。
【问题讨论】:
标签:
iphone
audio
audioqueueservices
【解决方案1】:
当他们添加了 AudioSessionSetActiveWithFlags API 和 kAudioSessionSetActiveFlag_NotifyOthersOnDeactivation 标志时,这个问题在 iOS4+ 中变得不那么严重了。
要在录制时暂停背景音乐,您需要调用 AudioSessionSetActive(false),这将停用您的音频会话,然后将类别切换到 PlayAndRecord 模式,并将 OverrideCategoryMixWithOthers 属性设置为 false。
现在,使用这些设置使用 AudioSessionSetActive(true) 重新激活您的会话,iPod/Pandora/etc 的音频会话将被中断并淡出并暂停。
然后,当您的录制完成后,再次使用
停用您的会话
AudioSessionSetActiveWithFlags(false, kAudioSessionSetActiveFlag_NotifyOthersOnDeactivation);
这将通知背景音乐应用他们的会话不再被中断,他们可以开始播放音乐。
最后,您可以使用 MediaPlayback(或等效)模式再次设置音频会话,并将 OverrideCategoryMixWithOthers 属性再次设置为 true。