summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndré Nusser <andre.nusser@googlemail.com>2020-05-02 12:56:48 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2020-05-02 12:56:48 +0200
commit1671ee67a4d868811b3d3b5652b991d383a13679 (patch)
treed8aad40438ed02ce76515b6bcf7296a8eb1141f0
parentcf790d239d4b5dfa772d5d1fdb112b8640a4a81a (diff)
Add powermap filter to the input processor and make sure that velocity visualizer is not affected but it.
-rw-r--r--plugin/Makefile.mingw32.in1
-rw-r--r--src/Makefile.am2
-rw-r--r--src/inputprocessor.cc51
-rw-r--r--src/inputprocessor.h1
-rw-r--r--src/powermapfilter.cc54
-rw-r--r--src/powermapfilter.h47
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;
+};