iOS - 使用AVAudioSessionCategoryAmbient和duckOthers以及mixWithOthers

时间:2018-01-12 16:24:51

标签: ios audio swift3 avfoundation

我对AVAudioSession有疑问。我想在播放我的片段时混合运行音乐(例如来自spotify),但它也应该通过Ring / Silent开关静音。

在我的应用程序中,我播放了这样一个简短的音频片段:

//set my cateory first
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, with: [.duckOthers])

//... when audio will start playing
AVAudioSession.sharedInstance().setActive(true)
myPlayer.play()

//... when audio snipped has finished
AVAudioSession.sharedInstance().setActive(false)

当响铃/静音开关关闭时,此功能正常。音乐被躲避,我的音频剪辑被播放。音频结束后,音乐进入前台。

现在当Ring / Silent开关打开时,我的片段没有播放,但正在运行的音乐被躲避,这不是我想要的行为。

当开关打开时,是否有任何组合或解决方案可以使音频静音,当我的当前会话处于活动状态时,是否有其他音频消失?

我找到了关于检测静音开关的那些回购(MuteSoundSwitch),但这看起来很脏。

1 个答案:

答案 0 :(得分:0)

https://apple.stackexchange.com/questions/222775/game-audio-is-tied-to-the-ringer-switch-is-this-a-bug-or-a-feature

不幸的是,这是Apple想要的AVAudioSessionAmbient行为。您告诉iPhone应用程序中的所有音频都是不必要的,如果静音开关打开,则可以忽略。

尝试改用AVAudioSessionCategoryPlayback: https://developer.apple.com/documentation/avfoundation/avaudiosessioncategoryplayback?language=objc

它也可以与.duckOthers一起使用。我建议在您的应用程序委托didFinishLaunchingWithOptions中进行设置:

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [.duckOthers])