OGeek|极客世界-中国程序员成长平台

标题: ios - 为特定的 ASBD 缓冲区获取正确的数字数据类型转换 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 22:40
标题: ios - 为特定的 ASBD 缓冲区获取正确的数字数据类型转换

我有一个 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

我应该使用哪种类型的数据来转换缓冲区?我已经尝试过使用 Float32SInt32,但它们不是。

我打算之后转换为 SInt16,但如果我没有先得到正确的样本格式,我就无法做到。

提前致谢。



Best Answer-推荐答案


根据我的经验,iOS 不会直接向您提供 float 据。相反,您应该要求输入 SInt16(因此,也将 mBitsPerChannel 设置为 16),然后通过将每个数字除以 32767 手动将整数数据转换为 float 。

关于ios - 为特定的 ASBD 缓冲区获取正确的数字数据类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12274427/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://sqlite.in/) Powered by Discuz! X3.4