2016-02-26 5 views
11

मैं अपने गेम में पृष्ठभूमि संगीत चलाने के लिए SKAudioNode() का उपयोग कर रहा हूं। मेरे पास एक प्ले/पॉज़ फ़ंक्शन है और जब तक मैं अपने हेडफ़ोन प्लग नहीं करता तब तक सब कुछ ठीक काम कर रहा है। वहाँ सब पर कोई आवाज़ है और जब मैं रोकें/चलाएं फ़ंक्शन को कॉल मैं यह त्रुटिSKAudioNode() प्लग इन/आउट हेडफ़ोन प्लग इन करते समय

AVAudioPlayerNode.mm:333 मिलती है: शुरू करें: आवश्यक शर्त गलत है: _engine-> IsRunning() com.apple.coreaudio .avfaudio ', कारण:' आवश्यक शर्त गलत है: _engine-> IsRunning()

क्या कोई जानता है इसका क्या अर्थ है?

कोड:

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

संभावित डुप्लिकेट [AVAudioEngine क्रैश में या बाहर प्लग हेडफोन] (http://stackoverflow.com/questions/26728250/avaudioengine-crashes-when-plug-headphones-in-or-out) –

+0

AVAudioEngineConfigurationChangeNotification मुझे कोई मदद नहीं थी :(मुझे यह प्रश्न – Cherrypig

+0

से पहले मिला है। क्या आप सिम्युलेटर पर चल रहे हैं? मुझे हाल ही में इसी तरह की समस्या में चलने की याद आ रही है .. –

उत्तर

2

मैं सक्षम यह ठीक नहीं था, लेकिन AVAudioPlayer() का उपयोग करके मैं तो एक अच्छी युक्ति पाया। मुझे समर्थन देने के लिए सभी का धन्यवाद!

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 एक संपत्ति audioEngine कि कुछ परिस्थितियों में बंद कर दिया गया है नामित किया है। you're उदाहरण के लिए ReplayKit का उपयोग कर रहे हैं, तो ऑडियो RPPreviewController उच्च जैक में एक रिकॉर्ड गेमप्ले फिल्म खेल रहे हैं और यह बंद हो जाता है, इसलिए जब आप इसे खारिज, audioEngine अब नहीं चल रहा है।

मुझे यह समस्या थी और इसे सरल जांच करके ऑडियोइंजिन शुरू करके हल किया गया। इस प्रयास करें:

if !self.audioEngine.isRunning { 
    do { 
     try self.audioEngine.start() 
    } catch { 
     //handle error 
    } 
} 
की
संबंधित मुद्दे