add visualizer_sample_multiplier config option
This commit is contained in:
@@ -2184,6 +2184,31 @@ void SetSelectedItemsPriority::run()
|
||||
myPlaylist->SetSelectedItemsPriority(prio);
|
||||
}
|
||||
|
||||
bool SetVisualizerSampleMultiplier::canBeRun() const
|
||||
{
|
||||
# ifdef ENABLE_VISUALIZER
|
||||
return myScreen == myVisualizer;
|
||||
# else
|
||||
return false;
|
||||
# endif // ENABLE_VISUALIZER
|
||||
}
|
||||
|
||||
void SetVisualizerSampleMultiplier::run()
|
||||
{
|
||||
# ifdef ENABLE_VISUALIZER
|
||||
using Global::wFooter;
|
||||
|
||||
Statusbar::lock();
|
||||
Statusbar::put() << "Set visualizer sample multiplier: ";
|
||||
std::string smultiplier = wFooter->getString();
|
||||
Statusbar::unlock();
|
||||
|
||||
double multiplier = fromString<double>(smultiplier);
|
||||
lowerBoundCheck(multiplier, 1.0);
|
||||
Config.visualizer_sample_multiplier = multiplier;
|
||||
# endif // ENABLE_VISUALIZER
|
||||
}
|
||||
|
||||
bool FilterPlaylistOnPriorities::canBeRun() const
|
||||
{
|
||||
return myScreen == myPlaylist;
|
||||
@@ -2612,6 +2637,7 @@ void populateActions()
|
||||
insert_action(new Actions::ToggleMediaLibrarySortMode());
|
||||
insert_action(new Actions::RefetchLyrics());
|
||||
insert_action(new Actions::SetSelectedItemsPriority());
|
||||
insert_action(new Actions::SetVisualizerSampleMultiplier());
|
||||
insert_action(new Actions::FilterPlaylistOnPriorities());
|
||||
insert_action(new Actions::ShowSongInfo());
|
||||
insert_action(new Actions::ShowArtistInfo());
|
||||
|
||||
@@ -52,9 +52,9 @@ enum class Type
|
||||
ToggleSpaceMode, ToggleAddMode, ToggleMouse, ToggleBitrateVisibility,
|
||||
AddRandomItems, ToggleBrowserSortMode, ToggleLibraryTagType,
|
||||
ToggleMediaLibrarySortMode, RefetchLyrics,
|
||||
SetSelectedItemsPriority, FilterPlaylistOnPriorities, ShowSongInfo,
|
||||
ShowArtistInfo, ShowLyrics, Quit, NextScreen, PreviousScreen, ShowHelp,
|
||||
ShowPlaylist, ShowBrowser, ChangeBrowseMode, ShowSearchEngine,
|
||||
SetSelectedItemsPriority, SetVisualizerSampleMultiplier, FilterPlaylistOnPriorities,
|
||||
ShowSongInfo, ShowArtistInfo, ShowLyrics, Quit, NextScreen, PreviousScreen,
|
||||
ShowHelp, ShowPlaylist, ShowBrowser, ChangeBrowseMode, ShowSearchEngine,
|
||||
ResetSearchEngine, ShowMediaLibrary, ToggleMediaLibraryColumnsMode,
|
||||
ShowPlaylistEditor, ShowTagEditor, ShowOutputs, ShowVisualizer,
|
||||
ShowClock, ShowServerInfo,
|
||||
@@ -959,6 +959,16 @@ protected:
|
||||
virtual void run();
|
||||
};
|
||||
|
||||
struct SetVisualizerSampleMultiplier : public BaseAction
|
||||
{
|
||||
SetVisualizerSampleMultiplier()
|
||||
: BaseAction(Type::SetVisualizerSampleMultiplier, "set_visualizer_sample_multiplier") { }
|
||||
|
||||
protected:
|
||||
virtual bool canBeRun() const;
|
||||
virtual void run();
|
||||
};
|
||||
|
||||
struct FilterPlaylistOnPriorities : public BaseAction
|
||||
{
|
||||
FilterPlaylistOnPriorities()
|
||||
|
||||
@@ -540,6 +540,7 @@ void BindingsConfiguration::generateDefaults()
|
||||
bind(k, Actions::Type::MoveSortOrderUp);
|
||||
bind(k, Actions::Type::MoveSelectedItemsUp);
|
||||
bind(k, Actions::Type::ToggleMediaLibrarySortMode);
|
||||
bind(k, Actions::Type::SetVisualizerSampleMultiplier);
|
||||
}
|
||||
if (notBound(k = stringToKey("n")))
|
||||
{
|
||||
|
||||
@@ -374,6 +374,7 @@ void write_bindings(NC::Scrollpad &w)
|
||||
# if defined(ENABLE_VISUALIZER) && defined(HAVE_FFTW3_H)
|
||||
key_section(w, "Music visualizer");
|
||||
key(w, Type::PressSpace, "Toggle visualization type");
|
||||
key(w, Type::SetVisualizerSampleMultiplier, "Set visualizer sample multiplier");
|
||||
# endif // ENABLE_VISUALIZER && HAVE_FFTW3_H
|
||||
|
||||
mouse_section(w, "Global");
|
||||
|
||||
@@ -221,6 +221,11 @@ bool Configuration::read(const std::string &config_path)
|
||||
p.add("visualizer_in_stereo", yes_no(
|
||||
visualizer_in_stereo, true
|
||||
));
|
||||
p.add("visualizer_sample_multiplier", assign_default<double>(
|
||||
visualizer_sample_multiplier, 1.0, [](double v) {
|
||||
lowerBoundCheck(v, 1.0);
|
||||
return v;
|
||||
}));
|
||||
p.add("visualizer_sync_interval", assign_default<unsigned>(
|
||||
visualizer_sync_interval, 30, [](unsigned v) {
|
||||
return boost::posix_time::seconds(v);
|
||||
|
||||
@@ -176,6 +176,7 @@ struct Configuration
|
||||
boost::posix_time::seconds playlist_disable_highlight_delay;
|
||||
boost::posix_time::seconds visualizer_sync_interval;
|
||||
|
||||
double visualizer_sample_multiplier;
|
||||
double locked_screen_width_part;
|
||||
|
||||
size_t selected_item_prefix_length;
|
||||
|
||||
@@ -113,9 +113,19 @@ void Visualizer::update()
|
||||
else
|
||||
# endif // HAVE_FFTW3_H
|
||||
draw = &Visualizer::DrawSoundWave;
|
||||
|
||||
|
||||
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 (tmp < std::numeric_limits<int16_t>::min())
|
||||
sample = std::numeric_limits<int16_t>::min();
|
||||
else if (tmp > std::numeric_limits<int16_t>::max())
|
||||
sample = std::numeric_limits<int16_t>::max();
|
||||
else
|
||||
sample = tmp;
|
||||
});
|
||||
|
||||
w.clear();
|
||||
ssize_t samples_read = data/sizeof(int16_t);
|
||||
if (Config.visualizer_in_stereo)
|
||||
{
|
||||
int16_t buf_left[samples_read/2], buf_right[samples_read/2];
|
||||
|
||||
Reference in New Issue
Block a user