ios - 为特定的 ASBD 缓冲区获取正确的数字数据类型转换
<p><p>我有一个 <code>AudioBuffer</code>,它的 <code>void *mData</code> 充满了使用 Apple 的 CoreAudio Audio Unit API 新鲜渲染的音频样本,但我在获取样本时遇到了问题以正确的格式。该缓冲区的ASBD如下:</p>
<pre><code>Float64 mSampleRate 44100
UInt32mFormatID 1819304813
UInt32mFormatFlags 41
UInt32mBytesPerPacket 4
UInt32mFramesPerPacket 1
UInt32mBytesPerFrame 4
UInt32mChannelsPerFrame2
UInt32mBitsPerChannel 32
UInt32mReserved 0
</code></pre>
<p>我通过调试应用程序并执行 <code>AudioUnitGetProperty(rioUnit, kAudioUnitProperty_StreamFormat, ...)</code> 调用得到了这个。 <code>mFormatFlags</code> 字段意味着以下标志(我不知道任何正式的解码方法,我只是通过尝试 <code>kAudioUnitFlags</code> 的不同组合得到它,直到我得到 <code> 41</code>):</p>
<pre><code>kAudioFormatFlagIsNonInterleaved | kAudioFormatFlagIsPacked | kAudioFormatFlagIsFloat
</code></pre>
<p>我应该使用哪种类型的数据来转换缓冲区?我已经尝试过使用 <code>Float32</code>、<code>SInt32</code>,但它们不是。</p>
<p>我打算之后转换为 <code>SInt16</code>,但如果我没有先得到正确的样本格式,我就无法做到。</p>
<p>提前致谢。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>根据我的经验,iOS 不会直接向您提供 float 据。相反,您应该要求输入 <code>SInt16</code>(因此,也将 <code>mBitsPerChannel</code> 设置为 16),然后通过将每个数字除以 32767 手动将整数数据转换为 float 。</p ></p>
<p style="font-size: 20px;">关于ios - 为特定的 ASBD 缓冲区获取正确的数字数据类型转换,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/12274427/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/12274427/
</a>
</p>
页:
[1]