我使用 Apple 的 CoreAudio 音频单元 API 获得了AudioBuffer
完整void *mData
的新渲染音频样本,但我在获取正确格式的样本时遇到了问题。所述缓冲区的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
之后进行转换,但如果我没有先获得样本的正确格式,我就无法做到这一点。
提前致谢。