Я использую структуру AudioKit для разработки небольшого приложения, которое может прослушивать входную частоту и амплитуду микрофона, и я хочу запускать событие (очевидно, я хочу запускать функцию) каждый раз, когда частота и амплитуда получают определенные значения - ›Событие для определенного тона.
Прямо сейчас я использую этот простой код Swift для своего приложения:
mic = AKMicrophone()
tracker = AKFrequencyTracker(mic)
silence = AKBooster(tracker, gain: 1)
AKSettings.audioInputEnabled = true
AudioKit.output = silence
AudioKit.start()
let t = Timer.scheduledTimer( timeInterval: 0.05, target: self, selector: #selector(self.checkFrequencyAmplitude), userInfo: nil, repeats: true)
func checkFrequencyAmplitude() {
let frequency = tracker.frequency,
amplitude = tracker.amplitude
if (frequency > 1000 && frequency < 1200 && amplitude > 0 && amplitude < 0.2) {
// do stuff if the specific tone appeared
}
}
Но, честно говоря, у меня возникли серьезные проблемы с использованием timeInterval с 0,05 с, например, мой iPhone очень быстро нагревается, и это совсем не то, что я хочу.
- Имейте в виду: просто использовать другой timeInterval, например, одну секунду (
timeInterval: 1.0
), невозможно, потому что мое приложение должно уметь как можно быстрее определять конкретный звук. (Некоторые входные звуки могут быть довольно короткими [0,5 секунды или меньше].)
Возможно, разработчик AudioKit добавил, что какое-то событие может запускаться, если входной сигнал получает определенную частоту / амплитуду.
Или, может быть, можно добавить что-то вроде наблюдателя Swift в AKFrequencyTracker
-подкласс ..
Я не знаю, что делать дальше, и буду очень благодарен за помощь.