AudioKit (iOS) - Add observer for frequency / amplitude change

被刻印的时光 ゝ 提交于 2019-11-28 01:49:29

问题


I'm using the AudioKit framework for developing a small application that is able to listen for the microphone input frequency & amplitude and I want to trigger an event (obviously I want to trigger a function) every time the frequency & the amplitude got specific values -> An event for a specific tone.

Right now I'm using this simple Swift code for my application:

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
   }
}

But to be honest I got massive problems using a timeInterval with 0.05s, like my iPhone heats up super fast & thats absolutely not this what I want.

  • Keep in mind: Just using another timeInterval for example one second (timeInterval: 1.0) is not possibility because my app must be able to detect the specific sound as fast as possible. (Some of the input sound could be pretty short [0.5 seconds or less].)

Maybe the AudioKit developer added some event can be triggered if the input gets a specific frequency / amplitude.

Or maybe it is possible to add something like an Swift observer to a AKFrequencyTracker-subclass..

I'm clueless how to go on and would be super thankful for some help.


回答1:


Instead of using a timer, you should let the DSP check for your conditions for you. To do this you'll have to edit the frequency tracker or create your own copy. The good news is that AudioKit's amplitude tracker already does something like this, calling a function whenever a certain volume is heard ie. an amplitude threshold is reached:

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

If you do it in a general way, you could even make a pull request and commit the code back to AudioKit. In fact, if you want to do that, I can help steer you in the right direction further. But, I think you can get pretty far using the amplitude tracker as a template.



来源:https://stackoverflow.com/questions/48228538/audiokit-ios-add-observer-for-frequency-amplitude-change

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!