簡體   English   中英

AudioKit(iOS) - 為頻率/幅度變化添加觀察者

[英]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.05stimeInterval會遇到大量問題,比如我的iPhone加速超快,這絕對不是我想要的。

  • 請記住 :僅使用另一個timeInterval例如一秒鍾( timeInterval: 1.0 )是不可能的,因為我的應用程序必須能夠盡快檢測到特定的聲音。 (某些輸入聲音可能很短[0.5秒或更短]。)

也許AudioKit開發人員添加了一些事件,如果輸入獲得特定的頻率/幅度可以觸發。

或者也許可以將類似Swift觀察者的東西添加到AKFrequencyTracker -subclass中。

我不知道如何繼續,並會非常感謝一些幫助。

您應該讓DSP檢查您的條件,而不是使用計時器。 為此,您必須編輯頻率跟蹤器或創建自己的副本。 好消息是,AudioKit的幅度跟蹤器已經做了類似的事情,每當聽到一定的音量就調用一個函數,即。 達到幅度閾值:

https://github.com/AudioKit/AudioKit/blob/master/AudioKit/Common/Nodes/Analysis/Amplitude%20Tracker/AKAmplitudeTrackerDSPKernel.hpp#L97

如果以一般方式執行此操作,您甚至可以發出拉取請求並將代碼提交回AudioKit。 事實上,如果你想這樣做,我可以幫助你進一步引導你朝着正確的方向前進。 但是,我認為你可以使用幅度跟蹤器作為模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM