将aurioTouch转换为Swift 3时UnsafePointer <dspcomplex>的问题

时间:2016-12-18 07:57:46

标签: ios swift swift3 fft

我正在尝试将aurioTouch示例代码FFTHelper类转换为Swift 3,以便在使用Swift 3的iOS应用中生成频谱图。我遇到了UnsafePointer的问题,因为我无法初始化此类型的变量。 得到的错误类似于:&#39; init&#39;不可用:使用&#39; withMemoryRebound ....&#39;。

我尝试使用withMemoryRebound ..但它仍然失败.. 这在Swift 2.2中有效,但在Swift 3中没有     var inAudioData:UnsafePointer = UnsafePointer(buffer.floatChannelData!.pointee);

buffer是一个带有音频数据的AVAudioPCMBuffer。

请帮助将上述行转换为Swift 3。

1 个答案:

答案 0 :(得分:1)

即使iOS Accelerate框架中的vDSP_fft_zip()例程要求输入UnsafePointer类型的参数&lt; DSPSplitComplex&gt;,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))