gpt4 book ai didi

ios - 为特定的 ASBD 缓冲区获取正确的数字数据类型

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:48:58 25 4
gpt4 key购买 nike

我有一个 AudioBuffer,它的 void *mData 充满了使用 Apple 的 CoreAudio 音频单元 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,但如果我没有先获得正确的示例格式,我将无法完成。

提前致谢。

最佳答案

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com