Clear samples of the visualizer when playback is stopped

This commit is contained in:
Andrzej Rybczak
2020-12-13 23:32:13 +01:00
parent 261b23266d
commit 9b49acba56
3 changed files with 11 additions and 8 deletions

View File

@@ -90,10 +90,8 @@ Visualizer::Visualizer()
# endif // HAVE_FFTW3_H # endif // HAVE_FFTW3_H
if (Config.visualizer_in_stereo) if (Config.visualizer_in_stereo)
m_read_samples *= 2; m_read_samples *= 2;
m_sample_buffer.resize(m_read_samples); m_sample_buffer.resize(m_read_samples, 0);
m_temp_sample_buffer.resize(m_read_samples); m_temp_sample_buffer.resize(m_read_samples, 0);
memset(m_sample_buffer.data(), 0, m_sample_buffer.size()*sizeof(int16_t));
memset(m_temp_sample_buffer.data(), 0, m_sample_buffer.size()*sizeof(int16_t));
# ifdef HAVE_FFTW3_H # ifdef HAVE_FFTW3_H
m_fftw_results = DFT_TOTAL_SIZE/2+1; m_fftw_results = DFT_TOTAL_SIZE/2+1;
@@ -110,12 +108,11 @@ Visualizer::Visualizer()
void Visualizer::switchTo() void Visualizer::switchTo()
{ {
SwitchTo::execute(this); SwitchTo::execute(this);
w.clear(); Clear();
SetFD(); SetFD();
// negative infinity to toggle output in update() at least once // negative infinity to toggle output in update() at least once
m_timer = boost::posix_time::neg_infin; m_timer = boost::posix_time::neg_infin;
drawHeader(); drawHeader();
memset(m_sample_buffer.data(), 0, m_sample_buffer.size()*sizeof(int16_t));
# ifdef HAVE_FFTW3_H # ifdef HAVE_FFTW3_H
GenLogspace(); GenLogspace();
m_bar_heights.reserve(w.getWidth()); m_bar_heights.reserve(w.getWidth());
@@ -639,6 +636,12 @@ void Visualizer::GenLogspace()
/**********************************************************************/ /**********************************************************************/
void Visualizer::Clear()
{
w.clear();
std::fill(m_sample_buffer.begin(), m_sample_buffer.end(), 0);
}
void Visualizer::ToggleVisualizationType() void Visualizer::ToggleVisualizationType()
{ {
switch (Config.visualizer_type) switch (Config.visualizer_type)

View File

@@ -54,7 +54,7 @@ struct Visualizer: Screen<NC::Window>, Tabbable
virtual bool isLockable() override { return true; } virtual bool isLockable() override { return true; }
virtual bool isMergable() override { return true; } virtual bool isMergable() override { return true; }
// private members void Clear();
void ToggleVisualizationType(); void ToggleVisualizationType();
void SetFD(); void SetFD();
void ResetFD(); void ResetFD();

View File

@@ -518,7 +518,7 @@ void Status::Changes::playerState()
} }
# ifdef ENABLE_VISUALIZER # ifdef ENABLE_VISUALIZER
if (isVisible(myVisualizer)) if (isVisible(myVisualizer))
myVisualizer->main().clear(); myVisualizer->Clear();
# endif // ENABLE_VISUALIZER # endif // ENABLE_VISUALIZER
break; break;
default: default: