[Note: the version included in i4b does not output any data you can plot, but will just print the values of the tones it detected. -hm] Poul-Henning Kamp wrote: ------------------------ I remember that somebody asked about this long time ago, so I sat down and hacked a digital filter for that. The following piece of code will read a ".g711a" file, and output 9 columns of data. The first is the linear value of the sample, the other 8 are strength of the 8 DTMF tones. Try to run the "beep.g711a" file from i4b through it, and plot the output columns with gnuplot. It seems Hellmuth pressed a '1' :-) The implementation is a recursive resonance filter, actually 8 of them, one for each frequency, done in floating point. With a little attention to rounding, it can be done just as good, and much faster in integer math, in fact 16 bit should be enough, but may not be faster than 32bit. The "POLRAD" quantity determines the resonance width of the filters, if you make it too low, it will confuse tones and recognize them where they are not. If you make it too high (never, ever >= 1.0!) it will take longer to react and maybe not catch a slightly offbeat tone. If you set it above or equal to 1.0 you get a tone generator. This could also be a good basis for a 300Baud FSK modem emulation. It seems that the .g711a files are bit-flipped, therefore the flip[] array trick in this code. The alaw->linear converter is lifted from sox. Now, who writes the answering-machine to end all answering machines for i4b ? Poul-Henning -- Poul-Henning Kamp FreeBSD coreteam member phk@FreeBSD.ORG "Real hackers run -current on their laptop." "ttyv0" -- What UNIX calls a $20K state-of-the-art, 3D, hi-res color terminal