From 424075047c41b06945801baca104a9ffb23032a3 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 5 Nov 2017 12:49:16 +0100 Subject: Add stddev scalar to sample selection. --- src/instrument.cc | 2 +- src/powerlist.cc | 9 ++++++++- src/powerlist.h | 7 +++++-- src/settings.h | 5 +++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/instrument.cc b/src/instrument.cc index 466acc1..077ae55 100644 --- a/src/instrument.cc +++ b/src/instrument.cc @@ -33,7 +33,7 @@ Instrument::Instrument(Settings& settings, Random& rand) : settings(settings) , rand(rand) - , powerlist(rand) + , powerlist(rand, settings) { DEBUG(instrument, "new %p\n", this); mod = 1.0; diff --git a/src/powerlist.cc b/src/powerlist.cc index b5e7c84..37a13a3 100644 --- a/src/powerlist.cc +++ b/src/powerlist.cc @@ -38,6 +38,9 @@ #endif #include +#include "random.h" +#include "settings.h" + /** * Minimum sample set size. * Smaller means wider 'velocity groups'. @@ -50,8 +53,9 @@ unsigned int const MIN_SAMPLE_SET_SIZE = 26u; //#define AUTO_CALCULATE_POWER unsigned int const LOAD_SIZE = 500u; -PowerList::PowerList(Random& rand) +PowerList::PowerList(Random& rand, Settings& settings) : rand(rand) + , settings(settings) { power_max = 0; power_min = 100000000; @@ -204,6 +208,8 @@ void PowerList::finalise() Sample* PowerList::get(level_t level) { + auto velocity_stddev = settings.velocity_stddev.load(); + if(!samples.size()) { return nullptr; // No samples to choose from. @@ -226,6 +232,7 @@ Sample* PowerList::get(level_t level) // Cut off mean value with stddev/2 in both ends in order to make room for // downwards expansion on velocity 0 and upwards expansion on velocity 1. float mean = level * (power_span - stddev) + (stddev / 2.0); + stddev *= velocity_stddev; float power{0.f}; diff --git a/src/powerlist.h b/src/powerlist.h index 9066ce1..b0938af 100644 --- a/src/powerlist.h +++ b/src/powerlist.h @@ -29,12 +29,14 @@ #include #include "sample.h" -#include "random.h" + +class Random; +class Settings; class PowerList { public: - PowerList(Random& rand); + PowerList(Random& rand, Settings& settings); void add(Sample* s); void finalise(); ///< Call this when no more samples will be added. @@ -49,6 +51,7 @@ private: }; Random& rand; + Settings& settings; std::vector samples; float power_max; diff --git a/src/settings.h b/src/settings.h index 0b73cf2..8f7c057 100644 --- a/src/settings.h +++ b/src/settings.h @@ -73,6 +73,7 @@ struct Settings Atomic enable_velocity_modifier{true}; Atomic velocity_modifier_falloff{0.5f}; Atomic velocity_modifier_weight{0.25f}; + Atomic velocity_stddev{1.0f}; Atomic enable_velocity_randomiser{false}; Atomic velocity_randomiser_weight{0.1f}; @@ -113,6 +114,7 @@ struct SettingsGetter SettingRef enable_velocity_modifier; SettingRef velocity_modifier_falloff; SettingRef velocity_modifier_weight; + SettingRef velocity_stddev; SettingRef enable_velocity_randomiser; SettingRef velocity_randomiser_weight; @@ -147,6 +149,7 @@ struct SettingsGetter , enable_velocity_modifier{settings.enable_velocity_modifier} , velocity_modifier_falloff{settings.velocity_modifier_falloff} , velocity_modifier_weight{settings.velocity_modifier_weight} + , velocity_stddev{settings.velocity_stddev} , enable_velocity_randomiser{settings.enable_velocity_randomiser} , velocity_randomiser_weight{settings.velocity_randomiser_weight} , samplerate{settings.samplerate} @@ -185,6 +188,7 @@ public: Notifier enable_velocity_modifier; Notifier velocity_modifier_falloff; Notifier velocity_modifier_weight; + Notifier velocity_stddev; Notifier enable_velocity_randomiser; Notifier velocity_randomiser_weight; @@ -225,6 +229,7 @@ public: EVAL(enable_velocity_modifier); EVAL(velocity_modifier_falloff); EVAL(velocity_modifier_weight); + EVAL(velocity_stddev); EVAL(enable_velocity_randomiser); EVAL(velocity_randomiser_weight); -- cgit v1.2.3