AVAudioSession set类别成功,但没有任何反应



我正在编写带有核心音频的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选项)。但是,您通过背景音乐消失来陈述您的成功,这完全是另一回事。

编辑

要消除闪避效果,请尝试停用闪避会话,而不是在其上设置新类别。

来自苹果文档:

发生闪避时,设备上的所有其他音频(电话音频除外)的音量都会降低。使用闪避的应用必须管理其会话的激活状态。在播放音频之前激活音频会话,并在播放音频后停用会话。

您在每次尝试中都设置了不同的选项。 AVAudioSessionCategoryOptionDuckOthersAVAudioSessionCategoryOptionMixWithOthers0之间是有区别的。

AVAudioSessionCategoryOptionMixWithOthers :将此会话中的音频与其他活动会话中的音频混合在一起。

AVAudioSessionCategoryOptionDuckOthers :在播放此会话中的音频时,导致来自其他会话的音频被躲避(降低音量)。

0意味着别无选择。

因此,其他选项需要另一个会话才能执行任务。

有关会话选项的更多详细信息,请参阅 Apple 文档。

希望这对:)有所帮助

相关内容

  • 没有找到相关文章

最新更新