diff options
| -rw-r--r-- | src/Makefile.am | 2 | ||||
| -rw-r--r-- | src/inputprocessor.cc | 4 | ||||
| -rw-r--r-- | src/powermap.cc | 3 | ||||
| -rw-r--r-- | src/powermapfilter.cc | 52 | ||||
| -rw-r--r-- | src/powermapfilter.h | 47 | ||||
| -rw-r--r-- | src/settings.h | 45 | ||||
| -rw-r--r-- | test/powermaptest.cc | 9 | 
7 files changed, 154 insertions, 8 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 09df750..56e06b4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -59,6 +59,7 @@ libdg_la_SOURCES = \  	path.cc \  	powerlist.cc \  	powermap.cc \ +	powermapfilter.cc \  	random.cc \  	sample.cc \  	sample_selection.cc \ @@ -115,6 +116,7 @@ EXTRA_DIST = \  	platform.h \  	powerlist.h \  	powermap.h \ +	powermapfilter.h \  	random.h \  	range.h \  	rangemap.h \ diff --git a/src/inputprocessor.cc b/src/inputprocessor.cc index 6249c5b..ea4917e 100644 --- a/src/inputprocessor.cc +++ b/src/inputprocessor.cc @@ -32,8 +32,9 @@  #include "instrument.h" -#include "staminafilter.h"  #include "latencyfilter.h" +#include "powermapfilter.h" +#include "staminafilter.h"  #include "velocityfilter.h"  #include "cpp11fix.h" @@ -50,6 +51,7 @@ InputProcessor::InputProcessor(Settings& settings,  	filters.emplace_back(std::make_unique<StaminaFilter>(settings));  	filters.emplace_back(std::make_unique<LatencyFilter>(settings, random));  	filters.emplace_back(std::make_unique<VelocityFilter>(settings, random)); +	filters.emplace_back(std::make_unique<PowermapFilter>(settings));  }  bool InputProcessor::process(std::vector<event_t>& events, diff --git a/src/powermap.cc b/src/powermap.cc index a400cf9..6ffb74f 100644 --- a/src/powermap.cc +++ b/src/powermap.cc @@ -85,7 +85,8 @@ void Powermap::reset()  	fixed[0] = {0., 0.};  	fixed[1] = {.5, .5};  	fixed[2] = {1., 1.}; -	shelf = false; +	// FIXME: better false? +	shelf = true;  	updateSpline();  } diff --git a/src/powermapfilter.cc b/src/powermapfilter.cc new file mode 100644 index 0000000..da88482 --- /dev/null +++ b/src/powermapfilter.cc @@ -0,0 +1,52 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + *            powermapfilter.cc + * + *  Mon Apr 20 23:28:12 CEST 2020 + *  Copyright 2020 André Nusser + *  andre.nusser@googlemail.com + ****************************************************************************/ + +/* + *  This file is part of DrumGizmo. + * + *  DrumGizmo is free software; you can redistribute it and/or modify + *  it under the terms of the GNU Lesser General Public License as published by + *  the Free Software Foundation; either version 3 of the License, or + *  (at your option) any later version. + * + *  DrumGizmo is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU Lesser General Public License for more details. + * + *  You should have received a copy of the GNU Lesser General Public License + *  along with DrumGizmo; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#include "powermapfilter.h" + +#include "settings.h" + +PowermapFilter::PowermapFilter(Settings& settings) +	: settings(settings) +{ +} + +bool PowermapFilter::filter(event_t& event, size_t pos) +{ +	// the position is irrelevant for this filter +	(void) pos; + +	if (settings.enable_powermap.load()) +	{ +		powermap.setFixed0({settings.fixed0_x.load(), settings.fixed0_y.load()}); +		powermap.setFixed1({settings.fixed1_x.load(), settings.fixed1_y.load()}); +		powermap.setFixed2({settings.fixed2_x.load(), settings.fixed2_y.load()}); +		powermap.setShelf(settings.shelf.load()); + +		event.velocity = powermap.map(event.velocity); +	} + +	return true; +} diff --git a/src/powermapfilter.h b/src/powermapfilter.h new file mode 100644 index 0000000..263f809 --- /dev/null +++ b/src/powermapfilter.h @@ -0,0 +1,47 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + *            powermapfilter.h + * + *  Mon Apr 20 23:28:12 CEST 2020 + *  Copyright 2020 André Nusser + *  andre.nusser@googlemail.com + ****************************************************************************/ + +/* + *  This file is part of DrumGizmo. + * + *  DrumGizmo is free software; you can redistribute it and/or modify + *  it under the terms of the GNU Lesser General Public License as published by + *  the Free Software Foundation; either version 3 of the License, or + *  (at your option) any later version. + * + *  DrumGizmo is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU Lesser General Public License for more details. + * + *  You should have received a copy of the GNU Lesser General Public License + *  along with DrumGizmo; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA. + */ +#pragma once + +#include "inputfilter.h" +#include "powermap.h" + +struct Settings; + +class PowermapFilter +	: public InputFilter +{ +public: +	PowermapFilter(Settings& settings); + +	bool filter(event_t& event, std::size_t pos) override; + +	// Note getLatency not overloaded because this filter doesn't add latency. + +private: +	Settings& settings; +	Powermap powermap; +}; diff --git a/src/settings.h b/src/settings.h index 9fa3896..4755bb2 100644 --- a/src/settings.h +++ b/src/settings.h @@ -144,6 +144,16 @@ struct Settings  	// Current latency offset in ms - for UI  	Atomic<float> latency_current{0}; +	// Powermap parameters +	Atomic<bool> enable_powermap; +	Atomic<float> fixed0_x{0.}; +	Atomic<float> fixed0_y{0.}; +	Atomic<float> fixed1_x{.5}; +	Atomic<float> fixed1_y{.5}; +	Atomic<float> fixed2_x{1.}; +	Atomic<float> fixed2_y{1.}; +	Atomic<bool> shelf{true}; +  	Atomic<std::size_t> audition_counter{0};  	Atomic<std::string> audition_instrument;  	Atomic<float> audition_velocity; @@ -209,6 +219,15 @@ struct SettingsGetter  	SettingRef<float> latency_regain;  	SettingRef<float> latency_current; +	SettingRef<bool> enable_powermap; +	SettingRef<float> fixed0_x; +	SettingRef<float> fixed0_y; +	SettingRef<float> fixed1_x; +	SettingRef<float> fixed1_y; +	SettingRef<float> fixed2_x; +	SettingRef<float> fixed2_y; +	SettingRef<bool> shelf; +  	SettingRef<std::size_t> audition_counter;  	SettingRef<std::string> audition_instrument;  	SettingRef<float> audition_velocity; @@ -257,6 +276,14 @@ struct SettingsGetter  		, latency_stddev{settings.latency_stddev}  		, latency_regain{settings.latency_regain}  		, latency_current{settings.latency_current} +		, enable_powermap{settings.enable_powermap} +		, fixed0_x{settings.fixed0_x} +		, fixed0_y{settings.fixed0_y} +		, fixed1_x{settings.fixed1_x} +		, fixed1_y{settings.fixed1_y} +		, fixed2_x{settings.fixed2_x} +		, fixed2_y{settings.fixed2_y} +		, shelf{settings.shelf}  		, audition_counter{settings.audition_counter}  		, audition_instrument{settings.audition_instrument}  		, audition_velocity{settings.audition_velocity} @@ -321,6 +348,15 @@ public:  	Notifier<float> latency_regain;  	Notifier<float> latency_current; +	Notifier<bool> enable_powermap; +	Notifier<float> fixed0_x; +	Notifier<float> fixed0_y; +	Notifier<float> fixed1_x; +	Notifier<float> fixed1_y; +	Notifier<float> fixed2_x; +	Notifier<float> fixed2_y; +	Notifier<bool> shelf; +  	Notifier<std::size_t> audition_counter;  	Notifier<std::string> audition_instrument;  	Notifier<int> audition_velocity; @@ -383,6 +419,15 @@ public:  		EVAL(latency_regain);  		EVAL(latency_current); +		EVAL(enable_powermap); +		EVAL(fixed0_x); +		EVAL(fixed0_y); +		EVAL(fixed1_x); +		EVAL(fixed1_y); +		EVAL(fixed2_x); +		EVAL(fixed2_y); +		EVAL(shelf); +  		EVAL(audition_counter);  		EVAL(audition_instrument);  		EVAL(audition_velocity); diff --git a/test/powermaptest.cc b/test/powermaptest.cc index 18af707..3e94575 100644 --- a/test/powermaptest.cc +++ b/test/powermaptest.cc @@ -28,9 +28,6 @@  #include "../src/powermap.h" -// FIXME: -#include <iostream> -  class test_powermaptest  	: public DGUnit  { @@ -44,9 +41,9 @@ public:  	{  		Powermap powermap; -		// FIXME -		std::cout << powermap.map(.8) << std::endl; -		DGUNIT_ASSERT_EQUAL(powermap.map(.8), .8); +		// TODO +		// std::cout << powermap.map(.8) << std::endl; +		// DGUNIT_ASSERT_EQUAL(powermap.map(.8), .8);  	}  };  | 
