Ios 音频猝灭器导致Denit/Segue上崩溃:';所需条件为false:outputNode';
每当对象被取消初始化时(例如,当执行回另一个ViewController的展开顺序时),以下代码会导致崩溃,并出现以下错误: 必需条件为false:[AVAudioEngineGraph.mm:4474:GetDefaultMusicDevice:(outputNode)] 由于未捕获异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“必需条件为false:outputNode”Ios 音频猝灭器导致Denit/Segue上崩溃:';所需条件为false:outputNode';,ios,swift,avfoundation,core-audio,avaudioengine,Ios,Swift,Avfoundation,Core Audio,Avaudioengine,每当对象被取消初始化时(例如,当执行回另一个ViewController的展开顺序时),以下代码会导致崩溃,并出现以下错误: 必需条件为false:[AVAudioEngineGraph.mm:4474:GetDefaultMusicDevice:(outputNode)] 由于未捕获异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“必需条件为false:outputNode” AVAudioSequencer是问题的根源,因为如果删除此项,错误将停止 如何
AVAudioSequencer
是问题的根源,因为如果删除此项,错误将停止
如何避免这次事故
class TestAudioClass {
private var audioEngine: AVAudioEngine
private var sampler: AVAudioUnitSampler
private var sequencer: AVAudioSequencer
init() {
self.audioEngine = AVAudioEngine()
self.sampler = AVAudioUnitSampler()
audioEngine.attach(sampler)
audioEngine.connect(sampler, to: audioEngine.mainMixerNode, format: nil)
self.sequencer = AVAudioSequencer(audioEngine: audioEngine)
if let fileURL = Bundle.main.url(forResource: "TestMusic", withExtension: "mid") {
do {
try sequencer.load(from: fileURL, options: AVMusicSequenceLoadOptions())
} catch {
print("Error loading sequencer: \(error.localizedDescription)")
}
}
sequencer.prepareToPlay()
}
}
此崩溃可能令人困惑,如果sequencer的内容尚未加载,也可能不会向控制台输出任何错误消息。太没用了
AVAudioSequencer
确实是问题的原因。若要修复它,请将sequencer设置为隐式展开可选(即,在其类型中添加!
),并在对象的其余部分取消初始化之前,添加显式指令,以在取消初始化期间停止并删除它
固定代码如下(特别注意deinit
方法):
希望这有帮助 此崩溃可能令人困惑,如果sequencer的内容尚未加载,也可能不会向控制台输出任何错误消息。太没用了
AVAudioSequencer
确实是问题的原因。若要修复它,请将sequencer设置为隐式展开可选(即,在其类型中添加!
),并在对象的其余部分取消初始化之前,添加显式指令,以在取消初始化期间停止并删除它
固定代码如下(特别注意deinit
方法):
希望这有帮助
class TestAudioClass {
private var audioEngine: AVAudioEngine
private var sampler: AVAudioUnitSampler
private var sequencer: AVAudioSequencer!
init() {
self.audioEngine = AVAudioEngine()
self.sampler = AVAudioUnitSampler()
audioEngine.attach(sampler)
audioEngine.connect(sampler, to: audioEngine.mainMixerNode, format: nil)
self.sequencer = AVAudioSequencer(audioEngine: audioEngine)
if let fileURL = Bundle.main.url(forResource: "TestMusic", withExtension: "mid") {
do {
try sequencer.load(from: fileURL, options: AVMusicSequenceLoadOptions())
} catch {
print("Error loading sequencer: \(error.localizedDescription)")
}
}
sequencer.prepareToPlay()
}
deinit {
sequencer.stop()
sequencer = nil
}
}