我有一个使用音频队列来录制语音用户输入的应用程序。这只会在短时间内发生,并且仅在用户按下按钮时发生。
我想让用户的背景音乐继续播放,除非在实际进行录制时将其静音或以低得多的音量播放(以避免录制从扬声器播放的音频)。
对于我的录制队列,我使用的是 PlayAndRecord 类别,并且我将 OverrideCategoryMixWithOthers 属性设置为 true。
我有一个使用音频队列来录制语音用户输入的应用程序。这只会在短时间内发生,并且仅在用户按下按钮时发生。
我想让用户的背景音乐继续播放,除非在实际进行录制时将其静音或以低得多的音量播放(以避免录制从扬声器播放的音频)。
对于我的录制队列,我使用的是 PlayAndRecord 类别,并且我将 OverrideCategoryMixWithOthers 属性设置为 true。
当他们添加了 AudioSessionSetActiveWithFlags API 和 kAudioSessionSetActiveFlag_NotifyOthersOnDeactivation 标志时,这个问题在 iOS4+ 中变得不那么重要了。
要在录制时暂停背景音乐,您需要调用 AudioSessionSetActive(false),这将停用您的音频会话,然后将类别切换到 PlayAndRecord 模式,并将 OverrideCategoryMixWithOthers 属性设置为 false。
现在,使用这些设置使用 AudioSessionSetActive(true) 重新激活您的会话,iPod/Pandora/etc 的音频会话将被中断并淡出并暂停。
然后,当您的录制完成后,再次使用
AudioSessionSetActiveWithFlags(false, kAudioSessionSetActiveFlag_NotifyOthersOnDeactivation);
这将通知背景音乐应用程序他们的会话不再被中断,他们可以开始播放音乐。
最后,您可以使用 MediaPlayback(或等效)模式再次设置您的音频会话,并将 OverrideCategoryMixWithOthers 属性再次设置为 true。