[英]AudioKit (iOS) - Add observer for frequency / amplitude change
我正在使用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
}
}
但說實話,我使用0.05s的timeInterval會遇到大量問題,比如我的iPhone加速超快,這絕對不是我想要的。
timeInterval: 1.0
)是不可能的,因為我的應用程序必須能夠盡快檢測到特定的聲音。 (某些輸入聲音可能很短[0.5秒或更短]。) 也許AudioKit開發人員添加了一些事件,如果輸入獲得特定的頻率/幅度可以觸發。
或者也許可以將類似Swift觀察者的東西添加到AKFrequencyTracker
-subclass中。
我不知道如何繼續,並會非常感謝一些幫助。
您應該讓DSP檢查您的條件,而不是使用計時器。 為此,您必須編輯頻率跟蹤器或創建自己的副本。 好消息是,AudioKit的幅度跟蹤器已經做了類似的事情,每當聽到一定的音量就調用一個函數,即。 達到幅度閾值:
如果以一般方式執行此操作,您甚至可以發出拉取請求並將代碼提交回AudioKit。 事實上,如果你想這樣做,我可以幫助你進一步引導你朝着正確的方向前進。 但是,我認為你可以使用幅度跟蹤器作為模板。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.