0

リアルタイム マイク入力の fft を計算するために EZAudio を迅速にセットアップし、fft データに対して特別なアルゴリズムを実行しました。

私の問題は、dispatch_async を使用してこれをビュー コントローラーに配置すると、fft データにアクセスできることです (コードの最後の func を参照)。

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)


    })
}
}

しかし、これを別のクラスに入れて、必要なときに呼び出すにはどうすればよいですか?

お願い お願い 助けて

4

1 に答える 1

0

Swiftを使用していることを示しました。別のAudioFunctions.swiftファイルを作成して、関数 (および関連するもの) をそこに移動してみませんか? を気にせずに、アプリのどこからでも呼び出すことができますinclude

重要な注意: 関数はクラスに属している必要はありません。

于 2016-01-12T16:42:18.523 に答える