我正在编写带有核心音频的iOS应用程序。遇到了一些奇怪的事情。
要做:
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *err = nil;
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDuckOthers error:&err];
[session setActive:YES error:&err];
我发现一切都很好,背景音乐被躲避了。然后我尝试恢复它:
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&err];
没有错误,但背景音乐仍然被躲避。然后我用:
[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:0 error:&err];
它有效!背景音乐不见了!
我只是不明白为什么我的第一次尝试失败而第二次成功?
在我看来,没有区别!
首先,这两行代码并不等价。 AVAudioSessionCategoryOptionMixWithOthers
实际上的值为 1。设置值 0 表示您不需要任何类别选项。
其次,不清楚你实际上想要实现什么。您说您想避开其他音频通道(即使它们以较低的音量播放),然后删除此效果(这将设置AVAudioSessionCategoryOptionMixWithOthers
选项)。但是,您通过背景音乐消失来陈述您的成功,这完全是另一回事。
编辑
要消除闪避效果,请尝试停用闪避会话,而不是在其上设置新类别。
来自苹果文档:
发生闪避时,设备上的所有其他音频(电话音频除外)的音量都会降低。使用闪避的应用必须管理其会话的激活状态。在播放音频之前激活音频会话,并在播放音频后停用会话。
您在每次尝试中都设置了不同的选项。 AVAudioSessionCategoryOptionDuckOthers
和AVAudioSessionCategoryOptionMixWithOthers
和0
之间是有区别的。
AVAudioSessionCategoryOptionMixWithOthers
:将此会话中的音频与其他活动会话中的音频混合在一起。
AVAudioSessionCategoryOptionDuckOthers
:在播放此会话中的音频时,导致来自其他会话的音频被躲避(降低音量)。
0
意味着别无选择。
因此,其他选项需要另一个会话才能执行任务。
有关会话选项的更多详细信息,请参阅 Apple 文档。
希望这对:)有所帮助