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?