visualizer: scale automatically if multiplier is 1
This commit is contained in:
@@ -526,6 +526,9 @@ void Status::Changes::songID(int song_id)
|
||||
playing_song_scroll_begin = 0;
|
||||
first_line_scroll_begin = 0;
|
||||
second_line_scroll_begin = 0;
|
||||
# ifdef ENABLE_VISUALIZER
|
||||
myVisualizer->ResetAutoScaleMultiplier();
|
||||
# endif // ENABLE_VISUALIZER
|
||||
if (m_player_state != MPD::psStop)
|
||||
{
|
||||
auto &pl = myPlaylist->main();
|
||||
|
||||
@@ -148,8 +148,23 @@ void Visualizer::update()
|
||||
}
|
||||
|
||||
const ssize_t samples_read = data/sizeof(int16_t);
|
||||
std::for_each(buf, buf+samples_read, [](int16_t &sample) {
|
||||
int32_t tmp = sample * Config.visualizer_sample_multiplier;
|
||||
if (Config.visualizer_sample_multiplier == 1.0)
|
||||
{
|
||||
m_auto_scale_multiplier += 1.0/fps;
|
||||
std::for_each(buf, buf+samples_read, [this](int16_t &sample) {
|
||||
double scale = std::numeric_limits<int16_t>::min();
|
||||
scale /= sample;
|
||||
scale = fabs(scale);
|
||||
if (scale < m_auto_scale_multiplier)
|
||||
m_auto_scale_multiplier = scale;
|
||||
});
|
||||
}
|
||||
std::for_each(buf, buf+samples_read, [this](int16_t &sample) {
|
||||
int32_t tmp = sample;
|
||||
if (Config.visualizer_sample_multiplier != 1.0)
|
||||
tmp *= Config.visualizer_sample_multiplier;
|
||||
else if (m_auto_scale_multiplier <= 50.0) // limit the auto scale
|
||||
tmp *= m_auto_scale_multiplier;
|
||||
if (tmp < std::numeric_limits<int16_t>::min())
|
||||
sample = std::numeric_limits<int16_t>::min();
|
||||
else if (tmp > std::numeric_limits<int16_t>::max())
|
||||
@@ -474,6 +489,11 @@ void Visualizer::FindOutputID()
|
||||
}
|
||||
}
|
||||
|
||||
void Visualizer::ResetAutoScaleMultiplier()
|
||||
{
|
||||
m_auto_scale_multiplier = std::numeric_limits<double>::infinity();
|
||||
}
|
||||
|
||||
#endif // ENABLE_VISUALIZER
|
||||
|
||||
/* vim: set tabstop=4 softtabstop=4 shiftwidth=4 noexpandtab : */
|
||||
|
||||
@@ -60,6 +60,7 @@ struct Visualizer: Screen<NC::Window>, Tabbable
|
||||
void SetFD();
|
||||
void ResetFD();
|
||||
void FindOutputID();
|
||||
void ResetAutoScaleMultiplier();
|
||||
|
||||
private:
|
||||
void DrawSoundWave(int16_t *, ssize_t, size_t, size_t);
|
||||
@@ -78,6 +79,7 @@ private:
|
||||
|
||||
int m_fifo;
|
||||
size_t m_samples;
|
||||
double m_auto_scale_multiplier;
|
||||
# ifdef HAVE_FFTW3_H
|
||||
size_t m_fftw_results;
|
||||
double *m_fftw_input;
|
||||
|
||||
Reference in New Issue
Block a user