diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/drumgizmo.cc | 60 | ||||
-rw-r--r-- | src/message.h | 37 |
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__*/ |