マイク入力のfftを計算する関数があります。 目標は、すべてのバンドで浮動小数点型配列を実行したときに実行関数を呼び出すときにフレームワークを作成することです。void関数の値を返すにはどうすればいいですか
これで問題はありませんが、gotSomeAudio関数から実行関数でArrayをどうやって返すことができるのか分かりません。
はあなたがコールバック関数に渡すことができ、ヘルプ
@objc
public class FFT:NSObject{
var audioInput: TempiAudioInput!
@objc
public func run() -> Array<Float>{
let audioInputCallback: TempiAudioInputCallback = { (numberOfFrames, timeStamp, inout samples: [Float]) -> Void in
self.gotSomeAudio(numberOfFrames, timeStamp: timeStamp, samples: samples)
}
audioInput = TempiAudioInput(audioInputCallback: audioInputCallback, sampleRate: 44100, numberOfChannels: 1)
audioInput.startRecording()
// how can i return the Array from the gotSomeAudio function?
return xyz
}
@objc
public func gotSomeAudio(numberOfFrames: Int, timeStamp: Double, samples: [Float]) -> Array<Float> {
let fft = TempiFFT(withSize: numberOfFrames, sampleRate: 44100)
// Setting a window type reduces errors
fft.windowType = TempiFFTWindowType.hanning
// Perform the FFT
fft.fftForward(samples)
// Map FFT data to logical bands. This gives 4 bands per octave across 7 octaves = 28 bands.
//fft.calculateLogarithmicBands(minFrequency: 100, maxFrequency: 11025, bandsPerOctave: 4)
//fft.calculateLinearBands(minFrequency: 0, maxFrequency: fft.nyquistFrequency, numberOfBands: Int(screenWidth))
fft.calculateLogarithmicBands(minFrequency: 100, maxFrequency: 11025, bandsPerOctave: 4)
// Process some data
return fft.bandFrequencies
}
}
あなたは 'アレイ' 'と言うのオブジェクトを作成することができますbandFreqs'は 'fft.bandFrequencies'のすべての値をループし、' bandFreqs'に値を加えて 'bandFreqs'配列を返します。 –
NeverHopeless
ありがとう、ありがとうございます、ごめんなさい、すみませんでした。 – Aron