#include <math.h>
#include <string.h>
#include <stdio.h>

#define samplespersec 8000.0
#define duration 0.1 * samplespersec
#define pause 0.05 * samplespersec

float col[] = { 1209.0, 1336.0, 1477.0, 1633.0 };
float row[] = { 697.0, 770.0, 852.0, 941.0 };
char positions[] = "123A456B789C*0#D";

/* presume 8000 samples/second, mono, 8 bits/sample */
main(int argc, char *argv[]) {
	int i;
	char *ap, *cp;
	float rf, cf, ri, ci, amp;

	if (argc != 2)
		exit(1);
	ap = argv[1];
	while (*ap) {
		cp = strchr(positions, *ap);
		if (cp) {
			ci = col[(cp - positions) % 4];
			ri = row[(cp - positions) / 4];
			for (rf = 0.0, cf = 0.0, i=0; i < duration;
			     i++, rf += 2*M_PI/samplespersec*ri, cf += 2*M_PI/samplespersec*ci) {
				if (i < 64) amp = i;
				if (i > duration - 64) amp = duration - i;;
				putchar((sin(rf)*amp) + (sin(cf)*amp) + 128);
			}
			for (i = 0; i < pause; i++)
				putchar(128);
		}
		ap++;
	}
}

