簡體   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