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