2016-02-26 17 views
11

Sto utilizzando un SKAudioNode() per riprodurre musica di sottofondo nel mio gioco. Ho una funzione di riproduzione/pausa e tutto funziona bene fino a quando non collego le cuffie. Non v'è alcun suono a tutti e quando chiamo la funzione di pausa/play ottengo questo erroreSKAudioNode() si arresta in modo anomalo quando si inseriscono le cuffie in/out

AVAudioPlayerNode.mm:333: inizio: condizione richiesta è falsa: _engine-> IsRunning() com.apple.coreaudio .avfaudio ', motivo:' condizione richiesta è falsa: _engine-> IsRunning()

Qualcuno sa cosa significa?

Codice:

import SpriteKit 

class GameScene: SKScene { 

let loop = SKAudioNode(fileNamed: "gameloop.mp3") 
let play = SKAction.play() 
let pause = SKAction.pause() 
var isPlaying = Bool() 

override func didMoveToView(view: SKView) { 
    loop.runAction(play) 
    isPlaying = true 
    self.addChild(loop) 
} 

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    _ = touches.first as UITouch! 

    for _ in touches { 
     if isPlaying { 
      loop.runAction(pause) 
      isPlaying = false 
     } else { 
      loop.runAction(play) 
      isPlaying = true 
     } 
    } 
} 
} 
+0

Eventuali duplicati di [crash AVAudioEngine quando le cuffie spina dentro o fuori] (http://stackoverflow.com/questions/26728250/avaudioengine-crashes-when-plug-headphones-in-or-out) –

+0

AVAudioEngineConfigurationChangeNotification non mi è stato di aiuto :(Ho trovato questa domanda prima di – Cherrypig

+0

Accidenti. Stai correndo su un simulatore? Mi sembra di ricorrere in un problema simile recentemente .. –

risposta

2

non è stato in grado risolvere il problema, ma utilizzando AVAudioPlayer() ho trovato una buona soluzione. Grazie a tutti per avermi supportato!

import SpriteKit 
import AVFoundation 

class GameScene: SKScene {  
    var audioPlayer = AVAudioPlayer() 

    override func didMoveToView(view: SKView) {   
     initAudioPlayer("gameloop.mp3")   
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {   
     _ = touches.first as UITouch! 
     for _ in touches { 
      toggleBackgroundMusic()    
     }   
    } 

    func initAudioPlayer(filename: String) {   
     let url = NSBundle.mainBundle().URLForResource(filename, withExtension: nil) 
     guard let newURL = url else { 
      print("Could not find file: \(filename)") 
      return 
     } 
     do { 
      audioPlayer = try AVAudioPlayer(contentsOfURL: newURL) 
      audioPlayer.numberOfLoops = -1 
      audioPlayer.prepareToPlay() 
      audioPlayer.play() 
     } catch let error as NSError { 
      print(error.description) 
     }   
    } 

    func toggleBackgroundMusic() {   
     if audioPlayer.playing { 
      audioPlayer.pause() 
     } else { 
      audioPlayer.play() 
     }   
    }  
} 
0

SKScene ha una proprietà di nome Audioengine che viene fermato in determinate circostanze. Se stai usando ReplayKit ad esempio, la riproduzione di un filmato gameplay registrato nei RPPreviewController hi-jack l'audio e lo ferma, in modo che quando respingere esso, il Audioengine non è più in funzione.

Ho riscontrato questo problema e l'ho risolto effettuando un semplice controllo e avviando di nuovo audioEngine. Prova questo:

if !self.audioEngine.isRunning { 
    do { 
     try self.audioEngine.start() 
    } catch { 
     //handle error 
    } 
} 
Problemi correlati