2016-12-18 3 views
0

Ich versuche, aurioTouch-Beispielcode FFTHelper-Klasse in Swift 3 zu konvertieren, um ein Spektrogramm in einer iOS-App mit Swift 3 zu erstellen. Ich habe Probleme mit UnsafePointer, da ich nicht in der Lage bin initialisiere eine Variable dieses Typs. Fehlermeldung ähnlich wie: 'init' ist nicht verfügbar: Verwenden Sie 'withMemoryRebound ....'.Probleme mit UnsafePointer <DSPComplex> beim Umwandeln von aurioTouch in Swift 3

Ich versuchte withMemoryRebound mit .. aber es ist immer noch nicht .. Diese in Swift 2.2 gültig ist, aber nicht in Swift 3 var inAudioData: UnsafePointer = UnsafePointer (! Buffer.floatChannelData .pointee);

Puffer ist ein AVAudioPCMBuffer mit Audiodaten.

Bitte helfen Sie in die obige Zeile in in Swift Umwandlung 3.

+1

Der [Original aurioTouch Beispielcode] (https://developer.apple.com/library/content/samplecode/aurioTouch/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007770) geschrieben wird, in Objective-C++/C++. Sie sollten den ursprünglichen Code mit mehr Kontext anzeigen. Und ich bin mir nicht sicher, ob dein Zweck Do It Yourself ist oder ob du nur das Ergebnis verwendest, aber die Swift 3 Version des neuesten aurioTouch (2016-08-12) ist verfügbar [hier] (https://github.com/ooper -shlab/aurioTouch2.0-Swift). – OOPer

Antwort

1

Auch wenn die vDSP_fft_zip() Routine in den iOS Accelerate-Framework für Parameter vom Typ fragt UnsafePointer < DSPSplitComplex>, Swift 3 ermöglicht regelmäßige Swift Arrays von Floats innerhalb des DSPSplitComplex-Typs.

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)) 
Verwandte Themen