AVAudioSession setCategory成功但没有任何反应

时间:2016-05-30 07:46:40

标签: ios audiosession

我正在使用核心音频编写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];

有效!背景音乐消失了!

我只是不明白为什么我的第一次尝试失败而第二次尝试失败?

在我看来,没有区别!

2 个答案:

答案 0 :(得分:0)

您在每次尝试中都设置了不同的选项。 AVAudioSessionCategoryOptionDuckOthersAVAudioSessionCategoryOptionMixWithOthers0之间存在差异。

AVAudioSessionCategoryOptionMixWithOthers:将此会话中的音频与来自其他活动会话的音频混合。

AVAudioSessionCategoryOptionDuckOthers:当来自此会话的音频播放时,导致来自其他会话的音频被躲避(音量减小)。

0表示没有选项。

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

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

希望这会有所帮助:)

答案 1 :(得分:0)

首先,这两行代码并不等效。 AVAudioSessionCategoryOptionMixWithOthers实际上的值为1.设置值0表示您不想要任何类别选项。

其次,目前还不清楚你实际想要实现的目标。你说你想要放弃其他音频通道(即使用较低的音量播放它们),然后删除此效果(这将设置AVAudioSessionCategoryOptionMixWithOthers选项)。但是,你通过背景音乐消失来表明你的成功,这完全是另一回事。

修改

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

来自Apple文档:

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