【发布时间】:2012-02-11 11:07:59
【问题描述】:
我正在寻找一种更简单的方法来操作 iPhone 上的音频缓冲区。主要是我试图避免 C 中的指针问题和数组计数问题,但不想被数字对象(如 NSNumber 或 NSInteger)拖慢,我必须与 NSArray 一起使用。
我遇到过 CFArray,它似乎是一个不错的中间地带。我在这个假设中正确吗?还是我错过了什么?
【问题讨论】:
标签: iphone objective-c c signal-processing
我正在寻找一种更简单的方法来操作 iPhone 上的音频缓冲区。主要是我试图避免 C 中的指针问题和数组计数问题,但不想被数字对象(如 NSNumber 或 NSInteger)拖慢,我必须与 NSArray 一起使用。
我遇到过 CFArray,它似乎是一个不错的中间地带。我在这个假设中正确吗?还是我错过了什么?
【问题讨论】:
标签: iphone objective-c c signal-processing
不是真的。 CFArray与NSArray基本相同,甚至可以在两者之间转换,这叫toll-free bridging。
CFArray(及其可变对应物)确实允许您指定自己的回调函数来保留和释放数组中的对象(指针),这将允许您存储任意指针(不仅仅是NSObjects)在数组中并实现您自己的内存管理方案,但我怀疑这会带来任何真正的性能提升。对于您的用例,C 数组可能是要走的路。
【讨论】:
如果性能和内存大小有任何问题,他们很可能会用于实时音频处理,坚持使用纯 C 数组,并学习如何编码数组传递和正确访问。
无论如何,您都需要在 C 数组中处理音频,因为 iOS 音频队列和音频单元 API 使用 C 数组传递音频数据。
【讨论】:
如果你不喜欢 C 风格并且想要使用一些需要面向对象的类风格,我真的会推荐使用 C++,例如。 std::vector 或类似的。 不要将 Objective-C 用于不是用于信号处理的音频! Obj-C 非常适合处理 UI 和连接信号系统中的对象。任何类型的“真实”计算都应始终使用 C 或平面 C++ 完成。
【讨论】: