audioBuffer.mDataByteSize сообщает вам размер буфера.Ты это знал?Только если вы не могли, вы не могли посмотреть на объявление struct AudioBuffer.Вы всегда должны смотреть как на заголовочные файлы, так и на документы.
Чтобы mDataByteSize имел смысл, вы должны знать формат данных.Количество выходных значений mDataByteSize / sizeof (outputType).Тем не менее, вы, кажется, смущены форматом - вы должны были указать его где-то.Прежде всего вы рассматриваете его как 16-битное целое число со знаком
SInt16 *frames = audioBuffer.mData
, затем вы рассматриваете его как 32-битное число с плавающей запятой
Float32 currentFrame = frames[i] / 32768.0f
междувы предполагаете, что существует 24000 значений, конечно, это приведет к сбою, если нет точно 24000 16-битных значений.Кроме того, вы называете данные «кадрами», но на самом деле вы имеете в виду образцы.Каждое значение, которое вы называете currentFrame, представляет собой один образец аудио.«Кадр» обычно относится к блоку сэмплов, например .mData
Итак, предполагая, что формат данных 32-битный Float (и, пожалуйста, обратите внимание, я понятия не имею, если это так, это может быть 8-битный int или32 бита Исправлено для всех, что я знаю)
for( int y=0; y<audioBufferList.mNumberBuffers; y++ )
{
AudioBuffer audioBuffer = audioBufferList.mBuffers[y];
int bufferSize = audioBuffer.mDataByteSize / sizeof(Float32);
Float32 *frame = audioBuffer.mData;
for( int i=0; i<bufferSize; i++ ) {
Float32 currentSample = frame[i];
}
}
Обратите внимание, sizeof (Float32) всегда равен 4, но я оставил это, чтобы было ясно.