Se apro un file audio con i servizi di file audio estesi, utilizzando il seguente formato di dati cliente ...Come posso leggere i campioni da una lista AudioBuffer?
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;
e configurare un AudioBufferList in questo modo ....
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)
Come, allora , i dati sono disposti in mData? Se io scorrere i dati in questo modo
for (int i = 0; i < frameCount; i++) {
UInt8 somePieceOfAudioData = buffer[i];
}
allora che cosa è somePieceOfAudioData.
È un campione o un frame (canali sinistro e destro insieme)? Se è un campione, per quale canale è un campione? Se per esempio è un campione dal canale destro, buffer [i + 1] sarà un campione per il canale sinistro?
Qualche idea, link? Grazie!
"Il buffer può rappresentare due diversi tipi di audio ... Un singolo, monofonico, canale noninterleaved audio [o] Interleaved audio con qualsiasi numero di canali, come indicato dal campo mNumberChannels ". La domanda ora, immagino, è come faccio a sapere qual è, e dovrei usare più di un buffer audio? per esempio. bufferList.mNumberBuffers = audioFormat.mChannelsPerFrame –