Á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.