Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用EZAudio在Swift中获取FFT数据?_Ios_Swift_Fft_Ezaudio - Fatal编程技术网

Ios 如何使用EZAudio在Swift中获取FFT数据?

Ios 如何使用EZAudio在Swift中获取FFT数据?,ios,swift,fft,ezaudio,Ios,Swift,Fft,Ezaudio,我正在用ezaudio进行swift的fft分析 我的问题是如何从ezaudio获取所有fft数据 我会做一个算法,看看是一个频率出现的时候是多强 例如: 我在FFT数据中看到的频率是2000Hz,这个频率有多少能量 这是我的代码: import UIKit import Accelerate class ViewController: UIViewController, EZMicrophoneDelegate, EZAudioFFTDelegate{ private let Vi

我正在用ezaudio进行swift的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


}


}
输出:0x00000001119be000


非常感谢您的帮助

fftData
是一个
不可靠的指针
,它是C指针的Swift等价物。指针是内存地址,而不是实际值(因此得名:它指向内存,但不是内存本身)

因此,当您打印它时,您会得到一个地址(
0x00000001119be000
)。如果您想读取该地址上内存的实际值,您必须查找它。例如,要查看索引0处的值(在本例中为浮点值),可以

print(fftData[0])
要查看所有值,只需循环并单独打印它们

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

但是它只会返回精确内存地址处的值,而不是您感兴趣的值范围,使其等于
fftData[0]

您不是在寻找
fft.maxFrequency
而不是
fft.fftData
?不,我不想只寻找最大频率。我想寻找高能量的多频率。你能帮我吗?我的问题只是,我怎样才能得到fft数据,而不是我怎样才能分析它。文档说是(),但当我将它打印到控制台时,输出是0x0000000119BE000。我不明白如何获取浮点数组数据。你有什么想法吗?
for (var i = 0; i < bufferSize; i++) {
   print(fftData[i])
}
print(fftData.memory)