-(OSStatus)start{ audioSourceBuffer.currentReadBuffer = audioSourceBuffer.buffer1; audioSourceBuffer.currentWriteBuffer = audioSourceBuffer.buffer1; audioSourceBuffer.readPosition = 0; audioSourceBuffer.writePosition = 0; audioSourceBuffer.length = RemoteIOPlayerBufferSize; audioSourceBuffer.lastBufferRead = audioSourceBuffer.buffer2; [source fillBuffer: audioSourceBuffer.currentWriteBuffer numFrames:audioSourceBuffer.length]; [NSThread detachNewThreadSelector:@selector(fillBufferIfPossible) toTarget:self withObject:nil]; NSLog(@"start called"); OSStatus status = AudioOutputUnitStart(audioUnit); NSLog(@"status is: %u", status); return status; } -(void)fillBufferIfPossible{ [[NSThread currentThread] setThreadPriority:1]; while (YES) { if (audioSourceBuffer.lastBufferRead == audioSourceBuffer.currentWriteBuffer) { audioSourceBuffer.currentWriteBuffer = audioSourceBuffer.currentWriteBuffer == audioSourceBuffer.buffer1? audioSourceBuffer.buffer2 : audioSourceBuffer.buffer1; [source fillBuffer: audioSourceBuffer.currentWriteBuffer numFrames:audioSourceBuffer.length]; } [NSThread sleepForTimeInterval:0.001]; } }