菜鸟教程小白 发表于 2022-12-13 07:58:21

iphone - iOS,音频队列 : Buffer size is not contant


                                            <p><p>我在我的应用程序中使用<strong>音频队列服务</strong>。在分配缓冲区时,我将缓冲区大小设置为 30000 个样本:</p>

<pre><code>AudioQueueAllocateBuffer(mQueue, 30000, &amp;mBuffers);
</code></pre>

<p>但是回调的后续调用是使用以下<em>inNumberPacketDescriptions</em>进行的:</p>

<pre><code>30000
30000
30000
26928
30000
30000
</code></pre>

<p>它们并不总是等于 30000。<strong>为什么?</strong></p>

<p>记录格式配置(使用<em>CAStreamBasicDescription</em>):</p>

<pre><code>mRecordFormat.mSampleRate = kSampleRate;   
mRecordFormat.mChannelsPerFrame = 1;
mRecordFormat.mFormatID = kAudioFormatLinearPCM;
mRecordFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
mRecordFormat.mBitsPerChannel = 16;
mRecordFormat.mBytesPerPacket = mRecordFormat.mBytesPerFrame = (mRecordFormat.mBitsPerChannel / 8) * mRecordFormat.mChannelsPerFrame;
mRecordFormat.mFramesPerPacket = 1;
</code></pre>

<p><strong>3</strong> 个缓冲区被使用。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>编辑:我看到 iOS 在出现非二次方音频缓冲区时会自发地改变缓冲区大小。 (<a href="https://stackoverflow.com/questions/6633412/ios-bug-in-the-simulator-using-audiounitrender" rel="noreferrer noopener nofollow">Another SO question</a> 引用此)无论如何,</p>

<p>30000 是 </p>

<p>(a) 巨大的缓冲区大小,以及 </p>

<p>(b) 用于缓冲区的奇怪数字。通常它们是 2 的幂 - 即 <code>*=2</code> 来自 64,即 64、128、256、512、1024、2048、4096。我从未见过高于 4096 的,而且我做很多音频工作。 </p>

<p>如果您有特殊原因需要使用异常大的缓冲区,则可以使用 <code>nextPowerOfTwo</code> 便利函数或自己硬编码数学。</p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - iOS,音频队列 : Buffer size is not contant,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/6318354/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/6318354/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - iOS,音频队列 : Buffer size is not contant