当前位置:  开发笔记 > IOS > 正文

存储ExtAudioFile API中的AudioBufferLists供以后使用

如何解决《存储ExtAudioFileAPI中的AudioBufferLists供以后使用》经验,为你挑选了1个好方法。

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

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

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

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



1> Thomas Zoech..:

AudioBufferLists保存他们的数据audioBufferList.mBuffers[i].mData.
mData是,void*并且值的实际类型由您指定的输出格式确定.

例如:
如果定义
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,则必须将浮点数包装到NSNumber对象中.

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有