gpt4 book ai didi

cocoa - 存储来自 ExtAudioFile API 的 AudioBufferList 供以后使用

转载 作者:行者123 更新时间:2023-12-03 16:13:56 24 4
gpt4 key购买 nike

使用 Xcode/Cocoa 和 ExtAudioFile API,我尝试存储 AudioBufferList* 对象以供以后使用,但我在重新访问数据时遇到了麻烦。这些对象来自重复的 ExtAudioFileRead 调用。

我意识到我不能只是将这些 AudioBufferList* 对象填充到 NSArray 中,但我的印象是 NSPointerArray 可以用于此目的。然而,当在 NSPointerArray 中存储音频缓冲区列表后尝试访问 audioBufferList->mBuffers[0].mData 时,它们只是归零。

我正在将audioBufferLists内存复制到新的audioBufferList对象,因为我为每个ExtAudioFileRead调用重复使用相同的音频缓冲区列表。不过,我不确定这是否足够,并且 memcpying void* audioBufferList->mBuffers[0].mData 对象也没有帮助。

存储这些 AudioBufferList* 对象的最简单方法是什么?我走在正确的道路上吗?

最佳答案

AudioBufferLists 将其数据保存在 audioBufferList.mBuffers[i].mData 中。
mDatavoid* 值的实际类型由您指定的输出格式决定。

示例:
如果您定义了
kAudioFormatFlagsCanonical,
kAudioFormatLinearPCM,
mBitsPerChannel = 32
mFramesPerPacket = 1
作为输出格式,mData 数组包含 AudioSampleType 类型的值(这是 Float32 的 typedef)

如果您选择了其他格式,该数组可能包含 SInt16 值或其他值。
因此,当您想要复制 mData 的内容时,您必须了解您的输出类型。
如果您知道格式,您可以简单地创建一个 c 数组

dataCopy = calloc(dataSize, sizeof(Float32));

并 memcpy audioBufferList.mBuffers[i].mData 到其中。
如果你想使用 cocoa NSMutableArray,你必须将 float 包装到 NSNumber 对象中。

关于cocoa - 存储来自 ExtAudioFile API 的 AudioBufferList 供以后使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1866000/

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