首页 文章

AVAudioSession - 减少iOS背景音量以实现效果

提问于
浏览
0

当我试图关闭环境音乐(例如音乐播放器或Spotify)以获得音效时,我看到显示屏有延迟 . 我正在使用AudioServicesPlaySystemSound来播放效果 . 我使用以下内容启动会话并在后台播放音乐 .

[audioSession setCategory:AVAudioSessionCategoryAmbient error:nil];

然后我将类别设置为播放以停止音乐为我的效果让路

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

并使用以下内容重新启动音乐

[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];

这感觉非常愚蠢,并且setCategory:AVAudioSessionCategoryPlayback在卷消失时在显示器中产生延迟 .

将背景音乐静音的正确方法是什么?

谢谢,史蒂夫

1 回答

  • 2

    首先,我不确定为什么要将类别设置为 AVAudioSessionCategoryPlayback . 除非您真的需要在关闭静音开关/手机锁定时继续播放音效,否则您应该选择 AVAudioSessionCategorySoloAmbient ,这也会使背景音静音 . 完成播放音效后,您可以切换回氛围 .

    如果播放真的是你需要的(因为你有一个闹钟或其他东西),你可能会考虑立即切换到播放类别,然后设置 kAudioSessionProperty_OverrideCategoryMixWithOthers 属性,使背景声仍然播放,然后如果你想要它关闭一个静音,但你应该首先确保确实需要播放类别 .

    或者,您是否考虑过躲避背景音而不是静音?也许你可以留在ambiant类别,只需在播放效果时设置 kAudioSessionProperty_OtherMixableAudioShouldDuck 音频会话属性(然后重置它) . 这意味着当您执行效果时,背景声音的音量会减小,这可能会更合适,具体取决于您的应用正在执行的操作 .

    最后但并非最不重要的是,我从未使用 AudioServicesPlaySystemSound ,它可能无法用于混音或闪避,因此您可能需要切换到 AVAudioPlayer .

相关问题