嘿所以我在下面有这个代码。我只是试图得到它,以便如果他们是任何音乐,播客等正在播放操作系统内的另一个应用程序,所有声音都是静音。但是我尝试设置它的类别,它不会起作用!我没有使用正确的类别吗?也许不是在正确的地方?
目标是用户可以在使用应用程序时收听自己的音乐。
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("GameMusic9", ofType: "mp3")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("GameMusicRP", ofType: "mp3")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Death", ofType: "mp3")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Tap", ofType: "wav")!)!)
//Monsters
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Blue", ofType: "wav")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Brown", ofType: "wav")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Green", ofType: "wav")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Orange", ofType: "wav")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Purple", ofType: "wav")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Red", ofType: "wav")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Tan", ofType: "wav")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Yellow", ofType: "wav")!)!)
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Correct", ofType: "wav")!)!)//12
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Cowbell", ofType: "aiff")!)!)//13
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("12", ofType: "wav")!)!)//14
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Hybrid", ofType: "mp3")!)!)//15
sounds.append(NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Correct", ofType: "wav")!)!)//16
AVAudioSession.sharedInstance().setActive(true, error: nil)
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)
//Close or punch, or bycycle
var error:NSError?
for var i:Int = 0; i < sounds.count; i++
{
audioPlayers.append(AVAudioPlayer(contentsOfURL: sounds[i], error: &error))
audioPlayers.last?.prepareToPlay()
}
答案 0 :(得分:2)
不,你没有使用正确的类别。来自docs:
AVAudioSessionCategoryAmbient
声音应用的类别 播放是非主要的 - 也就是说,您的应用可以成功使用 声音关闭了。
此类别也适用于“播放”风格的应用,例如 用户在播放音乐应用时播放的虚拟钢琴。什么时候 您使用此类别,来自其他应用的音频与您的音频混合。 通过屏幕锁定和静音开关使您的音频静音 (在iPhone上称为Ring / Silent开关)。
尝试AVAudioSessionCategoryPlayback
:
AVAudioSessionCategoryPlayback
播放录制音乐或其他声音的类别 成功使用您的应用程序的核心。
使用此类别时,您的应用音频将继续使用“静音” 开关设置为静音或屏幕锁定时。 (称为开关 iPhone上的响铃/静音开关。)继续播放音频 app转换为背景(例如,当屏幕 锁),将音频值添加到你的UIBackgroundModes键 信息属性列表文件。
默认情况下,使用此类别的表示您应用的音频是 不可混合激活会话将中断任何其他音频 会话也是不可混合的。要允许混合此类别, 使用AVAudioSessionCategoryOptionMixWithOthers选项。
或者尝试使用AVAudioSessionCategorySoloAmbient
AVAudioSessionCategoryAmbient
,但默认情况下不可混合。
编辑:我误解了这个问题。目标是只在其他应用程序没有播放任何内容时播放音乐。这可以通过检查共享的AVAudioSession
:
[[AVAudioSession sharedInstance] isOtherAudioPlaying];
如果它返回NO
,则只播放您的音乐。请注意,从iOS 8.0开始,最好使用另一个属性(它们的语义略有不同):
[[AVAudioSession sharedInstance] secondaryAudioShouldBeSilencedHint];
当另一个具有不可混合音频的应用程序时,该值为YES 会话播放音频。
应用程序应该使用此属性作为静音音频的提示 是次要的应用程序的功能。例如,a 使用AVAudioSessionCategoryAmbient的游戏可以使用此属性 决定将其音轨静音,同时保持其静音效果。
您还应订阅AVAudioSessionSilenceSecondaryAudioHintNotification
次通知并停止/启动音乐以反映secondaryAudioShouldBeSilencedHint
中的更改。
NSNotificationCenter.defaultCenter().addObserverForName(AVAudioSessionSilenceSecondaryAudioHintNotification, object: nil, queue: nil) { notification in
// stat/stop music based on AVAudioSession.sharedInstance().secondaryAudioShouldBeSilencedHint
}