我在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 有关如何解决它的任何建议?
答案 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()
不会发出任何声音,直到重新启动该进程。