diff --git a/src/visualizer.cpp b/src/visualizer.cpp index b4f2fcb5..c09644f5 100644 --- a/src/visualizer.cpp +++ b/src/visualizer.cpp @@ -118,6 +118,7 @@ void Visualizer::DrawSoundWave(int16_t *buf, ssize_t data) const int samples_per_col = data/sizeof(int16_t)/COLS; const int half_height = MainHeight/2; *w << fmtAltCharset; + double prev_point_pos; for (int i = 0; i < COLS; ++i) { double point_pos = 0; @@ -127,6 +128,16 @@ void Visualizer::DrawSoundWave(int16_t *buf, ssize_t data) point_pos /= std::numeric_limits::max(); point_pos *= half_height; *w << XY(i, half_height+point_pos) << '`'; + if (i && abs(prev_point_pos-point_pos) > 2) + { + // if gap is too big. intermediate values are needed + // since without them all we see are blinking points + const int breakpoint = std::max(prev_point_pos, point_pos); + const int half = (prev_point_pos+point_pos)/2; + for (int k = std::min(prev_point_pos, point_pos)+1; k < breakpoint; k += 2) + *w << XY(i-(k < half), half_height+k) << '`'; + } + prev_point_pos = point_pos; } *w << fmtAltCharsetEnd; }