diff options
| -rw-r--r-- | plugin/Makefile.mingw32.in | 1 | ||||
| -rw-r--r-- | src/Makefile.am | 2 | ||||
| -rw-r--r-- | src/doubletriggerfilter.cc | 75 | ||||
| -rw-r--r-- | src/doubletriggerfilter.h | 46 | ||||
| -rw-r--r-- | src/inputprocessor.cc | 2 | 
5 files changed, 126 insertions, 0 deletions
| diff --git a/plugin/Makefile.mingw32.in b/plugin/Makefile.mingw32.in index bf52e04..5bb07d9 100644 --- a/plugin/Makefile.mingw32.in +++ b/plugin/Makefile.mingw32.in @@ -26,6 +26,7 @@ DG_SRC = \  	@top_srcdir@/src/dgxmlparser.cc \  	@top_srcdir@/src/directory.cc \  	@top_srcdir@/src/domloader.cc \ +	@top_srcdir@/src/doubletriggerfilter.cc \  	@top_srcdir@/src/drumgizmo.cc \  	@top_srcdir@/src/drumgizmoconf.cc \  	@top_srcdir@/src/drumkit.cc \ diff --git a/src/Makefile.am b/src/Makefile.am index f2a392d..428b8d7 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -45,6 +45,7 @@ libdg_la_SOURCES = \  	configparser.cc \  	directory.cc \  	domloader.cc \ +	doubletriggerfilter.cc \  	dgxmlparser.cc \  	drumgizmo.cc \  	drumgizmoconf.cc \ @@ -95,6 +96,7 @@ EXTRA_DIST = \  	cpp11fix.h \  	dgxmlparser.h \  	domloader.h \ +	doubletriggerfilter.h \  	drumgizmo.h \  	drumgizmoconf.h \  	drumkit.h \ diff --git a/src/doubletriggerfilter.cc b/src/doubletriggerfilter.cc new file mode 100644 index 0000000..77ba02d --- /dev/null +++ b/src/doubletriggerfilter.cc @@ -0,0 +1,75 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + *            doubletriggerfilter.cc + * + *  Fri Jun  5 18:26:32 CEST 2020 + *  Copyright 2020 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  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 "doubletriggerfilter.h" + +#include "latencyfilter.h" + +#include <cmath> +#include <hugin.hpp> + +#include "settings.h" +#include "random.h" + +DoubleTriggerFilter::DoubleTriggerFilter(Settings& settings) +	: settings(settings) +{ +	lastStrokes.resize(127, 0.0); // initialise to all zeros +} + +template<typename T1, typename T2> +static T1 getDistanceSamples(T1 min_dist_ms, T2 samplerate) +{ +	return min_dist_ms * samplerate / 1000.; +} + +bool DoubleTriggerFilter::filter(event_t& event, std::size_t pos) +{ +	auto enabled = true;//settings.enable_latency_modifier.load(); +	auto min_dist_ms = 25.0;//settings.latency_max_ms.load(); +	auto samplerate = settings.samplerate.load(); + +	if(!enabled) +	{ +		return true; +	} + +	auto min_dist = getDistanceSamples(min_dist_ms, samplerate); +	double note_pos = pos + event.offset; +	if(event.instrument >= lastStrokes.size()) +	{ +		lastStrokes.resize(event.instrument, 0.0); // expand and initialise to zeros +	} + +	auto lastStroke = lastStrokes[event.instrument]; +	if((note_pos - lastStroke) > min_dist) +	{ +		lastStrokes[event.instrument] = note_pos; +		return true; +	} + +	return false; +} diff --git a/src/doubletriggerfilter.h b/src/doubletriggerfilter.h new file mode 100644 index 0000000..226bc2b --- /dev/null +++ b/src/doubletriggerfilter.h @@ -0,0 +1,46 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + *            doubletriggerfilter.h + * + *  Fri Jun  5 18:26:32 CEST 2020 + *  Copyright 2020 Bent Bisballe Nyeng + *  deva@aasimon.org + ****************************************************************************/ + +/* + *  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 <vector> + +#include "inputfilter.h" + +struct Settings; + +class DoubleTriggerFilter +	: public InputFilter +{ +public: +	DoubleTriggerFilter(Settings& settings); + +	bool filter(event_t& events, std::size_t pos) override; + +private: +	Settings& settings; +	std::vector<double> lastStrokes; +}; diff --git a/src/inputprocessor.cc b/src/inputprocessor.cc index 2da5dbc..dcbc283 100644 --- a/src/inputprocessor.cc +++ b/src/inputprocessor.cc @@ -36,6 +36,7 @@  #include "powermapfilter.h"  #include "staminafilter.h"  #include "velocityfilter.h" +#include "doubletriggerfilter.h"  #include "cpp11fix.h" @@ -88,6 +89,7 @@ InputProcessor::InputProcessor(Settings& settings,  	, settings(settings)  {  	// Build filter list +	filters.emplace_back(std::make_unique<DoubleTriggerFilter>(settings));  	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)); | 
