2017-03-04 90 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

感謝您的回答,它幫助了我! –