AVAudioEngine未在SpriteKit中发布通知

时间:2016-11-22 09:50:50

标签: ios notifications avaudioengine

我在SpriteKit游戏中遇到了AVAudioEngine的问题 - 当插入/拔出耳机时,引擎停止,当下一个声音播放应用程序崩溃时。这是一个已知的错误(或功能?) - 建议修复它 - 使用通知中心,AVAudioEngine应该在更改状态时发布通知。我已经制作了这段代码:

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 有关如何解决它的任何建议?

1 个答案:

答案 0 :(得分:0)

通知的原始Cocoa名称为 public class CompTag : INotifyPropertyChanged { private int _count; private bool _isZero; public string Name { get; set; } public bool IsZero { get { return _isZero; } set { if (_isZero != value) { _isZero = value; OnPropertyChanged("IsZero"); } } } public int Count { get { return _count; } set { if (_count != value) { _count = value; OnPropertyChanged("Count"); } } } ,但Swift常量称为AVAudioEngineConfigurationChangeNotification。因此,您可以使用以下任一方式处理通知:

AVAudioEngineConfigurationChange

let notificationName = Notification.Name("AVAudioEngineConfigurationChangeNotification")

插入/拔出耳机时应调用您的选择器。

这似乎只是SpriteKit音频片状的部分解决方案。我在通知处理程序中尝试了以下内容:

let notificationName = Notification.Name.AVAudioEngineConfigurationChange

我能够停止崩溃,但是在插入/拔出事件之后我的try? self.audioEngine.start() 不会发出任何声音,直到重新启动该进程。