Запись AudioQueue на частоте 8 кГц, без обратного вызова каждые 20 мс - PullRequest
0 голосов
/ 09 мая 2018

iOS 10+ iPhone: 5 с и 6 Xcode: 9 +

Я записываю аудио, используя aLaw кодек с частотой дискретизации 8 кГц с размером выборки 8 бит . Я создаю AudioQueue, как это:

// create the queue
XThrowIfError(AudioQueueNewInput(
                                 &mRecordFormat,
                                 MyInputBufferHandler,
                                 this /* userData */,
                                 NULL /* run loop */,
                                 kCFRunLoopCommonModes /* run loop mode */,
                                 0 /* flags */,
                                 &mQueue), "AudioQueueNewInput failed");

MyInputBufferHandler - это обратный вызов, который вызывается при каждом заполнении буфера (160 байт каждые 20 мс). Поэтому я ожидаю, что обратный вызов называется каждые 20 мс . Но при тестировании каждые 128 мс обратный вызов MyInputBufferHandler вызывается 6 раз в пакете. Пока я ожидаю, что обратный вызов будет вызываться каждые 20 мс. Моя конфигурация записи:

mRecordFormat.mSampleRate = 8000.0; // 8 KHz
mRecordFormat.mChannelsPerFrame = 1;
mRecordFormat.mBytesPerFrame = 1;
mRecordFormat.mBitsPerChannel = 8;
mRecordFormat.mBytesPerPacket = 1;
mRecordFormat.mFramesPerPacket = 1;

Может кто-нибудь помочь мне? Почему MyInputBufferHandler вызывается каждые 128 мс, а не 20 мс? Частота дискретизации 8 кГц с буфером записи 160 байт означает, что каждые 20 мс вызывается MyInputBufferHandler, а не каждые 128 мс!

1 Ответ

0 голосов
/ 11 мая 2018

Кажется, что AudioQueue находится поверх AudioUnit и почему-то не может контролировать размер внутреннего буфера, независимо от того, какой размер буфера вы установили на уровне AudioQueue. Поэтому по умолчанию внутренний буфер установлен как минимум на 1024 байта. Так что, если вам нужен обратный вызов после 160 байтов записанных данных, он не будет.

Так что для тех, кто сталкивается с той же проблемой, вам нужно использовать AudioUnit.

Ссылки похожей ситуации: https://stackoverflow.com/a/4597409/1012775 https://stackoverflow.com/a/6687050/1012775

...