2017-03-04 122 views
0

播放的声音和音乐,我同时使用SKAction.playSoundFileNamedAVAudioPlayerSpritekit保持iPhone音乐游戏时

如果我打在我的iPhone的音乐,我会打开我的游戏,我的游戏停止音乐。如果我打开另一场比赛,音乐不会停止。

任何人都知道如何仍是音乐播放?

我的声音管理器类为:

class SoundManager { 

    static let sharedInstance = SoundManager() 

    /// Short Incidental Sound SKAction 
    let coin = SKAction.playSoundFileNamed("coin.wav", waitForCompletion: false) 
    let newLevel = SKAction.playSoundFileNamed("newLevel.wav", waitForCompletion: true) 
    let blup = SKAction.playSoundFileNamed("singleWater.wav", waitForCompletion: true) 

    let pop = SKAction.playSoundFileNamed("estrazionePop" + ".wav", waitForCompletion: true) 
    let pip = SKAction.playSoundFileNamed("estrazionePip" + ".wav", waitForCompletion: true) 
    let split = SKAction.playSoundFileNamed("split" + ".mp3", waitForCompletion: true) 
    let fire = SKAction.playSoundFileNamed("fire" + ".wav", waitForCompletion: true) 
    let stoneStop  = SKAction.playSoundFileNamed("stoneStop" + ".wav", waitForCompletion: true) 

    let small = SKAction.playSoundFileNamed("BvS-Exp-Small" + ".wav", waitForCompletion: true) 
    let medium = SKAction.playSoundFileNamed("BvS-Exp-Medium" + ".wav", waitForCompletion: true) 
    let big = SKAction.playSoundFileNamed("BvS-Exp-Big" + ".wav", waitForCompletion: true) 

    let smallBoss = SKAction.playSoundFileNamed("BvS-Exp-Boss-Small" + ".wav", waitForCompletion: true) 
    let mediumBoss = SKAction.playSoundFileNamed("BvS-Exp-Boss-Medium" + ".wav", waitForCompletion: true) 
    let bigBoss = SKAction.playSoundFileNamed("BvS-Exp-Boss-Big" + ".wav", waitForCompletion: true) 

    let bombInizio = SKAction.playSoundFileNamed("BombInizio" + ".wav", waitForCompletion: true) 
    let bombScintilla:SKAudio = SKAudio(fileName: "BombScintilla" + ".wav", numberOfLoops: -1) 
    let bombBoom = SKAction.playSoundFileNamed("BombBoom" + ".wav", waitForCompletion: true) 

    let spiderSvamp = [ 
     SKAction.playSoundFileNamed("Fhh0" + ".wav", waitForCompletion: true), 
     //SKAction.playSoundFileNamed("Fhh1" + ".wav", waitForCompletion: true), non mi piacciono 
     //SKAction.playSoundFileNamed("Fhh2" + ".wav", waitForCompletion: true), 
     SKAction.playSoundFileNamed("Fhh3" + ".wav", waitForCompletion: true), 
     SKAction.playSoundFileNamed("Fhh4" + ".wav", waitForCompletion: true), 
     SKAction.playSoundFileNamed("Fhh5" + ".wav", waitForCompletion: true) 
    ] 

    ///Suoni lunghi 
    var gameover: SKAudio = SKAudio(fileName: "gameover" + ".mp3", numberOfLoops: 0) 
} 

class SKAudio { 
    var audio: AVAudioPlayer! 
    var url: URL? 

    fileprivate var numberOfLoops:Int! 

    ///-1 infinite, 0 = once 
    init(fileName: String, numberOfLoops:Int? = -1) { 
     url = Bundle.main.url(forResource: fileName, withExtension: nil) 
     self.numberOfLoops = numberOfLoops 
    } 

    func playSound() { 
     if (url == nil) { 
      print("Could not find the file \(audio)") 
     } 

     do { 
      audio = try AVAudioPlayer(contentsOf: url!, fileTypeHint: nil) 

     } 
     catch let error as NSError { print(error.debugDescription) 

     } 
     if audio == nil { 
      print("Could not create audio player") 
     } 
     else { 
      audio.prepareToPlay() 
      audio.numberOfLoops = numberOfLoops 
      audio.play() 
     } 
    } 

    func pause() { 
     if let player = audio { 
      if player.isPlaying { 
       player.pause() 
      } 
     } 
    } 

    func resume() { 
     if let player = audio { 
      if !player.isPlaying { 
       player.play() 
      } 
     } 
    } 
    func stop() { 
     if let player = audio { 
      if player.isPlaying { 
       player.stop() 
      } 
     } 
    } 
    func isPlaying() -> Bool { 
     if let player = audio { 
      return player.isPlaying 
     } 
     else { 
      return false 
     } 
    } 
    func increaseVolume(value:Float) { 
     if let player = audio { 
      if player.isPlaying { 
       if player.volume != 1.0 { 
        let incrrease = min(value, 1.0) 
        player.volume += incrrease 
       } 
      } 
     } 
    } 
    func decreaseVolume(value:Float) { 
     if let player = audio { 
      if player.isPlaying { 
       if player.volume != 0.0 { 
        let decr = max(value, 0.0) 
        player.volume -= decr 
       } 
      } 
     } 
    } 
    func setVolume(value:Float) { 
     if let player = audio { 
      var val = max(value, 0.0) 
      val = min(value, 1.0) 
      player.volume = val 
     } 
    } 
} 

感谢

回答

1

如果我了解的情况,你想成为能够听音乐的音乐应用程序的例如,在同一时间玩你的游戏,对吧?

我不是很熟悉spriteKit,但对于一个正常的应用程序,你可以使用AVAudioSessionCategoryAmbient使您的应用程序不会停止其他声音。

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient) 
+0

谢谢你的回答,但不起作用:( –

+0

感谢您的回答,它帮助了我! –