Я использую Службы очереди аудио для записи аудио данных PCM в Mac OS X. Он работает, но количество кадров, которые я получаю в моем обратном вызове, варьируется.Почему номер пакета в обратном вызове ввода звуковой очереди меняется?
static void MyAQInputCallback(void *inUserData, AudioQueueRef inQueue, AudioQueueBufferRef inBuffer, const AudioTimeStamp *inStartTime, UInt32 inNumPackets, const AudioStreamPacketDescription *inPacketDesc)
При каждом вызове моего аудио входной очереди я хочу получить 5 мс (240 кадров/inNumPackets
, 48 кГц) звуковых данных.
Это аудиоформат я использую:
AudioStreamBasicDescription recordFormat = {0};
memset(&recordFormat, 0, sizeof(recordFormat));
recordFormat.mFormatID = kAudioFormatLinearPCM;
recordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked;
recordFormat.mBytesPerPacket = 4;
recordFormat.mFramesPerPacket = 1;
recordFormat.mBytesPerFrame = 4;
recordFormat.mChannelsPerFrame = 2;
recordFormat.mBitsPerChannel = 16;
У меня есть два буфер из 960 байт помещён:
for (int i = 0; i < 2; ++i) {
AudioQueueBufferRef buffer;
AudioQueueAllocateBuffer(queue, 960, &buffer);
AudioQueueEnqueueBuffer(queue, buffer, 0, NULL);
}
Моей проблемы: За каждые 204 раз в 240 кадров (inNumPackets
) обратный вызов когда-то вызывается только с 192 кадрами.
Почему это происходит, и есть ли что-то, что я могу сделать, чтобы постоянно получать 240 кадров?