diff --git a/src/visualizer.cpp b/src/visualizer.cpp index 1e887112..7ca3a815 100644 --- a/src/visualizer.cpp +++ b/src/visualizer.cpp @@ -362,22 +362,26 @@ void Visualizer::DrawSoundEllipse(int16_t *buf, ssize_t samples, size_t, size_t // is skinner or wider than this, instead of a circle it will be an ellipse. void Visualizer::DrawSoundEllipseStereo(int16_t *buf_left, int16_t *buf_right, ssize_t samples, size_t half_height) { - const size_t half_width = w.getWidth()/2; + const size_t width = w.getWidth(); + const size_t left_half_width = width/2; + const size_t right_half_width = width - left_half_width; + const size_t top_half_height = half_height; + const size_t bottom_half_height = w.getHeight() - half_height; // Makes the radius of each ring be approximately 2 cells wide. const int32_t radius = 2*Config.visualizer_colors.size(); int32_t x, y; for (ssize_t i = 0; i < samples; ++i) { - x = double(buf_left[i]) * half_width / 32768.0; - y = double(buf_right[i]) * half_height / 32768.0; + x = buf_left[i]/32768.0 * (buf_left[i] < 0 ? left_half_width : right_half_width); + y = buf_right[i]/32768.0 * (buf_right[i] < 0 ? top_half_height : bottom_half_height); // The arguments to the toColor function roughly follow a circle equation where // the center is not centered around (0,0). For example (x - w)^2 + (y-h)+2 = r^2 // centers the circle around the point (w,h). Because fonts are not all the same // size, this will not always generate a perfect circle. w << toColor(sqrt(x*x + 4*y*y), radius) - << NC::XY(half_width + x, half_height + y) + << NC::XY(left_half_width + x, top_half_height + y) << Config.visualizer_chars[1] << NC::Color::End; }