20 #ifndef __TiPhoneCoreAudioRenderer__
21 #define __TiPhoneCoreAudioRenderer__
23 #include <AudioToolbox/AudioConverter.h>
24 #include <AudioToolbox/AudioServices.h>
25 #include <AudioUnit/AudioUnit.h>
27 #define MAX_CHANNELS 256
31 typedef void (*AudioCallback) (
int frames,
float** inputs,
float** outputs,
void* arg);
39 AudioCallback fAudioCallback;
45 AudioBufferList* fCAInputData;
47 float* fInChannel[MAX_CHANNELS];
48 float* fOutChannel[MAX_CHANNELS];
50 static OSStatus Render(
void *inRefCon,
51 AudioUnitRenderActionFlags *ioActionFlags,
52 const AudioTimeStamp *inTimeStamp,
54 UInt32 inNumberFrames,
55 AudioBufferList *ioData);
57 static void InterruptionListener(
void *inClientData, UInt32 inInterruption);
62 :fAudioCallback(NULL), fCallbackArg(NULL), fDevNumInChans(input), fDevNumOutChans(output), fCAInputData(NULL)
64 memset(fInChannel, 0,
sizeof(
float*) * MAX_CHANNELS);
65 memset(fOutChannel, 0,
sizeof(
float*) * MAX_CHANNELS);
67 for (
int i = 0; i < fDevNumInChans; i++) {
68 fInChannel[i] =
new float[8192];
71 for (
int i = 0; i < fDevNumOutChans; i++) {
72 fOutChannel[i] =
new float[8192];
78 for (
int i = 0; i < fDevNumInChans; i++) {
79 delete[] fInChannel[i];
82 for (
int i = 0; i < fDevNumOutChans; i++) {
83 delete[] fOutChannel[i];
87 for (
int i = 0; i < fDevNumInChans; i++) {
88 free(fCAInputData->mBuffers[i].mData);
94 int Open(
int bufferSize,
int sampleRate);
100 void SetAudioCallback(AudioCallback callback,
void* arg)
102 fAudioCallback = callback;
106 void PerformAudioCallback(
int frames)
108 if (fAudioCallback) {
109 fAudioCallback(frames, fInChannel, fOutChannel, fCallbackArg);