Função de retorno de chamada da unidade de saída do gráfico de áudio - não consegue ler dados

Estou tentando capturar o fluxo de dados de entrada na unidade de saída em um gráfico de áudio para que eu possa gravá-lo em um arquivo. Registrei uma função de retorno de chamada de entrada para a unidade de saída (saída padrão) depois de criar o gráfico da seguinte forma:

    AudioComponent comp = AudioComponentFindNext (NULL, &cd);
if (comp == NULL) {
    printf ("can't get output unit");
    exit (-1);
}
CheckError (AudioComponentInstanceNew(comp, &player->outputUnit),
            "Couldn't open component for outputUnit"); // outputUnit is of type AudioUnit

// register render callback
AURenderCallbackStruct input;
input.inputProc = MyRenderProc;
input.inputProcRefCon = player;
CheckError(AudioUnitSetProperty(player->outputUnit,
                                kAudioUnitProperty_SetRenderCallback,
                                kAudioUnitScope_Input,
                                0,
                                &input,
                                sizeof(input)),
           "AudioUnitSetProperty failed");

// initialize unit
CheckError (AudioUnitInitialize(player->outputUnit),"Couldn't initialize output unit");

A função de retorno de chamada é chamada, mas quando tento ler o fluxo de dados de entrada de ioData-> mBuffers [0] .mData, tudo o que recebo são zeros. Aqui está a função de retorno de chamada:

OSStatus MyRenderProc(void *inRefCon, // PLAYER CODE
                        AudioUnitRenderActionFlags *ioActionFlags,
                        const AudioTimeStamp *inTimeStamp,
                        UInt32 inBusNumber,
                        UInt32 inNumberFrames,
                        AudioBufferList * ioData) {

int frame = 0;
Float32 leftFloat = 0;
Float32 rightFloat = 0;
NSNumber *leftNumber;
NSNumber *rightNumber;
for (frame = 0; frame < inNumberFrames; ++frame)
{
    Float32 *data = (Float32*)ioData->mBuffers[0].mData;
    leftFloat = (data)[frame];
    leftNumber = [NSNumber numberWithDouble:leftFloat];
    (data)[frame] = 0;

    // copy to right channel too
    data = (Float32*)ioData->mBuffers[1].mData;
    rightFloat = (data)[frame];
    rightNumber = [NSNumber numberWithDouble:(data)[frame]];
    (data)[frame] = 0;

    [leftData addObject:leftNumber];
    [rightData addObject:rightNumber];

}

return noErr;
}

Além disso, se eu não zerar os dados, ouço ruído durante a reprodução, o que indica que estou interpretando mal a função dos mBuffers. O que eu estou fazendo errado aqui?

questionAnswers(2)

yourAnswerToTheQuestion