diff --git a/src/music_visualizer.c b/src/music_visualizer.c index 50fd705..92bcb7e 100644 --- a/src/music_visualizer.c +++ b/src/music_visualizer.c @@ -53,7 +53,7 @@ } void -print_visual(unsigned int* fftBuf, unsigned int* fftAvg) +print_visual(unsigned int* fftAvg) { int i; @@ -133,9 +133,9 @@ free_status_st(status); status = get_current_status(session); if (status) { - if ((sampleRate = status->sampleRate) >= 192000) { + if (((sampleRate = status->sampleRate) >= 192000) && ADAPTIVE_SAMPLING) { nsamples = N_SAMPLES/4; - } else if (sampleRate >= 96000 && sampleRate < 192000) { + } else if (ADAPTIVE_SAMPLING && (sampleRate >= 96000 && sampleRate < 192000)) { nsamples = N_SAMPLES/2; } else if (sampleRate < 96000) { nsamples = N_SAMPLES; @@ -150,13 +150,16 @@ // clear screen for printing (only if new data on fifo) if(cnt == NICENESS) { erase(); - print_visual(fftBuf, fftAvg); + print_visual(fftAvg); } } #ifdef STATUS_CHECK // print mpd status even if no new data is avaiable print_mpd_status(status, maxC, maxR/2+maxR/6); - print_rate_info(sampleRate, nsamples, maxC, status->song->duration_sec); + if (status && status->song && status->song->duration_sec) { + print_rate_info(sampleRate, nsamples, maxC, status->song->duration_sec, \ + (int)fftAvg[0]); + } #endif // refresh screen refresh(); diff --git a/src/settings.h b/src/settings.h index 75543f0..c2da4f7 100644 --- a/src/settings.h +++ b/src/settings.h @@ -18,6 +18,12 @@ // (a power of 2) #define N_SAMPLES 1024 +// if adaptive sampling should be used +// (adjust N_SAMPLES to sample rate of current song) +// uses N_SAMPLES as maximum for 44100 Hz +// set to 0 to disable +#define ADAPTIVE_SAMPLING 1 + // path to the MPD named pipe // (defined: 'mpd.conf') #define MPD_FIFO "/tmp/mpd.fifo" @@ -40,3 +46,4 @@ // adjust lateral shift on screen // might prevent full borders from being printed, adjust #define X_CORRECTION 1 + diff --git a/src/utils_curses.c b/src/utils_curses.c index 98fa38e..e8d4469 100644 --- a/src/utils_curses.c +++ b/src/utils_curses.c @@ -60,23 +60,31 @@ } void -print_rate_info(const int rate, const int nsamples, const int maxC, int seed) +print_rate_info(const int rate, const int nsamples, const int maxC, int seed, int amplitude) { int center = (int) maxC/2-18; // adjust to screen center - + int i; srand(seed); color_set(rand() % 7, NULL); mvprintw(1, center, " || rate: %d - samples: %d || ", rate, nsamples); if (nsamples != 512 && rate > 0) { mvprintw(0, center, " --------------------------------- ", rate, nsamples); - mvprintw(2, center, " --------------------------------- ", rate, nsamples); + mvprintw(2, center, " -------------[mvc]--------------- ", rate, nsamples); } else if (rate == 0) { mvprintw(0, center, " ----------------------------- ", rate, nsamples); - mvprintw(2, center, " ----------------------------- ", rate, nsamples); + mvprintw(2, center, " -----------[mvc]------------- ", rate, nsamples); } else { mvprintw(0, center, " -------------------------------- ", rate, nsamples); - mvprintw(2, center, " -------------------------------- ", rate, nsamples); + mvprintw(2, center, " ------------[mvc]--------------- ", rate, nsamples); + } + for(i=0; i