【问题标题】:AVAudioSession setCategory success but nothing happensAVAudioSession setCategory 成功但没有任何反应
【发布时间】:2016-09-27 23:09:55
【问题描述】:

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

有效!背景音乐不见了!

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

在我看来,没有区别!

【问题讨论】:

    标签: ios audiosession


    【解决方案1】:

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

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

    编辑

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

    来自 Apple 文档:

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

    【讨论】:

    • 是的,这只是一个测试。我想要做的是避开背景音乐,然后在不停用当前音频会话的情况下删除此效果。但是,它不起作用。所以我尝试了一个不同的选项:0。然后我发现它有效。
    【解决方案2】:

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

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

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

    0 表示没有选项。

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

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

    希望这会有所帮助:)

    【讨论】:

    • 我明白 0 和 AVAudioSessionCategoryOptionMixWithOthers(0x1) 之间的区别。但在我看来,如果 0 有效, AVAudioSessionCategoryOptionMixWithOthers 也应该有效。我尝试 0 来中断背景音乐。有用。我尝试使用 AVAudioSessionCategoryOptionMixWithOthers 来消除闪避效果。它不起作用。差别只是 0 和 1。
    • 否,对于此选项,您需要另一个会话。阅读苹果文档,我在答案中提供了链接。它声明Mixes audio from this session with audio from other active sessions. 这意味着您需要其他活动会话才能使用此选项
    • 是的,我的 iTunes 确实在后台播放音乐。选项更改永远不会有任何区别,除非将其更改为 0。将 1 更改为 2 或将 2 更改为 1 并不完全一样。
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多