我正在尝试从麦克风捕获FFT数据。我已经设法使其与类似的代码库一起使用,但是由于macOS Mojave损坏了,因此fft数据始终保持为0。
相关代码:
var fft: AKFFTTap?
var inputDevice: AKDevice? {
didSet {
inputNode = nil
updateAudioNode()
}
}
var inputNode: AKNode? {
didSet {
if fft != nil {
// According to AKFFTTap class reference, it will always be on tap 0
oldValue?.avAudioNode.removeTap(onBus: 0)
}
fft = inputNode.map { AKFFTTap($0) }
}
}
[...]
guard let device = inputDevice else {
inputNode = ViewController.shared.player.mixer
return
}
do {
try AudioKit.setInputDevice(device)
}
catch {
print("Error setting input device: \(error)")
return
}
let microphoneNode = AKMicrophone()
do {
try microphoneNode.setDevice(device)
}
catch {
print("Failed setting node input device: \(error)")
return
}
microphoneNode.start()
microphoneNode.volume = 3
print("Switched Node: \(microphoneNode), started: \(microphoneNode.isStarted)")
inputNode = microphoneNode
try! AudioKit.start()
所有代码都被调用,没有错误输出,但是fft只是保持空白。通过一些代码重新排序,我会遇到各种各样的错误。 为了完整起见,该类的完整版本为here。
最后,我还尝试一对一实现playground中的示例。由于XCode运动场似乎因AudioKit而崩溃,因此我在自己的代码库中进行了尝试,但两者之间也没有区别。例如,AKFrequencyTracker的幅度和频率均为0。
答案 0 :(得分:0)
我对此不是100%正面的,但我希望您尝试AudioKit v4.5.1。我们绝对修复了AKMicrophone中的一个错误,该错误可能会导致下游后果。我将撤消此答案,并继续寻找它是否固定。让我知道。