From 91e7400bbb1b781e8a5d09d0f304c86831a3fdd7 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 18 Feb 2020 22:33:16 -0500 Subject: [PATCH] Avoids double-setting of the OpenGL view. --- .../Clock Signal/Documents/MachineDocument.swift | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index 327d447a8..e517113e5 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -174,7 +174,7 @@ class MachineDocument: // MARK: - Connections Between Machine and the Outside World private func setupMachineOutput() { - if let machine = self.machine, let openGLView = self.openGLView { + if let machine = self.machine, let openGLView = self.openGLView, machine.view != openGLView { // Establish the output aspect ratio and audio. let aspectRatio = self.aspectRatio() machine.setView(openGLView, aspectRatio: Float(aspectRatio.width / aspectRatio.height)) @@ -227,13 +227,17 @@ class MachineDocument: // // TODO: this needs to be threadsafe. FIX! let maximumSamplingRate = CSAudioQueue.preferredSamplingRate() - let selectedSamplingRate = self.machine.idealSamplingRate(from: NSRange(location: 0, length: NSInteger(maximumSamplingRate))) + let selectedSamplingRate = Float64(self.machine.idealSamplingRate(from: NSRange(location: 0, length: NSInteger(maximumSamplingRate)))) let isStereo = self.machine.isStereo() if selectedSamplingRate > 0 { - self.audioQueue = CSAudioQueue(samplingRate: Float64(selectedSamplingRate), isStereo:isStereo) - self.audioQueue.delegate = self - self.machine.audioQueue = self.audioQueue - self.machine.setAudioSamplingRate(selectedSamplingRate, bufferSize:audioQueue.preferredBufferSize, stereo:isStereo) + // [Re]create the audio queue only if necessary. + if self.audioQueue == nil || self.audioQueue.samplingRate != selectedSamplingRate { + self.machine.audioQueue = nil + self.audioQueue = CSAudioQueue(samplingRate: Float64(selectedSamplingRate), isStereo:isStereo) + self.audioQueue.delegate = self + self.machine.audioQueue = self.audioQueue + self.machine.setAudioSamplingRate(Float(selectedSamplingRate), bufferSize:audioQueue.preferredBufferSize, stereo:isStereo) + } } }