Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 音频猝灭器导致Denit/Segue上崩溃:';所需条件为false:outputNode';_Ios_Swift_Avfoundation_Core Audio_Avaudioengine - Fatal编程技术网

Ios 音频猝灭器导致Denit/Segue上崩溃:';所需条件为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是问题的根源,因为如果删除此项,错误将停止 如何

每当对象被取消初始化时(例如,当执行回另一个ViewController的展开顺序时),以下代码会导致崩溃,并出现以下错误:

必需条件为false:[AVAudioEngineGraph.mm:4474:GetDefaultMusicDevice:(outputNode)]

由于未捕获异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“必需条件为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()
    }
}

此崩溃可能令人困惑,如果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
    }
}