2016-06-22 9 views
1

マイク入力のfftを計算する関数があります。 目標は、すべてのバンドで浮動小数点型配列を実行したときに実行関数を呼び出すときにフレームワークを作成することです。void関数の値を返すにはどうすればいいですか

これで問題はありませんが、gotSomeAudio関数から実行関数でArrayをどうやって返すことができるのか分かりません。

はあなたがコールバック関数に渡すことができ、ヘルプ

@objc 
public class FFT:NSObject{ 


    var audioInput: TempiAudioInput! 

    @objc 
    public func run() -> Array<Float>{ 

     let audioInputCallback: TempiAudioInputCallback = { (numberOfFrames, timeStamp, inout samples: [Float]) -> Void in 
      self.gotSomeAudio(numberOfFrames, timeStamp: timeStamp, samples: samples) 
     } 


     audioInput = TempiAudioInput(audioInputCallback: audioInputCallback, sampleRate: 44100, numberOfChannels: 1) 
     audioInput.startRecording() 

     // how can i return the Array from the gotSomeAudio function? 
     return xyz 
    } 




    @objc 
    public func gotSomeAudio(numberOfFrames: Int, timeStamp: Double, samples: [Float]) -> Array<Float> { 

     let fft = TempiFFT(withSize: numberOfFrames, sampleRate: 44100) 

     // Setting a window type reduces errors 
     fft.windowType = TempiFFTWindowType.hanning 

     // Perform the FFT 
     fft.fftForward(samples) 

     // Map FFT data to logical bands. This gives 4 bands per octave across 7 octaves = 28 bands. 
     //fft.calculateLogarithmicBands(minFrequency: 100, maxFrequency: 11025, bandsPerOctave: 4) 
     //fft.calculateLinearBands(minFrequency: 0, maxFrequency: fft.nyquistFrequency, numberOfBands: Int(screenWidth)) 
     fft.calculateLogarithmicBands(minFrequency: 100, maxFrequency: 11025, bandsPerOctave: 4) 

     // Process some data 
     return fft.bandFrequencies 

    } 

} 
+0

あなたは 'アレイ' 'と言うのオブジェクトを作成することができますbandFreqs'は 'fft.bandFrequencies'のすべての値をループし、' bandFreqs'に値を加えて 'bandFreqs'配列を返します。 – NeverHopeless

+0

ありがとう、ありがとうございます、ごめんなさい、すみませんでした。 – Aron

答えて

3

いただき、誠にありがとうございます:

public func run(complete: Array<Float> -> Void) { 

    let audioInputCallback: TempiAudioInputCallback = { (numberOfFrames, timeStamp, inout samples: [Float]) -> Void in 
     complete(self.gotSomeAudio(numberOfFrames, timeStamp: timeStamp, samples: samples)) 
    } 

... 

myInstance.run() { floatArray in 
    // Use floatArray here. 
} 
+0

実行機能を呼び出すと、データにどのようにアクセスできますか? – Aron

+0

@Aron投稿の編集を参照してください。 – Code

+0

ありがとう – Aron

関連する問題