ios - 将 fft 计算与 View Controller 分开

标签 ios swift ezaudio

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

我的问题是,当我使用dispatch_async将其放入 View Controller 时,我可以访问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

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

关于ios - 将 fft 计算与 View Controller 分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746792/

相关文章:

ios - 内容的 UIContainerView 高度(嵌入式 UITableViewController)

ios - 如何检测核心数据对象关系属性变化

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

ios - 如何在 iOS Swift 中设置带有标记群集的自定义标记图标

ios - EZAudio 框架 -"Error: Couldn' t 初始化输出单元 ('fmt?' )"

ios - 如何在 Swift 中为 UIImage 着色?

ios - 如何在 swift 中从 zipCode 获取坐标

ios - 以编程方式创建的 EZAudioPlot 不绘制

ios - 快速更改导航 Controller 颜色

ios - 在 Swift 中使用 EZAudio 框架播放音频文件