마이크 입력의 fft를 계산하는 함수가 있습니다. 목표는 모든 밴드가있는 float 배열을 실행 함수로 호출 할 때 프레임 워크를 만드는 것입니다.void 함수의 값을 반환하는 방법
이제 제대로 작동하지만 gotSomeAudio 함수에서 Run 함수로 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