Я пытаюсь отслеживать частоты с микрофона одновременно с тем, как динамик издает определенный c звук. Тестирование на iPhone XS, физическое устройство.
При нажатии кнопки колонки успешно воспроизводят звук в течение 3 секунд, но в это время, похоже, не работает трекер частоты (ничего не печатает). После остановки звука трекер частоты работает отлично.
Вот мой код в Xcode 11.4, AudioKit 4.9.5 и ios 13.4:
import UIKit
import AudioKit
import AudioKitUI
class ViewController: UIViewController {
var oscillator = AKOscillator()
var mic = AKMicrophone()
var filter = AKLowPassFilter()
var tracker: AKFrequencyTracker?
var silence: AKBooster?
override func viewDidLoad() {
super.viewDidLoad()
AudioKit.output = oscillator
oscillator.amplitude = random(0.99, 1)
oscillator.frequency = random(999, 1002)
sleep(UInt32(0.5))
mic = AKMicrophone()
filter = AKLowPassFilter(mic)
filter.cutoffFrequency = 1002
filter.resonance = 999
AKSettings.audioInputEnabled = true
tracker = AKFrequencyTracker(filter)
silence = AKBooster(tracker, gain: 0)
AudioKit.output = AKMixer(silence,oscillator)
do {
AKSettings.session.overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
AKSettings.defaultToSpeaker = true
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord)
try AudioKit.start()
} catch {
AKLog("AudioKit did not start!")
}
Timer.scheduledTimer(withTimeInterval: 0.001, repeats: true, block: { _ in
let timeInterval = NSDate().timeIntervalSince1970
if self.tracker!.frequency >= 999 && self.tracker!.frequency <= 1002 && self.tracker!.amplitude >= 0.02{
print(String(timeInterval)+": "+String(format: " %.2f",self.tracker!.frequency) + " "+String(format: " %.2f",self.tracker!.amplitude))
}
})
}
@IBAction func StartClicked(_ sender: Any) {
do {
} catch {
AKLog("AudioKit did not start!")
print(error)
}
oscillator.start()
sleep(3)
oscillator.stop()
}
}
Спасибо!