/* disco.c - flash X keyboard lights in disco effect from esd, ats@offog.org Based on Raster's extace hack. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #define SIZE 1024 #define BANDS 30 #define LOG 0x800000 #define LINEAR 0x1000000 #define WINDOW_FUNC 3 /* 3 is the default */ #define LIGHTS 3 gint lights[LIGHTS] = { 3, 15, 25 }; double triggerlevel[LIGHTS] = { 10.0, 10.0, 1.0 }; short audio[SIZE]; gint bands=BANDS; // to start with, should be configurable double audata[SIZE]; // (x2 ?? ) double auout[SIZE]; double audata_backup[SIZE]; double aufft[SIZE]; guint auval[SIZE]; gint sound; float scale; gint scalefixed=0; // its NOT fixed YET. (done dynamically) gint sensefixed=0; // its NOT fixed YET. (done dynamically) float scalefactor=10.0; // dynamically figured out by the program double levels[BANDS]; double *datawindow; double datawindowsum; gint window_func=WINDOW_FUNC; gint bands_per_block; gint sensitivity=240; // Brightness sensitivity, so the colortable gint axis_type=LOG; fftw_plan plan; // fft plan for fftw library void setup_datawindow(void) { gint i; gdouble *val; gdouble sumw; gint fftlen = SIZE/2; gint alpha = 1; val = g_malloc(SIZE*sizeof(double)); for(i=0;i SIZE/2) { if (sum > (2.0*(SIZE/2))) scalefactor = scalefactor - .80; if (sum > (1.25*(SIZE/2))) scalefactor = scalefactor - .150; if (sum > (1.15*(SIZE/2))) scalefactor = scalefactor - .025; if (sum > (1.05*(SIZE/2))) scalefactor = scalefactor - .009; if (sum < (1.05*(SIZE/2))) scalefactor = scalefactor - .001; goto recalc; } } scalefixed = 1; for (i=1; i triggerlevel[i]) ? '#' : ' '); /*myatom = XInternAtom(dpy, "Num Lock", False); XkbSetNamedIndicator(dpy, myatom, True, (levels[lights[i]]>triggerlevel[i]) ? True : False, False, False);*/ } printf("\r"); fflush(stdout); /* putchar(27);putchar('[');putchar('H'); for (i=0; i