From fda69d46eab588a660f8b8cff6a828d458428cd9 Mon Sep 17 00:00:00 2001 From: karlstav Date: Tue, 19 May 2015 20:37:18 +0200 Subject: [PATCH] fix framerate handling, better center adjustment, cleaning --- cava.c | 50 ++++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/cava.c b/cava.c index d6b7704..d5770b4 100644 --- a/cava.c +++ b/cava.c @@ -46,6 +46,7 @@ int rc; // general: cleanup void cleanup() { + echo(); system("setfont /usr/share/consolefonts/Lat2-Fixed16.psf.gz >/dev/null 2>&1"); system("setterm -cursor on"); system("setterm -blank 10"); @@ -264,7 +265,7 @@ int main(int argc, char **argv) long int lpeak, hpeak; int bands = 25; int sleep = 0; - int i, n, o, bw, width, height, h, w, hs, ws, c, rest, virt, fixedbands, q; + int i, n, o, bw, height, h, w, c, rest, virt, fixedbands, q; int autoband = 1; float temp; double in[2 * (M / 2 + 1)]; @@ -296,7 +297,7 @@ Options:\n\ -c foreground color suported colors: red, green, yellow, magenta, cyan, white, blue, black (default: cyan)\n\ -C background color supported colors: same as above (default: no change)\n\ -s sensitivity sensitivity percentage, 0% - no response, 50% - half, 100% - normal, etc...\n\ - -f framerate FPS limit, if you are experiencing high CPU usage, try redcing this (default: 60)\n\ + -f framerate FPS limit, if you are experiencing high CPU usage, try redcing this (default: 60)\n\ -S \"scientific\" mode (disables most smoothing)\n\ -h print the usage\n\ -v print version\n\ @@ -352,6 +353,12 @@ Options:\n\ break; case 'f': // argument: framerate framerate = atoi(optarg); + if (framerate < 0) { + cleanup(); + fprintf(stderr, + "framerate can't be negative!\n"); + exit(EXIT_FAILURE); + } break; case 'c': // argument: foreground color col = 0; @@ -473,28 +480,24 @@ Options:\n\ } else bands = fixedbands; - getmaxyx(stdscr,hs,ws); + getmaxyx(stdscr,h,w); - - - if (bands > ws / 2 - 1)bands = ws / 2 - + if (bands > COLS / 2 - 1)bands = COLS / 2 - 1; //handle for user setting to many bars - height = hs - 1; - width = ws - bands - 1; + height = LINES - 1; - bw = width / bands; + bw = (COLS - bands - 1) / bands; // process [smoothing]: calculate gravity g = ((float)height / 400) * pow((60 / (float)framerate), 2.5); //if no bands are selected it tries to padd the default 20 if there is extra room - if (autoband == 1) bands = bands + ((ws - (bw * bands + bands - 1)) / + if (autoband == 1) bands = bands + ((COLS - (bw * bands + bands - 1)) / (bw + 1)); - width = width - bands - 1; //checks if there is stil extra room, will use this to center - rest = (((ws) - (bw * bands + bands - 1)) / 2) - 1; + rest = (COLS - bands * bw - bands + 1) / 2; if (rest < 0)rest = 0; #ifdef DEBUG @@ -563,8 +566,7 @@ Options:\n\ // output: check if terminal has been resized if (virt != 0) { - getmaxyx(stdscr,h,w); - if ( h != hs || w != ws) { + if ( LINES != h || COLS != w) { break; } } @@ -674,20 +676,20 @@ Options:\n\ switch (om) { case 1: - for (i = rest; i < bands; i++) { + for (i = 0; i < bands; i++) { if(f[i] > flastd[i]){//higher then last one - if (virt == 0) for (n = flastd[i] / 8; n < f[i] / 8; n++) for (q = 0; q < bw; q++) mvprintw((height - n), (i * bw) + q + i, "%d",8); - else for (n = flastd[i] / 8; n < f[i] / 8; n++) for (q = 0; q < bw; q++) mvaddwstr((height - n), (i * bw) + q + i, bars[7]); + if (virt == 0) for (n = flastd[i] / 8; n < f[i] / 8; n++) for (q = 0; q < bw; q++) mvprintw((height - n), (i * bw) + q + i + rest, "%d",8); + else for (n = flastd[i] / 8; n < f[i] / 8; n++) for (q = 0; q < bw; q++) mvaddwstr((height - n), (i * bw) + q + i + rest, bars[7]); if (f[i] % 8 != 0) { - if (virt == 0) for (q = 0; q < bw; q++) mvprintw( (height - n), (i * bw) + q + i, "%d",(f[i] % 8) ); - else for (q = 0; q < bw; q++) mvaddwstr( (height - n), (i * bw) + q + i, bars[(f[i] % 8) - 1]); + if (virt == 0) for (q = 0; q < bw; q++) mvprintw( (height - n), (i * bw) + q + i + rest, "%d",(f[i] % 8) ); + else for (q = 0; q < bw; q++) mvaddwstr( (height - n), (i * bw) + q + i + rest, bars[(f[i] % 8) - 1]); } }else if(f[i] < flastd[i]){//lower then last one - for (n = f[i] / 8; n < flastd[i]/8 + 1; n++) for (q = 0; q < bw; q++) mvaddstr( (height - n), (i*bw) + q + i, " "); + for (n = f[i] / 8; n < flastd[i]/8 + 1; n++) for (q = 0; q < bw; q++) mvaddstr( (height - n), (i*bw) + q + i + rest, " "); if (f[i] % 8 != 0) { - if (virt == 0) for (q = 0; q < bw; q++) mvprintw((height - f[i] / 8), (i * bw) + q + i, "%d",(f[i] % 8) ); - else for (q = 0; q < bw; q++) mvaddwstr((height - f[i] / 8), (i * bw) + q + i, bars[(f[i] % 8) - 1]); + if (virt == 0) for (q = 0; q < bw; q++) mvprintw((height - f[i] / 8), (i * bw) + q + i + rest, "%d",(f[i] % 8) ); + else for (q = 0; q < bw; q++) mvaddwstr((height - f[i] / 8), (i * bw) + q + i + rest, bars[(f[i] % 8) - 1]); } } @@ -703,8 +705,8 @@ Options:\n\ } - req.tv_sec = 0; - req.tv_nsec = (1 / (float)framerate) * 1000000000; //sleeping for set us + if (framerate <= 1) req.tv_sec = 1 / (float)framerate; + if (framerate > 1) req.tv_nsec = (1 / (float)framerate) * 1000000000; //sleeping for set us nanosleep (&req, NULL); #endif }