diff --git a/src/fft.c b/src/fft.c index 98ba2a3..5875846 100644 --- a/src/fft.c +++ b/src/fft.c @@ -79,7 +79,6 @@ { // normalize by dividing for the amplitude int i; - int old; for(i=0; i 0 means data to be read if ((ret = select(fifo+1, &set, NULL, NULL, NULL)) > 0) { // read data when avaiable - if (sampleRate == 96000) { - ret = read(fifo, (uint16_t*)buf, N_SAMPLES); - } else if (sampleRate < 96000) { - ret = read(fifo, (uint16_t*)buf, 2*N_SAMPLES); - } + // adapt to sample rate for buffer processing + // the first time default to 44100 setting + ret = read(fifo, (uint16_t*)buf, 2*nsamples); // process read buffer if(cnt == NICENESS) { process_fifo(buf, fftBuf, fftAvg, nsamples); @@ -134,12 +132,15 @@ // get mpd status free_status_st(status); status = get_current_status(session); - if ((sampleRate = status->sampleRate) == 96000) { - nsamples = N_SAMPLES/2; - } else if (sampleRate < 96000) { - nsamples = N_SAMPLES; + if (status) { + if ((sampleRate = status->sampleRate) >= 192000) { + nsamples = N_SAMPLES/4; + } else if (sampleRate >= 96000 && sampleRate < 192000) { + nsamples = N_SAMPLES/2; + } else if (sampleRate < 96000) { + nsamples = N_SAMPLES; + } } - /*fprintf(stderr,"%d\n", nsamples);*/ getstatus = false; // set alarm for status refresh alarm(STATUS_REFRESH); @@ -155,6 +156,7 @@ #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); #endif // refresh screen refresh(); diff --git a/src/utils_curses.c b/src/utils_curses.c index c1d0175..98fa38e 100644 --- a/src/utils_curses.c +++ b/src/utils_curses.c @@ -59,6 +59,27 @@ } } +void +print_rate_info(const int rate, const int nsamples, const int maxC, int seed) +{ + int center = (int) maxC/2-18; // adjust to screen center + + 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); + } else if (rate == 0) { + mvprintw(0, center, " ----------------------------- ", rate, nsamples); + mvprintw(2, center, " ----------------------------- ", rate, nsamples); + } else { + mvprintw(0, center, " -------------------------------- ", rate, nsamples); + mvprintw(2, center, " -------------------------------- ", rate, nsamples); + } +} + #ifdef STATUS_CHECK /* prints a STATUS structure to stdout */ diff --git a/src/utils_curses.h b/src/utils_curses.h index b9f7c9f..6629a17 100644 --- a/src/utils_curses.h +++ b/src/utils_curses.h @@ -11,6 +11,7 @@ WINDOW* curses_init(); void print_col(int col, int length, const int maxR, const int maxC); void print_row(int row, int length, const int maxR, const int maxC); +void print_rate_info(const int rate, const int nsamples, const int maxC, int seed); #ifdef STATUS_CHECK void print_mpd_status(STATUS* status, const int maxC, const int row); diff --git a/src/utils_mpd.c b/src/utils_mpd.c index 77ce5f1..fe8c4a0 100644 --- a/src/utils_mpd.c +++ b/src/utils_mpd.c @@ -25,8 +25,14 @@ uint32_t get_sample_rate(const struct mpd_status* status) { + uint32_t rate; const struct mpd_audio_format* format = mpd_status_get_audio_format(status); - uint32_t rate = format->sample_rate; + + if (format && format->sample_rate) { + rate = format->sample_rate; + } else { + rate = 0; + } return rate; } @@ -320,7 +326,7 @@ status->queueLenght = mpd_status_get_queue_length(mpdStatus); status->sampleRate = get_sample_rate((const struct mpd_status*)mpdStatus); - mpd_status_free (mpdStatus); - return status; + mpd_status_free (mpdStatus); + return status; } #endif