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);