summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2013-04-20 22:06:08 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2013-04-20 22:06:08 +0200
commit3f33469b7237240a2be708ca29087773a4b7e228 (patch)
tree9ee0a87039d8c45e746c5162ef70de90bafb8f49 /src
parentc9200c25e02b2ab5c1fc4461a4621d109e798350 (diff)
Added messages for 'get engine seetings' and 'set engine setting', thereby removing the last 'direct call' in the engine code from the gui code.
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__*/