我正在使用以下代码:
audioBuff.audioBuffer.floatChannelData![0].withMemoryRebound(to: DSPComplex.self, capacity: bufferSizePOT / 2) {dspComplexStream in
vDSP_ctoz(dspComplexStream, 2, &output, 1, UInt(bufferSizePOT / 2))
}
我想跳到一些进一步的示例:
audioBuff.audioBuffer.floatChannelData![1024].withMemoryRebound(to: DSPComplex.self, capacity: bufferSizePOT / 2) {dspComplexStream in
vDSP_ctoz(dspComplexStream, 2, &output, 1, UInt(bufferSizePOT / 2))
}
这样做时,我有一个EXC_BAD_ACCESS(代码= 1,地址= 0x0) 有人可以解释如何正确使用它?
我使用.withMemoryRebound是因为我最初尝试过:
vDSP_ctoz(audioBuff.audioBuffer.floatChannelData!, 2, &output, 1, UInt(bufferSizePOT / 2))
这给了我错误: 无法将类型'UnsafePointer>'的值转换为预期的参数类型'UnsafePointer'
我想做的是移入audioBuff.audioBuffer.floatChannelData!按块进行FFT
答案 0 :(得分:1)
audioBuffer.floatChannelData![0]
代表指向通道#0的样本的指针。
当缓冲区为非相关立体声时,您可以使用audioBuffer.floatChannelData![1]
访问通道#1的样本。
但是,我相信Apple的任何声音硬件都不支持频道#1024。
当您要使用第1024个示例时,可能需要编写如下内容:
audioBuffer.floatChannelData![0]
.advanced(by: 1024)
.withMemoryRebound(to: DSPComplex.self, capacity: bufferSizePOT / 2) {
dspComplexStream in
vDSP_ctoz(dspComplexStream, 2, &output, 1, UInt(bufferSizePOT / 2))
}