首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储ExtAudioFile应用编程接口中的AudioBufferLists以供以后使用

存储ExtAudioFile应用编程接口中的AudioBufferLists以供以后使用
EN

Stack Overflow用户
提问于 2009-12-08 18:11:56
回答 1查看 1.2K关注 0票数 4

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

我意识到我不能简单地将这些AudioBufferList*对象塞到NSArray中,但我的印象是NSPointerArray可以做到这一点。但是,在NSPointerArray中存储音频缓冲区列表后,当尝试访问audioBufferList->mBuffers.mData时,它们就会被清零。

我将audioBufferLists映射到新的audioBufferList对象,因为我为每个ExtAudioFileRead调用重用了相同的音频缓冲区列表。不过,我不确定这是否足够,记住void* audioBufferList->mBuffers.mData对象也无济于事。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-12-08 19:10:39

AudioBufferLists将他们的数据保存在audioBufferList.mBuffers[i].mData中。

mDatavoid*,值的实际类型由您指定的输出格式决定。

示例:

如果您定义了

kAudioFormatFlagsCanonical

kAudioFormatLinearPCM

mBitsPerChannel = 32

mFramesPerPacket = 1

作为您的输出格式,mData-array包含AudioSampleType类型的值(这是一个Float32 )

如果选择了另一种格式,则数组可能包含SInt16值或其他内容。

因此,当您想要复制mData的内容时,您必须知道您的输出类型。

如果你知道格式,你可以简单地创建一个c数组

代码语言:javascript
复制
dataCopy = calloc(dataSize, sizeof(Float32));

和memcpy audioBufferList.mBuffersi.mData到那里面。

如果要使用可可NSMutableArray,则必须将浮点包装到NSNumber对象中。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1866000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档