We were looking for some topics related to audio analysis and found acoustic fingerprinting. As it is, it seems like the most famous application for it is for identification of music.
Enter our manager, who requested us to research and possible find an algorithm or existing code that we can use for this very simple approach (like it’s easy, source codes don’t show up like mushrooms):
- Always-on app for listening
- Compare the audio patterns to a single audio file (assume sound is a simple beep or beep-beep)
- If sound is detected, send notification to server
With a flow this simple, do you think acoustic fingerprinting is a broad approach to use? Should we stop and take another approach? Where to best start?
We haven’t started anything yet (on the development side) on this regard, so I want to get other opinion if this is pursuit is worth it or moot.
2
If the audio you are searching for really is just a simple beep, you don’t want to go to the trouble of using acoustic fingerprinting, there’s a much simpler algorithm designed for exactly that purpose, its called the Goertzel Algorithm
. You most likely can find a library that implements the algorithm in your language of choice. This is the algorithm used by automated telephone systems to detect what digit on the phone keypad is pressed by listening to the beeps at various frequencies being sent.
For the algorithm to work best your beep should be “simple” in that it is either a sine wave at a single known frequency (or even better a “Dual Tone” beep with two sine waves at separate known frequencies which is what telephone keypad tones are). The algorithm will check a set of samples and determine if the frequencies are present above a preset loudness threshold. If they do, you will want to run an additional test to make sure that there isn’t a lot of extraneous noise going on at the time since, for example, white noise will excite all frequencies.
2