2016-11-22 74 views
0

我SpriteKit遊戲中有一個問題,AVAudioEngine - 插入耳機/拔出時,發動機停止並在接下來的聲音播放應用程序崩潰。這是一個已知的bug(或功能?) - 某項建議修復它 - 使用通知中心,AVAudioEngine應該張貼通知時,它正在改變它的狀態。當我這樣做AVAudioEngine不張貼通知,SpriteKit

let notificationName = Notification.Name("AVAudioEngineConfigurationChange")  

NotificationCenter.default.addObserver(self, selector: #selector(self.restartEngine(notification:)), name: notificationName, object: nil) 

NotificationCenter.default.post(name: notificationName, object: nil) 

我的選擇被稱爲我有此代碼。但是,當我插入/拔下耳機 - 沒有任何反應。斯威夫特3,Xcode中8,iOS的9.3 關於如何解決它有什麼建議?

回答

0

通知的原始可可名稱是AVAudioEngineConfigurationChangeNotification,但Swift常數被稱爲AVAudioEngineConfigurationChange。因此,您可以通過使用處理通知:插頭插入/拔出耳機時

let notificationName = Notification.Name("AVAudioEngineConfigurationChangeNotification") 

let notificationName = Notification.Name.AVAudioEngineConfigurationChange 

你的選擇應該再被調用。

這似乎僅是用於SpriteKit音頻片狀的部分解決方案。我嘗試了通知處理程序中執行以下操作:

try? self.audioEngine.start() 

我能停止崩潰,但我SKAudioNode不會使插/拔事件之後的任何聲音,直到進程重新啓動。