2016-06-22 2 views
1

마이크 입력의 fft를 계산하는 함수가 있습니다. 목표는 모든 밴드가있는 float 배열을 실행 함수로 호출 할 때 프레임 워크를 만드는 것입니다.void 함수의 값을 반환하는 방법

이제 제대로 작동하지만 gotSomeAudio 함수에서 Run 함수로 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

관련 문제