#include #include #include #include "abuf.h" #include "guic.h" enum{ Gh1, Gh2, Gh3, Gh4, Gh5, Gh6, Gfreq, Gexit, }; char *keywords[] = { "h1", "h2", "h3", "h4", "h5", "h6", "freq", "exit", 0, }; void threadmain(int argc, char *argv[]) { Abuf ab; Event ev; double f, s; int i, t; double harm[6]; guistart(argv[1]); ainit(&ab, 1); f = miditofreq(69); for(i=0; i<6; i++) harm[i] = i == 0; for(t=0;;t++){ while(nbrecv(guichan, &ev) == 1){ switch(ev.k){ case Gfreq: f = miditofreq(ev.n); break; case Gexit: threadexitsall(0); default: harm[ev.k - Gh1] = ev.n / 127.0; break; } } s = 0; for(i=0; i<6; i++) s += sin(f*2*PI*(i+1)*t/SRATE) * harm[i] / (i+1); aputd(&ab, s/6); } }