我正在尝试从麦克风捕获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。
发布于 2018-10-03 15:59:17
我对此不是百分之百的肯定,但我希望你尝试一下AudioKit v4.5.1。我们确实修复了AKMicrophone中的一个错误,这可能会对下游产生影响。我会撤回这个答案,如果它没有修复,我会继续寻找。让我知道。
https://stackoverflow.com/questions/52613511
复制相似问题