From 6419b0e619b0aa84915ceaeeaff29f8f5b2996a3 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 22 Mar 2018 09:48:19 -0400 Subject: [PATCH] Reintroduces `CSMachineDelegate`, allowing the Mac port to switch output audio rate dynamically. --- OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift | 6 ++++++ OSBindings/Mac/Clock Signal/Machine/CSMachine.h | 4 ++++ OSBindings/Mac/Clock Signal/Machine/CSMachine.mm | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift index 0b1235eee..85c5fbb7f 100644 --- a/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift +++ b/OSBindings/Mac/Clock Signal/Documents/MachineDocument.swift @@ -12,6 +12,7 @@ import AudioToolbox class MachineDocument: NSDocument, NSWindowDelegate, + CSMachineDelegate, CSOpenGLViewDelegate, CSOpenGLViewResponderDelegate, CSBestEffortUpdaterDelegate, @@ -55,6 +56,7 @@ class MachineDocument: self.machine.setView(self.openGLView, aspectRatio: Float(displayAspectRatio.width / displayAspectRatio.height)) }) + self.machine.delegate = self self.bestEffortUpdater = CSBestEffortUpdater() // callbacks from the OpenGL may come on a different thread, immediately following the .delegate set; @@ -72,6 +74,10 @@ class MachineDocument: self.bestEffortUpdater!.delegate = self } + func machineSpeakerDidChangeInputClock(_ machine: CSMachine!) { + setupClockRate() + } + fileprivate func setupClockRate() { // establish and provide the audio queue, taking advice as to an appropriate sampling rate let maximumSamplingRate = CSAudioQueue.preferredSamplingRate() diff --git a/OSBindings/Mac/Clock Signal/Machine/CSMachine.h b/OSBindings/Mac/Clock Signal/Machine/CSMachine.h index 72f2edf62..4f1ea43c9 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSMachine.h +++ b/OSBindings/Mac/Clock Signal/Machine/CSMachine.h @@ -14,6 +14,9 @@ #import "CSStaticAnalyser.h" @class CSMachine; +@protocol CSMachineDelegate +- (void)machineSpeakerDidChangeInputClock:(CSMachine *)machine; +@end // Deliberately low; to ensure CSMachine has been declared as an @class already. #import "CSAtari2600.h" @@ -42,6 +45,7 @@ @property (nonatomic, strong) CSAudioQueue *audioQueue; @property (nonatomic, readonly) CSOpenGLView *view; +@property (nonatomic, weak) id delegate; @property (nonatomic, readonly) NSString *userDefaultsPrefix; diff --git a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm index 0b5be154e..5009aabd4 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm +++ b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm @@ -78,7 +78,7 @@ struct SpeakerDelegate: public Outputs::Speaker::Speaker::Delegate, public LockP } - (void)speakerDidChangeInputClock:(Outputs::Speaker::Speaker *)speaker { - // TODO: consider changing output audio queue rate. + [self.delegate machineSpeakerDidChangeInputClock:self]; } - (void)dealloc {