这是讨论的延续here https://stackoverflow.com/questions/49705736/akffttap-stops-generating-data-after-some-time.
我正在 Swift 中构建一个适用于 iOS 的录音机应用程序,并且我有一个自定义波形图形,我可以从 AKFFTTap 对象向其提供数据。我遇到一个问题,FFT 一段时间后开始生成全零。为了诊断和解决这个问题,我尝试在用户开始录制时重新初始化所有节点和点击(假设这可以解决问题)。以前,AudioKit 是在视图加载时初始化并启动的,仅此而已。
所以,现在我尝试重新分配每个录音的所有内容,并且它有效,除了每次重新录音(所以不是第一个,而是之后的一个),FFT 不再工作。这次它是一致且可重复的。
所以,这就是我正在做的事情,如果有人能告诉我哪里出错了,我将非常感激:
当录音开始时,我正在做:
mic = AKMicrophone() //needs to be started
fft = AKFFTTap.init(mic) //will start when mic starts
//now, let's define a mixer, and add the mic node to it, and initialize the recorder to it
micMixer = AKMixer(mic)
recorder = try AKNodeRecorder(node: micMixer)
micBooster = AKBooster(micMixer, gain: 0)
AudioKit.output = micBooster
try AudioKit.start()
mic.start()
micBooster.start()
try recorder.record()
当录音停止时:
//now go back deallocating stuff
recorder.stop()
micBooster.stop()
micMixer.stop()
mic.stop()
//now set player file to recorder file, since I want to play it later
do {
if let file = recorder.audioFile {
player = try AKAudioPlayer(file: file, looping: false, lazyBuffering: false, completionHandler: playingEnded)
try AudioKit.stop()
} else {
//handle no file error
}
}
catch {
//handle error
}
那么,有人可以帮我弄清楚为什么 FFT 第二次不起作用吗?
Thanks!