簡體   English   中英

如何使用EZAudio在Swift中獲取FFT數據?

[英]How to get FFT Data in Swift using EZAudio?

我正在使用ezaudio快速進行fft分析。

我的問題是如何從ezaudio中獲取所有fft數據。

我想讓一個算法看一下是多少時出現的頻率。

例:

我在FFT數據中看到的是存在2000Hz的頻率,該存在的頻率是多少能量。

這是我的代碼:

import UIKit
import Accelerate

class ViewController: UIViewController, EZMicrophoneDelegate,     EZAudioFFTDelegate{

private let ViewControllerFFTWindowSize: vDSP_Length = 4096

var microphone: EZMicrophone!
var fft: EZAudioFFTRolling!

override func loadView() {
    super.loadView()

    //setup audio session
    let session = AVAudioSession.sharedInstance()
    do{
        try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try session.setActive(true)
    }catch{
        print("Audio Session setup Fails")
    }

    microphone = EZMicrophone(delegate: self, startsImmediately: true)
    fft = EZAudioFFTRolling(windowSize: ViewControllerFFTWindowSize, sampleRate: Float(microphone.audioStreamBasicDescription().mSampleRate), delegate: self)

    microphone.startFetchingAudio()
}

func microphone(microphone: EZMicrophone!, hasAudioReceived buffer: UnsafeMutablePointer<UnsafeMutablePointer<Float>>, withBufferSize bufferSize: UInt32, withNumberOfChannels numberOfChannels: UInt32) {

    fft.computeFFTWithBuffer(buffer[0], withBufferSize: bufferSize)

}

func fft(fft: EZAudioFFT!, updatedWithFFTData fftData: UnsafeMutablePointer<Float>, bufferSize: vDSP_Length) {
    var maxF = fft.fftData

    print(maxF)

    var data = fft.fftData
    print(data)

    //here coming my algorithm


}


}

有了這段代碼,它在控制台上給出了奇怪的輸出:

var data = fft.fftData
print(data)

輸出:0x00000001119be000

非常感謝您的幫助

fftDataUnsafeMutablePointer ,與C指針的Swift等效。 指針是一個內存地址,而不是實際值(因此,它的名稱:它指向內存,但不是內存本身)。

因此,在打印時,您會得到一個地址( 0x00000001119be000 )。 如果要讀取該地址處的內存實際值,則必須對其進行查找。 例如,要查看索引0處的值(在本例中為Float ),可以...

print(fftData[0])

要查看所有值,只需遍歷並分別打印即可...

for (var i = 0; i < bufferSize; i++) {
   print(fftData[i])
}

UnsafeMutablePointer還具有一個稱為memory的屬性。

print(fftData.memory)

但它只會返回該確切內存地址處的值,而不是您感興趣的值范圍,使其等於fftData[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM