2

私は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

多くの多くの助けに感謝します

4

1 に答える 1

4

fftDataこれはUnsafeMutablePointer、C ポインターに相当する Swift です。ポインターはメモリ アドレスであり、実際の値ではありません (したがって、名前:メモリを指しますが、メモリ自体ではありません)。

したがって、印刷するとアドレスが表示されます ( 0x00000001119be000)。そのアドレスのメモリの実際の値を読みたい場合は、それを調べる必要があります。たとえば、Floatインデックス 0 の値 (この場合は a ) を表示するには、...

print(fftData[0])

すべての値を表示するには、ループして個別に出力します...

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

UnsafeMutablePointermemory...というプロパティもあります。

print(fftData.memory)

ただし、関心のある値の範囲とは対照的に、その正確なメモリアドレスの値のみを返します。fftData[0]

于 2016-01-03T11:21:19.730 に答える