diff --git a/doc/config b/doc/config index 28a1c45b..8a490183 100644 --- a/doc/config +++ b/doc/config @@ -47,6 +47,16 @@ #visualizer_output_name = "" # ## +## Note: Below parameter defines how often ncmpcpp +## has to "synchronize" visualizer and audio outputs. +## 30 seconds is optimal value, but if you experience +## synchronization problems, set it to lower value. +## Keep in mind that sane values start with >=10. +## +# +#visualizer_sync_interval = "30" +# +## ## Note: To enable spectrum frequency visualization ## you need to compile ncmpcpp with fftw3 support. ## diff --git a/doc/ncmpcpp.1 b/doc/ncmpcpp.1 index ec966134..8856312e 100644 --- a/doc/ncmpcpp.1 +++ b/doc/ncmpcpp.1 @@ -78,6 +78,9 @@ Path to mpd fifo output. This is needed to make music visualizer work (note that .B visualizer_output_name = NAME Name of output that provides data for visualizer. Needed to keep sound and visualization in sync. .TP +.B visualizer_sync_interval = SECONDS +Defines interval between syncing visualizer and audio outputs. +.TP .B visualizer_type = spectrum/wave Defines default visualizer type (spectrum is available only if ncmpcpp was compiled with fftw support). .TP diff --git a/src/settings.cpp b/src/settings.cpp index 2edb4016..3c95a42f 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -386,6 +386,7 @@ void NcmpcppConfig::SetDefaults() regex_type = 0; lines_scrolled = 2; search_engine_default_search_mode = 0; + visualizer_sync_interval = 30; selected_item_suffix_length = 0; now_playing_suffix_length = 0; # ifdef HAVE_LANGINFO_H @@ -1002,6 +1003,12 @@ void NcmpcppConfig::Read() search_engine_default_search_mode = mode; } } + else if (cl.find("visualizer_sync_interval") != std::string::npos) + { + unsigned interval = StrToInt(v); + if (interval) + visualizer_sync_interval = interval; + } else if (cl.find("song_window_title_format") != std::string::npos) { if (!v.empty()) diff --git a/src/settings.h b/src/settings.h index 7abf0e36..aea3e10b 100644 --- a/src/settings.h +++ b/src/settings.h @@ -240,6 +240,7 @@ struct NcmpcppConfig unsigned lines_scrolled; unsigned search_engine_default_search_mode; + unsigned visualizer_sync_interval; size_t selected_item_suffix_length; size_t now_playing_suffix_length; diff --git a/src/visualizer.cpp b/src/visualizer.cpp index c01bf9c5..01ccdac3 100644 --- a/src/visualizer.cpp +++ b/src/visualizer.cpp @@ -111,9 +111,10 @@ void Visualizer::Update() return; } - if (itsOutputID != -1 && Global::Timer.tv_sec > itsTimer.tv_sec+120) + if (itsOutputID != -1 && Global::Timer.tv_sec > itsTimer.tv_sec+Config.visualizer_sync_interval) { Mpd.DisableOutput(itsOutputID); + usleep(50000); Mpd.EnableOutput(itsOutputID); gettimeofday(&itsTimer, 0); }