我正在尝试将aurioTouch示例代码FFTHelper类转换为Swift 3,以便在使用Swift 3的iOS应用中生成频谱图。我遇到了UnsafePointer的问题,因为我无法初始化此类型的变量。 得到的错误类似于:' init'不可用:使用' withMemoryRebound ....'。
我尝试使用withMemoryRebound ..但它仍然失败.. 这在Swift 2.2中有效,但在Swift 3中没有 var inAudioData:UnsafePointer = UnsafePointer(buffer.floatChannelData!.pointee);
buffer是一个带有音频数据的AVAudioPCMBuffer。
请帮助将上述行转换为Swift 3。
答案 0 :(得分:1)
即使iOS Accelerate框架中的vDSP_fft_zip()例程要求输入UnsafePointer类型的参数< DSPSplitComplex>,Swift 3允许在DSPSplitComplex类型中使用常规Swift浮点数组。
var dataReal = [Float](repeating: 0.0, count: dataLen)
var dataImaginary = [Float](repeating: 0.0, count: dataLen)
// ... fill the real Float array with your data or audio samples ....
var myComplexData : DSPSplitComplex?
myComplexData = DSPSplitComplex(realp: &dataReal, imagp: &dataImaginary)
vDSP_fft_zip(fftSetup!, &myComplexData!, 1, logLen, Int32(FFT_FORWARD))