我正在使用核心音频编写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];
有效!背景音乐消失了!
我只是不明白为什么我的第一次尝试失败而第二次尝试失败?
在我看来,没有区别!
答案 0 :(得分:0)
您在每次尝试中都设置了不同的选项。 AVAudioSessionCategoryOptionDuckOthers
与AVAudioSessionCategoryOptionMixWithOthers
和0
之间存在差异。
AVAudioSessionCategoryOptionMixWithOthers
:将此会话中的音频与来自其他活动会话的音频混合。
AVAudioSessionCategoryOptionDuckOthers
:当来自此会话的音频播放时,导致来自其他会话的音频被躲避(音量减小)。
0
表示没有选项。
因此,其他选项需要另一个会话来执行任务。
有关会话选项的更多详细信息,请参阅Apple documentation。
希望这会有所帮助:)
答案 1 :(得分:0)
首先,这两行代码并不等效。 AVAudioSessionCategoryOptionMixWithOthers
实际上的值为1.设置值0表示您不想要任何类别选项。
其次,目前还不清楚你实际想要实现的目标。你说你想要放弃其他音频通道(即使用较低的音量播放它们),然后删除此效果(这将设置AVAudioSessionCategoryOptionMixWithOthers
选项)。但是,你通过背景音乐消失来表明你的成功,这完全是另一回事。
修改强>
要删除闪避效果,请尝试停用闪避会话,而不是在其上设置新类别。
来自Apple文档:
当发生躲避时,设备上的所有其他音频 - 除了电话音频 - 音量降低。使用ducking的应用必须管理其会话的激活状态。在播放音频之前激活音频会话,并在播放音频后停用会话。