diff --git a/OSBindings/Mac/Clock Signal/Wrappers/AudioQueue.h b/OSBindings/Mac/Clock Signal/Wrappers/AudioQueue.h index de14ea68b..6fcce99e1 100644 --- a/OSBindings/Mac/Clock Signal/Wrappers/AudioQueue.h +++ b/OSBindings/Mac/Clock Signal/Wrappers/AudioQueue.h @@ -8,12 +8,19 @@ #import +@class AudioQueue; + +@protocol AudioQueueDelegate +- (void)audioQueueDidCompleteBuffer:(nonnull AudioQueue *)audioQueue; +@end + @interface AudioQueue : NSObject -- (instancetype)initWithSamplingRate:(Float64)samplingRate; -- (void)enqueueAudioBuffer:(const int16_t *)buffer numberOfSamples:(size_t)lengthInSamples; +- (nonnull instancetype)initWithSamplingRate:(Float64)samplingRate; +- (void)enqueueAudioBuffer:(nonnull const int16_t *)buffer numberOfSamples:(size_t)lengthInSamples; @property (nonatomic, readonly) Float64 samplingRate; +@property (nonatomic, weak) id delegate; + (Float64)preferredSamplingRate; diff --git a/OSBindings/Mac/Clock Signal/Wrappers/AudioQueue.m b/OSBindings/Mac/Clock Signal/Wrappers/AudioQueue.m index 5f1e65ea4..722a91a66 100644 --- a/OSBindings/Mac/Clock Signal/Wrappers/AudioQueue.m +++ b/OSBindings/Mac/Clock Signal/Wrappers/AudioQueue.m @@ -36,6 +36,8 @@ enum { - (void)audioQueue:(AudioQueueRef)theAudioQueue didCallbackWithBuffer:(AudioQueueBufferRef)buffer { + [self.delegate audioQueueDidCompleteBuffer:self]; + [_writeLock lock]; const unsigned int writeLead = _audioStreamWritePosition - _audioStreamReadPosition; @@ -95,7 +97,7 @@ static void audioOutputCallback( _samplingRate = samplingRate; /* - Describe a mono, 16bit, 44.1Khz audio format + Describe a mono 16bit stream of the requested sampling rate */ AudioStreamBasicDescription outputDescription; @@ -196,6 +198,8 @@ static void audioOutputCallback( return ((_audioStreamWritePosition - _audioStreamReadPosition) < (AudioQueueStreamLength - AudioQueueBufferLength)) ? AudioQueueCanProceed : AudioQueueWait; } +#pragma mark - Sampling Rate getters + + (AudioDeviceID)defaultOutputDevice { AudioObjectPropertyAddress address; @@ -205,7 +209,7 @@ static void audioOutputCallback( AudioDeviceID deviceID; UInt32 size = sizeof(AudioDeviceID); - return AudioHardwareServiceGetPropertyData(kAudioObjectSystemObject, &address, 0, NULL, &size, &deviceID) ? 0 : deviceID; + return AudioObjectGetPropertyData(kAudioObjectSystemObject, &address, sizeof(AudioObjectPropertyAddress), NULL, &size, &deviceID) ? 0 : deviceID; } + (Float64)preferredSamplingRate @@ -217,7 +221,7 @@ static void audioOutputCallback( Float64 samplingRate; UInt32 size = sizeof(Float64); - return AudioHardwareServiceGetPropertyData([self defaultOutputDevice], &address, 0, NULL, &size, &samplingRate) ? 0.0 : samplingRate; + return AudioObjectGetPropertyData([self defaultOutputDevice], &address, sizeof(AudioObjectPropertyAddress), NULL, &size, &samplingRate) ? 0.0 : samplingRate; } @end