繁体   English   中英

iOS 9.1 AudioQueueAllocateBuffer请求修复缓冲区大小,它返回一个较小的

[英]iOS 9.1 AudioQueueAllocateBuffer requesting a fix buffer size, it returns a smaller one

在新的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”中,我收到的缓冲区小于请求的缓冲区。

任何线索为什么会发生?

此音频队列分配调用指定的缓冲区大小是可以返回的最大值。 iOS设备硬件可以自由返回更少的数据。 如果您需要固定长度的数据块,则您的应用程序必须容纳这个可能较小的大小,并且/或者可能必须串联多个返回的缓冲区(例如,在无锁循环FIFO中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM