【发布时间】:2015-10-12 08:05:57
【问题描述】:
我正在使用 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
非常感谢您的帮助
【问题讨论】:
-
您不是在寻找
fft.maxFrequency而不是fft.fftData吗? -
不,我不仅要寻找最大频率。我想寻找具有高能量的多个频率。你能帮帮我吗?
-
我的问题只是,我如何获取 fft 数据而不是如何分析。
-
文档说是 (cocoadocs.org/docsets/EZAudio/1.1.2/Classes/EZAudioFFT.html#//…),但是当我将其打印到控制台时,输出 0x00000001119be000。我不明白如何获取浮点数组数据。你有什么想法吗?