Как мне прочитать образцы из AudioBufferList?

Если я открою аудиофайл с расширенными сервисами аудиофайлов, используя следующий формат данных клиента ...

AudioStreamBasicDescription audioFormat;
memset(&audioFormat, 0, sizeof(audioFormat));
audioFormat.mSampleRate = 44100.0;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsBigEndian | 
                           kAudioFormatFlagIsSignedInteger | 
                           kAudioFormatFlagIsPacked;
audioFormat.mBytesPerPacket = 4;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 2;
audioFormat.mBytesPerFrame = 4;
audioFormat.mBitsPerChannel = 16;

И настрою AudioBufferList вот так ....

AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0].mDataByteSize = bufferSize;
bufferList.mBuffers[0].mNumberChannels = audioFormat.mChannelsPerFrame;
bufferList.mBuffers[0].mData = buffer; //malloc(sizeof(UInt8) * 1024 * audioFormat.mBytesPerPacket)

Как же тогда данные устроены в mData? Если я перебираю данные так

for (int i = 0; i < frameCount; i++) {
        UInt8 somePieceOfAudioData = buffer[i];
}

, тогда что такое somePieceOfAudioData.

Это семпл или кадр (левый и правый каналы вместе)? Если это сэмпл, то для какого канала это сэмпл? Если, например, это сэмпл из правого канала, будет ли буфер [i + 1] сэмплом для левого канала?

Есть идеи, ссылки? Спасибо!

5
задан Adam Ritenauer 13 January 2012 в 20:59
поделиться