【发布时间】:2018-10-02 17:33:31
【问题描述】:
我正在尝试从麦克风捕获 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。
【问题讨论】:
-
Playgrounds 与任何东西都会崩溃,不仅仅是 AudioKit,对于像我这样创建了数百个 Playground 的人来说,这真是令人沮丧。话虽如此,跟踪振荡器频率的 AKFrequencyTracker 操场做得很好。但是,基于麦克风的东西现在有点可疑。人们正在研究它。我相信这与默认麦克风选择有关,但我不确定。
-
在我的场景中,您可以选择输入设备(并且选择本身确实有效,我知道这是因为无效的音频设备会出现很多错误,哈哈)。但感谢您的提醒,我会留意变化!
标签: swift macos avfoundation audiokit