Задержка при использовании AudioQueueStart()
-
21-08-2019 - |
Вопрос
Я использую службы Audio Queue для записи звука на iPhone.Однако при запуске записи у меня возникла проблема с задержкой.Вот код (приблизительно):
OSStatus status = AudioQueueNewInput(
&recordState.dataFormat, // 1
AudioInputCallback, // 2
&recordState, // 3
CFRunLoopGetCurrent(), // 4
kCFRunLoopCommonModes, // 5
0, // 6
&recordState.queue); // 7
// create buffers
for(int i = 0; i < NUM_BUFFERS; i++)
{
if (status == 0)
status = AudioQueueAllocateBuffer(recordState.queue, BUFFER_SIZE, &recordState.buffers[i]);
}
DebugLog(@"Starting recording\n");
OSStatus status = 0;
for(int i = 0; i < NUM_BUFFERS; i++)
{
if (status == 0)
status = AudioQueueEnqueueBuffer(recordState.queue, recordState.buffers[i], 0, NULL);
}
DebugLog(@"Queued buffers\n");
if (status == 0)
{
// start audio queue
status = AudioQueueStart(recordState.queue, NULL);
}
DebugLog(@"Started recording, status = %d\n", status);
Вывод журнала выглядит следующим образом:
2009-06-30 19:18:59.631 app[24887:20b] Starting recording
2009-06-30 19:18:59.828 app[24887:20b] Queued buffers
2009-06-30 19:19:00.849 app[24887:20b] Started recording, status = 0
Обратите внимание на задержку в 1 секунду между сообщением «Буферы в очереди» и вторым сообщением «Начало записи».Есть идеи, как от этого избавиться, кроме начала записи сразу после запуска приложения?
Кстати, 1-секундная секунда довольно постоянна в симуляторе и устройстве и, похоже, не зависит от количества или размера буферов.Использование старого доброго моно 16-битного PCM.
Не связан с StackOverflow