Si abro un archivo de audio con los servicios de archivos de audio extendidos, utilizando el formato de datos de cliente siguiente ...¿Cómo leo samples de una 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;
y configurar un AudioBufferList como tal ....
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)
¿Cómo, entonces , ¿los datos están organizados en mData? Si iterar a través de los datos así como
for (int i = 0; i < frameCount; i++) {
UInt8 somePieceOfAudioData = buffer[i];
}
entonces ¿qué es somePieceOfAudioData.
¿Es una muestra o un marco (canales izquierdo y derecho)? Si se trata de una muestra, ¿para qué canal es una muestra? Si, por ejemplo, es una muestra del canal derecho, ¿el búfer [i + 1] será una muestra para el canal izquierdo?
¿Alguna idea, enlaces? ¡Gracias! Se espera
"La memoria intermedia puede representar dos tipos diferentes de audio monofónico ... Un canal de noninterleaved única,, de sonido [o] intercalado de audio con cualquier cantidad de canales, según lo designado por el campo mNumberChannels ". La pregunta ahora, supongo, es ¿cómo sé cuál es cuál, y debería estar usando más de un buffer de audio? p.ej. bufferList.mNumberBuffers = audioFormat.mChannelsPerFrame –