On Thu, Jan 24, 2008 at 11:41:04AM -0800, maxim wexler wrote: > Anybody know of a gentoo/linux tone generator that > will output test tones, sine waves, triangle waves and > the like. > > Prefer command line/ncurses. >
One of my friends coded something like this once as a plug-in for XMMS. Can't seem to find it now. Perhaps you'd have better luck than I. On the other hand, a little bit of C++ should be fairly easy. First you need the 'play' program from sox. 'play' can play files in the 'raw' format, which is just a stream of words that gives the amplitude of the waveform. For example play -t raw -s l -f s -c 1 -r 30000 - takes as input stdin, plays mono channel sound from a stream that is signed-linear, 300000 hertz sample rate, and with amplitude described by 32 bit long word. Next you just need a waveform generator. A C++ snipplet from something I cobbled together several years ago (yes yes, my coding practice can stand much improvement, so sue me) #include <stdio.h> #include <unistd.h> #include <math.h> int main() { int rate = 30000; int coramp = 0xCEFFFFF; int tempamp=0; float totalamp=0; int f_count; while(1) for(f_count=0; f_count < rate; f_count++) { totalamp=sinf( ((float)f_count) * 440 / rate * 2 * M_PI); tempamp = (int) (coramp * totalamp); printf("%c%c%c%c%c%c%c%c", (char) (tempamp), (char) (tempamp >> 8), (char) (tempamp >> 16), (char) (tempamp >> 24), (char) (tempamp), (char) (tempamp >> 8), (char) (tempamp >> 16), (char) (tempamp >> 24)); } return 0; } Yes, it is an infinite loop. The sinf makes it a sine wave. You can code your own triangle wave. THe 440 makes it output A-440. It is the frequency. coramp is an amplifying factor. compile it, run it like ./a.out | play -t raw -s l -f s -c 1 -r 30000 - And you should get A-440 out of your speakers. W -- Willie W. Wong [EMAIL PROTECTED] 408 Fine Hall, Department of Mathematics, Princeton University, Princeton A mathematician's reputation rests on the number of bad proofs he has given. -- gentoo-user@lists.gentoo.org mailing list