I decided to share my research about tone recognition, so I made a quick project that does just that...
It all started with this thread: http://www.vbforums.com/showthread.php?t=325457 , I wanted to recognize the buttons you press on the phone when dialing out. I wanted to keep a record of all calls comming in (caller id), and calls going out (when you call someone).
I attached 2 projects, first "ToneRecognition.zip" is the actual tone recognition project, and "CreateSineWave.zip" is a project that creates wav files that make the same sound as when you press the buttons on the phone (since most of you probably won't be able to bring the sound from the phone line into your computer)
So, first run the CreateSineWave project to create the wav files, then run the ToneRecognition program, double click on the wav files to play them so that the program can recognize them.
I have a Pentium 4, 1.4 GHz, and it takes ~ 500 ms to recognize a buffer that is 100 ms, that means I need a computer that is 5 times faster !! to recognize all buffers...
This program is made entirely in Visual Basic, and VB is very slow on loops, if you convert the code in C++ (wich I did), it will take ~ 10 ms to recognize the 100 ms sound...
Before you try... don't record from the microphone, and put the phone's speaker close to the microphone to test this, it won't work, I've set up the program to recognize the sound when there is a 5% difference between the unrecognized sound to the recognized sound, and when you do it with the microphone it won't work, the diference is smaller than that. Just test with the wav files from the CreateSineWave project...