summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/drumgizmo.cc60
-rw-r--r--src/message.h37
2 files changed, 71 insertions, 26 deletions
diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc
index 77d9b89..49ea787 100644
--- a/src/drumgizmo.cc
+++ b/src/drumgizmo.cc
@@ -38,6 +38,7 @@
#include "drumkitparser.h"
#include "audioinputenginemidi.h"
+#include "configuration.h"
DrumGizmo::DrumGizmo(AudioOutputEngine *o, AudioInputEngine *i)
: loader(this), oe(o), ie(i)
@@ -179,8 +180,6 @@ bool DrumGizmo::init(bool preload)
void DrumGizmo::handleEngineEvents()
{
- // DEBUG(msg, "handle?");
-
Message *msg = receiveEngineMessage();
if(msg) {
DEBUG(msg, "got message.");
@@ -202,36 +201,47 @@ void DrumGizmo::handleEngineEvents()
aim->loadMidiMap(m->midimapfile, kit.instruments);
}
break;
+ case Message::EngineSettingsMessage:
+ {
+ DEBUG(msg, "got EngineSettingsMessage message.");
+ EngineSettingsMessage *msg = new EngineSettingsMessage();
+ msg->midimapfile = midimapfile;
+ msg->midimap_loaded = true;
+ msg->drumkitfile = drumkitfile();
+ msg->drumkit_loaded = true;
+ msg->enable_velocity_modifier = Conf::enable_velocity_modifier;
+ msg->velocity_modifier_falloff = Conf::velocity_modifier_falloff;
+ msg->velocity_modifier_weight = Conf::velocity_modifier_weight;
+ msg->enable_velocity_randomiser = Conf::enable_velocity_randomiser;
+ msg->velocity_randomiser_weight = Conf::velocity_randomiser_weight;
+ sendGUIMessage(msg);
+ }
+ break;
+ case Message::ChangeSettingMessage:
+ {
+ ChangeSettingMessage *ch = (ChangeSettingMessage*)msg;
+ switch(ch->name) {
+ case ChangeSettingMessage::enable_velocity_modifier:
+ Conf::enable_velocity_modifier = ch->value;
+ break;
+ case ChangeSettingMessage::velocity_modifier_weight:
+ Conf::velocity_modifier_weight = ch->value;
+ break;
+ case ChangeSettingMessage::velocity_modifier_falloff:
+ Conf::velocity_modifier_falloff = ch->value;
+ break;
+ }
+ }
+ break;
default:
break;
}
- // delete msg;
+ delete msg;
}
}
bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples)
{
-#if 0
- DEBUG(drumgizmo, "loader.isDone() = %d", (int)loader.isDone());
- if(!loader.isDone()) {
- /*
- // return false;
- ie->pre();
- oe->pre(nsamples);
- size_t nev;
- event_t *evs = ie->run(pos, nsamples, &nev);
- free(evs);
- // memset(samples, 0, nsamples);
- for(size_t i = 0; i < nsamples / 2; i++) samples[i] = sin(pos + i);
- for(size_t c = 0; c < 16; c++) oe->run(c, samples, nsamples);
- ie->post();
- oe->post(nsamples);
- pos += nsamples;
- */
- return true;
- }
-#endif
-
// Handle engine messages, at most one in each iteration:
handleEngineEvents();
@@ -435,8 +445,6 @@ void DrumGizmo::stop()
// engine.stop();
}
-#include "configuration.h"
-
std::string float2str(float a)
{
char buf[256];
diff --git a/src/message.h b/src/message.h
index c37db12..9bf2f12 100644
--- a/src/message.h
+++ b/src/message.h
@@ -36,6 +36,8 @@ public:
// GUI -> Engine, Engine -> Engine Messages:
LoadDrumKit, // Signal engine to load drumkit.
LoadMidimap, // Signal engine to load midimap.
+ EngineSettingsMessage, // Request or receive engine settings.
+ ChangeSettingMessage, // Update named setting in engine.
} type_t;
virtual ~Message() {}
@@ -62,4 +64,39 @@ public:
std::string midimapfile;
};
+class EngineSettingsMessage : public Message {
+public:
+ type_t type() { return Message::EngineSettingsMessage; }
+ std::string midimapfile;
+ bool midimap_loaded;
+
+ std::string drumkitfile;
+ bool drumkit_loaded;
+
+ float enable_velocity_modifier;
+ float velocity_modifier_falloff;
+ float velocity_modifier_weight;
+ float enable_velocity_randomiser;
+ float velocity_randomiser_weight;
+};
+
+class ChangeSettingMessage : public Message {
+public:
+ typedef enum {
+ enable_velocity_modifier,
+ velocity_modifier_weight,
+ velocity_modifier_falloff,
+ } setting_name_t;
+
+ ChangeSettingMessage(setting_name_t n, float v) {
+ name = n;
+ value = v;
+ }
+
+ type_t type() { return Message::ChangeSettingMessage; }
+
+ setting_name_t name;
+ float value;
+};
+
#endif/*__DRUMGIZMO_MESSAGE_H__*/