我有一个 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
,但如果我没有先得到正确的样本格式,我就无法做到。
提前致谢。
根据我的经验,iOS 不会直接向您提供 float 据。相反,您应该要求输入 SInt16
(因此,也将 mBitsPerChannel
设置为 16),然后通过将每个数字除以 32767 手动将整数数据转换为 float 。
关于ios - 为特定的 ASBD 缓冲区获取正确的数字数据类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12274427/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |