iOS 9.1 AudioQueueAllocateBuffer 请求固定缓冲区大小,它 returns 较小的
iOS 9.1 AudioQueueAllocateBuffer requesting a fix buffer size, it returns a smaller one
在新的iOS 9.1 中设置AudioSession 请求固定缓冲区大小时,OS returns 一个更小的缓冲区。为什么会这样??在 <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" 中,我收到的缓冲区小于请求的缓冲区。
知道为什么会这样吗?
此音频队列分配调用指定的缓冲区大小是可以 returned 的最大值。 iOS 设备硬件可以免费使用 return 更少的数据。您的应用程序必须适应这个可能更小的大小,如果您需要固定长度的数据块,and/or 可能必须连接多个 returned 缓冲区(例如在无锁循环 FIFO 中)。
在新的iOS 9.1 中设置AudioSession 请求固定缓冲区大小时,OS returns 一个更小的缓冲区。为什么会这样??在 <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" 中,我收到的缓冲区小于请求的缓冲区。
知道为什么会这样吗?
此音频队列分配调用指定的缓冲区大小是可以 returned 的最大值。 iOS 设备硬件可以免费使用 return 更少的数据。您的应用程序必须适应这个可能更小的大小,如果您需要固定长度的数据块,and/or 可能必须连接多个 returned 缓冲区(例如在无锁循环 FIFO 中)。