diff --git a/cava.c b/cava.c index 7f1bf06..1d8912a 100644 --- a/cava.c +++ b/cava.c @@ -214,6 +214,7 @@ fifomusic(void* data) int main(int argc, char **argv) { + bool smode = false; pthread_t p_thread; int thr_id GCC_UNUSED; char *input = "alsa"; @@ -265,14 +266,15 @@ Options:\n\ \n\ -p 'fifo path' path to fifo (default '/tmp/mpd.fifo')\n\ \n\ - -c color suported colors: red, green, yellow, magenta, cyan, white, blue, black (default: cyan)\n\ + -c color suported colors: red, green, yellow, magenta, cyan, white, blue, black (default: cyan)\n\ \n\ -C backround color supported colors: same as above (default: no change)\n\ \n\ -s sensitivity % sensitivity in percent, 0 means no respons 100 is normal 50 half 200 double and so forth\n\ \n\ -f framerate max frames per second to be drawn, if you are experiencing high CPU usage, try redcing this (default: 60)\n\ -\n"; +\n\ + -S \"scientific\" mode (disables most smoothing)"; //**END INIT**// setlocale(LC_ALL, ""); @@ -286,7 +288,7 @@ Options:\n\ for (i = 0; i < M; i++)shared[i] = 0; //**arg handler**// - while ((c = getopt (argc, argv, "p:i:b:d:s:f:c:C:h")) != -1) + while ((c = getopt (argc, argv, "p:i:b:d:s:f:c:C:h:S")) != -1) switch (c) { case 'p': path = optarg; @@ -348,6 +350,9 @@ Options:\n\ exit(1); } break; + case 'S': + smode = true; + break; case 'h': printf ("%s", usage); return 0; @@ -422,9 +427,11 @@ Options:\n\ #endif bw = width / bands; - g = ((float)height / 1000) * pow((60 / (float)framerate), - 2.5); //calculating gravity - + if (!smode) + { + g = ((float)height / 1000) * pow((60 / (float)framerate), + 2.5); //calculating gravity + } //if no bands are selected it tries to padd the default 20 if there is extra room if (autoband == 1) bands = bands + (((w.ws_col) - (bw * bands + bands - 1)) / (bw + 1)); @@ -439,7 +446,7 @@ Options:\n\ (int)w.ws_col, bands, bw, rest); #endif -//**calculating cutof frequencies**/ +//**calculating cutoff frequencies**/ for (n = 0; n < bands + 1; n++) { fc[n] = 10000 * pow(10, -2.37 + ((((float)n + 1) / ((float)bands + 1)) * 2.37)); //decided to cut it at 10k, little interesting to hear above @@ -464,6 +471,7 @@ Options:\n\ } + //creating constants to weigh signal to frequency for (n = 0; n < bands; n++)k[n] = ((float)height * pow(log(lcf[n] + 1), @@ -551,27 +559,29 @@ Options:\n\ temp = peak[o] * k[o] * ((float)sens / 100); //multiplying with k and adjusting to sens settings if (temp > height)temp = height; //just in case - + f[o] = temp; //**falloff function**// + if (!smode) { + if (temp < flast[o]) { + f[o] = fpeak[o] - (g * fall[o] * fall[o]); + fall[o]++; + } else if (temp >= flast[o]) { + f[o] = temp; + fpeak[o] = f[o]; + fall[o] = 0; + } - if (temp < flast[o]) { - f[o] = fpeak[o] - (g * fall[o] * fall[o]); - fall[o]++; - } else if (temp >= flast[o]) { - f[o] = temp; - fpeak[o] = f[o]; - fall[o] = 0; - } - - //**smoothening**// + //**smoothening**// - fmem[o] += f[o]; - fmem[o] = fmem[o] * 0.55; - f[o] = fmem[o]; + fmem[o] += f[o]; + fmem[o] = fmem[o] * 0.55; + f[o] = fmem[o]; - flast[o] = f[o]; //memmory for falloff func + flast[o] = f[o]; //memmory for falloff func + } + if (f[o] < 0.125)f[o] = 0.125; #ifdef DEBUG @@ -591,17 +601,20 @@ Options:\n\ continue; } - /* MONSTERCAT STYLE EASING BY CW !aFrP90ZN26 */ - int z, m_y; - float m_o = 64 / bands; - for (z = 0; z < bands; z++) { - f[z] = f[z] * sm / smooth[(int)floor(z * m_o)]; - if (f[z] < 0.125)f[z] = 0.125; - for (m_y = z - 1; m_y >= 0; m_y--) { - f[m_y] = max(f[z] / pow(2, z - m_y), f[m_y]); - } - for (m_y = z + 1; m_y < bands; m_y++) { - f[m_y] = max(f[z] / pow(2, m_y - z), f[m_y]); + if (!smode) + { + /* MONSTERCAT STYLE EASING BY CW !aFrP90ZN26 */ + int z, m_y; + float m_o = 64 / bands; + for (z = 0; z < bands; z++) { + f[z] = f[z] * sm / smooth[(int)floor(z * m_o)]; + if (f[z] < 0.125)f[z] = 0.125; + for (m_y = z - 1; m_y >= 0; m_y--) { + f[m_y] = max(f[z] / pow(2, z - m_y), f[m_y]); + } + for (m_y = z + 1; m_y < bands; m_y++) { + f[m_y] = max(f[z] / pow(2, m_y - z), f[m_y]); + } } }