From 170c8cb2f38a17abd282ef57db2b71dac3d62d73 Mon Sep 17 00:00:00 2001 From: vspader Date: Sun, 28 Jun 2009 10:51:30 -0700 Subject: [PATCH] Fixed bug where audio device was set after the format. --- Audio/Output/OutputCoreAudio.m | 37 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/Audio/Output/OutputCoreAudio.m b/Audio/Output/OutputCoreAudio.m index 0a4fecd01..5ef37d44c 100644 --- a/Audio/Output/OutputCoreAudio.m +++ b/Audio/Output/OutputCoreAudio.m @@ -53,8 +53,7 @@ static OSStatus Sound_Renderer(void *inRefCon, AudioUnitRenderActionFlags *ioAc ioData->mBuffers[0].mDataByteSize = amountRead; ioData->mBuffers[0].mNumberChannels = output->deviceFormat.mChannelsPerFrame; - - //NSLog(@"Amount read for output: (%i) %i %i/%i", ioData->mNumberBuffers, ioData->mBuffers[0].mNumberChannels, amountRead, amountToRead); + ioData->mNumberBuffers = 1; return err; } @@ -80,6 +79,7 @@ static OSStatus Sound_Renderer(void *inRefCon, AudioUnitRenderActionFlags *ioAc OSStatus err; if (outputDevice == -1) { + NSLog(@"DEVICE IS -1"); UInt32 size = sizeof(AudioDeviceID); err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, @@ -92,10 +92,11 @@ static OSStatus Sound_Renderer(void *inRefCon, AudioUnitRenderActionFlags *ioAc } } + printf("DEVICE: %i\n", deviceID); err = AudioUnitSetProperty(outputUnit, kAudioOutputUnitProperty_CurrentDevice, - kAudioUnitScope_Global, + kAudioUnitScope_Output, 0, &deviceID, sizeof(AudioDeviceID)); @@ -135,6 +136,21 @@ static OSStatus Sound_Renderer(void *inRefCon, AudioUnitRenderActionFlags *ioAc err = AudioUnitInitialize(outputUnit); if (err != noErr) return NO; + + // Setup the output device before mucking with settings + NSDictionary *device = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"outputDevice"]; + if (device) { + BOOL ok = [self setOutputDevice:[[device objectForKey:@"deviceID"] longValue]]; + if (!ok) { + //Ruh roh. + [self setOutputDevice: -1]; + + [[[NSUserDefaultsController sharedUserDefaultsController] defaults] removeObjectForKey:@"outputDevice"]; + } + } + else { + [self setOutputDevice: -1]; + } UInt32 size = sizeof (AudioStreamBasicDescription); Boolean outWritable; @@ -187,21 +203,6 @@ static OSStatus Sound_Renderer(void *inRefCon, AudioUnitRenderActionFlags *ioAc [outputController setFormat:&deviceFormat]; - NSDictionary *device = [[[NSUserDefaultsController sharedUserDefaultsController] defaults] objectForKey:@"outputDevice"]; - - if (device) { - BOOL ok = [self setOutputDevice:[[device objectForKey:@"deviceID"] longValue]]; - if (!ok) { - //Ruh roh. - [self setOutputDevice: -1]; - - [[[NSUserDefaultsController sharedUserDefaultsController] defaults] removeObjectForKey:@"outputDevice"]; - } - } - else { - [self setOutputDevice: -1]; - } - return (err == noErr); }