Áudio principal do iOS: conversão entre kAudioFormatFlagsCanonical e kAudioFormatFlagsAudioUnitCanonical

Eu preciso converter entre este formato:

        format.mSampleRate  = 44100.0; 
        format.mFormatID = kAudioFormatLinearPCM;
        format.mFormatFlags = kAudioFormatFlagsCanonical | kLinearPCMFormatFlagIsNonInterleaved;
        format.mBytesPerPacket = sizeof(AudioUnitSampleType);
        format.mFramesPerPacket = 1;
        format.mBytesPerFrame = sizeof(AudioUnitSampleType);
        format.mChannelsPerFrame = 2 ;
        format.mBitsPerChannel = sizeof(AudioUnitSampleType)*8;

e este formato

format.mSampleRate  = 44100.0; 
format.mFormatID = kAudioFormatLinearPCM;
format.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
format.mBytesPerPacket = sizeof(AudioUnitSampleType);
format.mFramesPerPacket = 1;
format.mBytesPerFrame = sizeof(AudioUnitSampleType);
format.mChannelsPerFrame = 2; 
format.mBitsPerChannel = sizeof(AudioUnitSampleType)*8;

dentro dos limites de um callback de renderização de áudio onde existe o seguinte código e o buffer [] está no 2º formato e o array [] requer o primeiro formato.

for (k = 0; k < channels; k++){
    buffer = (AudioUnitSampleType *) ioData->mBuffers[k].mData;
    for(j=0; j < samples; j++){
        array[j] = buffer[j];
    }
}

Eu sei que você pode usar o conversor da Apple, mas não consigo usar a unidade de áudio do Apple Converter na minha situação (há uma razão).

Basicamente, a única diferença entre os dois formatos é o seguinte sinalizador para format.mFormatFlags (kAudioUnitSampleFractionBits << kLinearPCMFormatFlagsSampleFractionShift).

Como posso converter o buffer [] (contendo dados no segundo formato) para array [] (contendo dados no primeiro formato) e vice-versa?

Obrigado.

questionAnswers(2)

yourAnswerToTheQuestion