gpt4 book ai didi

ios - AVAudioSequencer 导致 Deinit/Segue 崩溃 : 'required condition is false: outputNode'

转载 作者:行者123 更新时间:2023-11-29 05:27:18 24 4
gpt4 key购买 nike

只要对象被取消初始化(例如,执行展开转场回到另一个 ViewController 时),以下代码就会导致崩溃并出现以下错误:

required condition is false: [AVAudioEngineGraph.mm:4474:GetDefaultMusicDevice: (outputNode)]

Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: outputNode'

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()
}
}

最佳答案

此崩溃可能会令人困惑,并且如果尚未加载定序器的内容,也可能不会向控制台输出任何错误消息。非常没有帮助!

AVAudioSequencer 确实是问题的原因。要修复此问题,请使定序器成为隐式解包可选(即向其类型添加 !),并添加显式指令以在 deinit 期间、之前 对象的其余部分被取消初始化。

固定代码如下(特别注意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
}
}

希望这有帮助!

关于ios - AVAudioSequencer 导致 Deinit/Segue 崩溃 : 'required condition is false: outputNode' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58036260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com