将fft计算与视图控制器分离



我在swift中设置了一个EZAudio来计算实时麦克风输入的fft,然后我对fft数据运行一个特殊的算法。

我的问题是,当我把fft数据放在视图控制器中时,我可以使用dispatch_async访问fft数据。(参见代码的最后一个功能)

class MasterKey:NSObject,EZMicrophoneDelegate, EZAudioFFTDelegate{
var microphone: EZMicrophone!
var fft: EZAudioFFTRolling!
var tone:String = ""
var sampleRate:Float = 0.0
var fftWindowSize:vDSP_Length = 8192
var keys:MKHRangeToKey!

 init(tone:String){
    super.init()
    self.tone = tone
    /*
    * setup all dependencys for the fft analysis
    */
    //setup audio session
    let session = AVAudioSession.sharedInstance()
    do{
        try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try session.setActive(true)
    }catch{
        print("Audio Session setup Fails")
    }
    //create a mic instance
    microphone = EZMicrophone(delegate: self, startsImmediately: true)
    self.sampleRate = Float(microphone.audioStreamBasicDescription().mSampleRate)
    //create a fft instace
    fft = EZAudioFFTRolling(windowSize: fftWindowSize, sampleRate: sampleRate, delegate: self)
    //start the mic
    microphone.startFetchingAudio()
    self.keys = MKHRangeToKey(tone: tone, sampleRate: sampleRate, fftWindowSize: Int(fftWindowSize))
}
//get the mic data
func microphone(microphone: EZMicrophone!, hasAudioReceived buffer: UnsafeMutablePointer<UnsafeMutablePointer<Float>>, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) {
    //calc the fft
    if fft != nil{
        fft.computeFFTWithBuffer(buffer[0], withBufferSize: bufferSize)
    }
}

//get the fft data from last calculstion
func fft(fft: EZAudioFFT!, updatedWithFFTData fftData: UnsafeMutablePointer<Float>, bufferSize: vDSP_Length){
    dispatch_async(dispatch_get_main_queue(), {
        print(fftData)

    })
}
}

但是,我怎么能把它放在一个单独的类中,以便在需要时调用它呢?

请帮助

您表示正在使用Swift。为什么不创建一个单独的AudioFunctions.swift文件并将函数(以及任何相关的)移动到那里呢?你可以在应用程序的任何地方调用它,而不用担心include

重要提示:函数不必属于类。

最新更新