improve quality of sound wave by drawing intermediate values between points
This commit is contained in:
@@ -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 samples_per_col = data/sizeof(int16_t)/COLS;
|
||||||
const int half_height = MainHeight/2;
|
const int half_height = MainHeight/2;
|
||||||
*w << fmtAltCharset;
|
*w << fmtAltCharset;
|
||||||
|
double prev_point_pos;
|
||||||
for (int i = 0; i < COLS; ++i)
|
for (int i = 0; i < COLS; ++i)
|
||||||
{
|
{
|
||||||
double point_pos = 0;
|
double point_pos = 0;
|
||||||
@@ -127,6 +128,16 @@ void Visualizer::DrawSoundWave(int16_t *buf, ssize_t data)
|
|||||||
point_pos /= std::numeric_limits<int16_t>::max();
|
point_pos /= std::numeric_limits<int16_t>::max();
|
||||||
point_pos *= half_height;
|
point_pos *= half_height;
|
||||||
*w << XY(i, half_height+point_pos) << '`';
|
*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;
|
*w << fmtAltCharsetEnd;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user