首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用EZAudio在Swift中获取快速傅立叶变换数据?

如何使用EZAudio在Swift中获取快速傅立叶变换数据?
EN

Stack Overflow用户
提问于 2015-10-12 08:05:57
回答 1查看 1.5K关注 0票数 2

我正在做一个fft的分析,在斯威夫特与电子音频。

我的问题是如何从ez音频获得所有的fft数据。

我会做一个算法来查看是一个频率,当是的时候,有多强。

示例:

我在FFT数据中看到的是频率2000 it的现在,是这个频率现在它有多少能量。

这里我的代码:

代码语言:javascript
复制
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


}


}

通过这段代码,它在控制台上提供了一个奇怪的输出:

代码语言:javascript
复制
var data = fft.fftData
print(data)

产出: 0x00000001119be000

非常感谢你的帮助

EN

回答 1

Stack Overflow用户

发布于 2016-01-03 11:21:19

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

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

代码语言:javascript
复制
print(fftData[0])

要查看所有的值,只需循环并逐个打印.

代码语言:javascript
复制
for (var i = 0; i < bufferSize; i++) {
   print(fftData[i])
}

UnsafeMutablePointer还有一个名为memory的属性..。

代码语言:javascript
复制
print(fftData.memory)

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33076115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档