2016-11-22 8 views
0

У меня проблема с AVAudioEngine в игре SpriteKit - при подключении/отсоединении наушников двигатель останавливается, а при следующем звуковом воспроизведении приложение падает. Это известная ошибка (или функция?) - с предложением исправить ее - чтобы использовать центр уведомлений, 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) 

Мой селектор вызывается. Однако, когда я подключаю/отсоединяю наушники - ничего не происходит. Swift 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 не будет делать какой-либо звук после отсоединять/события, пока этот процесс не был перезапущен.