1

我正在编写带有核心音频的 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];

有用!背景音乐没了!

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

在我看来,没有区别!

4

2 回答 2

1

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

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

AVAudioSessionCategoryOptionDuckOthers: 使来自其他会话的音频在播放此会话的音频时被闪避(降低音量)。

并且0意味着没有选择。

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

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

希望这会有所帮助:)

于 2016-05-30T08:03:04.233 回答
1

首先,这两行代码是不等价的。AVAudioSessionCategoryOptionMixWithOthers实际上的值为 1。设置值为 0 意味着您不需要任何类别选项。

其次,目前尚不清楚您实际想要达到的目标。您说您想避开其他音频通道(ia 让它们以较低的音量播放),然后删除此效果(这将设置AVAudioSessionCategoryOptionMixWithOthers选项)。但是然后你通过背景音乐消失来说明你的成功,这完全是另外一回事。

编辑

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

从苹果文档:

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

于 2016-05-30T08:04:15.703 回答