如果 spritekit 中正在播放来自另一个应用程序的音乐,如何使 AVAudioPlayer 静音

Posted

技术标签:

【中文标题】如果 spritekit 中正在播放来自另一个应用程序的音乐,如何使 AVAudioPlayer 静音【英文标题】:How to mute AVAudioPlayer if music from another app is playing in spritekit 【发布时间】:2015-12-14 00:27:37 【问题描述】:

默认情况下,我注意到在 Spritekit 中,如果正在播放来自另一个应用程序的音频,它会自动关闭并播放应用程序中的音频。我该如何做到这一点,以使相反的情况发生?如何使应用中的音频和音乐以及音效保持静音并播放外部音乐?

【问题讨论】:

【参考方案1】:

您可以使用AVAudiosession 调整混音设置。您可以选择的可能音频类别很少,但我认为AVAudioSessionCategoryAmbient 可能最接近您想要的:

NSError *err;
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setCategory:AVAudioSessionCategoryAmbient error:&err];

if (err) 
    NSLog(@"There was a problem setting the session category: %@", error);

【讨论】:

感谢您的解决方案,但是应用内的音乐和声音并未静音,而是同时播放来自应用和外部应用的音乐 是的;这是存在的最接近的类别。您还有两个选择:尝试读取AVAudioSessionsecondaryAudioShouldBeSilencedHint 属性,但如果失败,您可能需要改为读取otherAudioPlaying 属性。从技术上讲,您应该使用前者而不是后者,但它们所做的事情略有不同,因此您可能需要同时尝试两者。 (注意:这需要进行检查,即您检查条件并仅在适当时播放声音。)

以上是关于如果 spritekit 中正在播放来自另一个应用程序的音乐,如何使 AVAudioPlayer 静音的主要内容,如果未能解决你的问题,请参考以下文章

从 SpriteKit 中的类播放音频

在不同的 UIKit 和 SpriteKit 场景中连续播放音频

Spritekit 在游戏时保留 iPhone 音乐

如何在 SpriteKit 中将磁贴更改为另一个(或空白)?

touchesMoved中的SpriteKit + AVAudioPlayer:杀死fps

在 Swift SpriteKit 项目中播放声音?