通常人们都会要求从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中实现相同的行为?
答案 0 :(得分:1)
取决于您是否需要float
或NSArray
的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])];
}