Я пытаюсь захватить данные 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 просто остается пустым.С некоторым переупорядочением кода я получаю различные ошибки.Полная версия класса, для полноты, здесь .
Наконец, я также попытался реализовать один к одному примеры с детской площадки .Так как игровые площадки XCode, похоже, вылетали из-за AudioKit, я попробовал это в своей собственной кодовой базе, но и в этом нет разницы.Например, AKFrequencyTracker получает 0 с для амплитуды и частоты.