iOS 9.1 AudioQueueAllocateBuffer, запрашивающий фиксированный размер буфера, возвращает меньший
В новой iOS 9.1, когда устанавливает AudioSession, запрашивающий фиксированный размер буфера, ОС возвращает меньший буфер. Почему это происходит?? В ранних версиях <9.1 это работало как шарм
// Create a new audio input queue
OSStatus result = AudioQueueNewInput(&mAudioFormat,
IOSAudioRecorder::RecorderCallback,
this, // userData
nullptr, // run loop
kCFRunLoopCommonModes, // run loop mode
0, // flags
&mAudioQueue);
if (result != 0)
{
Logger::Error(this, "Failed to create new audio input queue, result: ", result);
mAudioQueue = nullptr;
}
else
{
// Allocate memory for the buffers
for (unsigned int i = 0; i < mNumBuffers; i++)
{
AudioQueueAllocateBuffer(mAudioQueue, mBufferFrames * sizeof(short), &mInputBuffer[i]);
mOutputBuffer[i] = new short[mBufferFrames];
}
}
И в "RecorderCallback" я получаю буферы меньше, чем запрошено.
Любая подсказка, почему это происходит?
1 ответ
Решение
Размер буфера, указанный этим вызовом выделения аудио-очереди, является максимальным из того, что может быть возвращено. Аппаратное обеспечение устройства iOS может возвращать меньше данных. Ваше приложение должно учитывать этот потенциально меньший размер и / или, возможно, придется объединить несколько возвращенных буферов (например, в циклическом FIFO без блокировки), если вам нужен фрагмент данных фиксированной длины.