在Objective-C中从UnsafeBufferPointer创建一个数组

时间:2017-08-28 15:35:50

标签: ios objective-c swift avfoundation

通常人们都会要求从Objective-C转变为Swift。我今天必须反过来问。

给出Swift中的以下行:

let values:[Float] = Array(UnsafeBufferPointer(start: buffer.floatChannelData?[0], count:Int(buffer.frameLength)))

编译成功,我得到一个浮点值数组。由于floatChannelData上的AVAudioPCMBuffer被定义为float * const,我假设将返回的值数组从地址floatChannelData[0]点复制到。

我如何在Objective-C中实现相同的行为?

1 个答案:

答案 0 :(得分:1)

取决于您是否需要floatNSArray的C数组。

(免责声明:用Chrome编写)

对于C数组,我们应该只能复制原始值:

float *values = malloc(buffer.frameLength * sizeof(float)); // remember to free eventually
memcpy(values, buffer.floatChannelData[0], buffer.frameLength * sizeof(float));

对于NSArray,我们必须将float包裹在NSNumber个对象中:

NSMutableArray *values = [NSMutableArray new];

for (AVAudioFrameCount i = 0; i < buffer.frameLength; i++) {
    [values addObject:@(buffer.floatChannelData[0][i])];
}