gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:52:21 24 4
gpt4 key购买 nike

我正在使用 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

非常非常感谢您的帮助

最佳答案

fftData 是一个 UnsafeMutablePointer,它是 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]

关于ios - 如何使用 EZAudio 在 Swift 中获取 FFT 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33076115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com