diff options
| -rw-r--r-- | plugin/Makefile.mingw32.in | 1 | ||||
| -rw-r--r-- | src/Makefile.am | 2 | ||||
| -rw-r--r-- | src/inputprocessor.cc | 51 | ||||
| -rw-r--r-- | src/inputprocessor.h | 1 | ||||
| -rw-r--r-- | src/powermapfilter.cc | 54 | ||||
| -rw-r--r-- | src/powermapfilter.h | 47 | 
6 files changed, 151 insertions, 5 deletions
| diff --git a/plugin/Makefile.mingw32.in b/plugin/Makefile.mingw32.in index c577e02..db4d279 100644 --- a/plugin/Makefile.mingw32.in +++ b/plugin/Makefile.mingw32.in @@ -39,6 +39,7 @@ DG_SRC = \  	@top_srcdir@/src/path.cc \  	@top_srcdir@/src/powerlist.cc \  	@top_srcdir@/src/powermap.cc \ +	@top_srcdir@/src/powermapfilter.cc \  	@top_srcdir@/src/random.cc \  	@top_srcdir@/src/sample.cc \  	@top_srcdir@/src/sample_selection.cc \ 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..2da5dbc 100644 --- a/src/inputprocessor.cc +++ b/src/inputprocessor.cc @@ -32,12 +32,53 @@  #include "instrument.h" -#include "staminafilter.h"  #include "latencyfilter.h" +#include "powermapfilter.h" +#include "staminafilter.h"  #include "velocityfilter.h"  #include "cpp11fix.h" +class VelocityStorer +	: public InputFilter +{ +public: +	VelocityStorer(float& original_velocity) +		: original_velocity(original_velocity) +	{ +	} + +	bool filter(event_t& event, std::size_t pos) override +	{ +		original_velocity = event.velocity; +		return true; +	} + +private: +	float& original_velocity; +}; + +class Reporter +	: public InputFilter +{ +public: +	Reporter(Settings& settings, float& original_velocity) +		: settings(settings) +		, original_velocity(original_velocity) +	{ +	} + +	bool filter(event_t& event, std::size_t pos) override +	{ +		settings.velocity_modifier_current.store(event.velocity / original_velocity); +		return true; +	} + +private: +	Settings& settings; +	float& original_velocity; +}; +  InputProcessor::InputProcessor(Settings& settings,                                 DrumKit& kit,                                 EventsDS& events_ds, @@ -47,9 +88,12 @@ InputProcessor::InputProcessor(Settings& settings,  	, settings(settings)  {  	// Build filter list +	filters.emplace_back(std::make_unique<PowermapFilter>(settings)); +	filters.emplace_back(std::make_unique<VelocityStorer>(original_velocity));  	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<Reporter>(settings, original_velocity));  }  bool InputProcessor::process(std::vector<event_t>& events, @@ -178,7 +222,7 @@ bool InputProcessor::processOnset(event_t& event, std::size_t pos,  		return false;  	} -	auto const original_level = event.velocity; +	original_velocity = event.velocity;  	for(auto& filter : filters)  	{  		// This line might change the 'event' variable @@ -208,9 +252,6 @@ bool InputProcessor::processOnset(event_t& event, std::size_t pos,  		return false;  	} -	auto const selected_level = (sample->getPower() - power_min)/power_span; -	settings.velocity_modifier_current.store(selected_level/original_level); -  	events_ds.startAddingNewGroup(instrument_id);  	for(Channel& ch: kit.channels)  	{ diff --git a/src/inputprocessor.h b/src/inputprocessor.h index 546f348..3c2cd5a 100644 --- a/src/inputprocessor.h +++ b/src/inputprocessor.h @@ -67,4 +67,5 @@ private:  	std::vector<std::unique_ptr<InputFilter>> filters;  	Settings& settings; +	float original_velocity{0.0f};  }; diff --git a/src/powermapfilter.cc b/src/powermapfilter.cc new file mode 100644 index 0000000..45df51e --- /dev/null +++ b/src/powermapfilter.cc @@ -0,0 +1,54 @@ +/* -*- 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; + +	settings.powermap_input.store(event.velocity); +	if (settings.enable_powermap.load()) +	{ +		powermap.setFixed0({settings.powermap_fixed0_x.load(), settings.powermap_fixed0_y.load()}); +		powermap.setFixed1({settings.powermap_fixed1_x.load(), settings.powermap_fixed1_y.load()}); +		powermap.setFixed2({settings.powermap_fixed2_x.load(), settings.powermap_fixed2_y.load()}); +		powermap.setShelf(settings.powermap_shelf.load()); + +		event.velocity = powermap.map(event.velocity); +	} +	settings.powermap_output.store(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; +}; | 
