diff options
-rw-r--r-- | plugingui/plugingui.cc | 42 | ||||
-rw-r--r-- | src/drumgizmo.cc | 60 | ||||
-rw-r--r-- | src/message.h | 37 |
3 files changed, 103 insertions, 36 deletions
diff --git a/plugingui/plugingui.cc b/plugingui/plugingui.cc index 7144140..9403939 100644 --- a/plugingui/plugingui.cc +++ b/plugingui/plugingui.cc @@ -60,13 +60,22 @@ namespace Conf { static void checkClick(void *ptr) { PluginGUI *gui = (PluginGUI*)ptr; - Conf::enable_velocity_modifier = gui->check->checked(); + + ChangeSettingMessage *msg = + new ChangeSettingMessage(ChangeSettingMessage::enable_velocity_modifier, + gui->check->checked()); + gui->drumgizmo->sendEngineMessage(msg); } static void knobChange(void *ptr) { PluginGUI *gui = (PluginGUI*)ptr; - Conf::velocity_modifier_weight = gui->knob->value(); + + ChangeSettingMessage *msg = + new ChangeSettingMessage(ChangeSettingMessage::velocity_modifier_weight, + gui->knob->value()); + gui->drumgizmo->sendEngineMessage(msg); + #ifdef STANDALONE int i = gui->knob->value() * 4; switch(i) { @@ -82,7 +91,12 @@ static void knobChange(void *ptr) static void knobChange2(void *ptr) { PluginGUI *gui = (PluginGUI*)ptr; - Conf::velocity_modifier_falloff = gui->knob2->value(); + + ChangeSettingMessage *msg = + new ChangeSettingMessage(ChangeSettingMessage::velocity_modifier_falloff, + gui->knob2->value()); + gui->drumgizmo->sendEngineMessage(msg); + #ifdef STANDALONE gui->progress->setProgress(gui->knob2->value()); #endif @@ -201,6 +215,11 @@ void PluginGUI::thread_main() { init(); + { // Request all engine settings + EngineSettingsMessage *msg = new EngineSettingsMessage(); + drumgizmo->sendEngineMessage(msg); + } + while(running) { eventhandler->processEvents(window); #ifdef WIN32 @@ -231,6 +250,16 @@ void PluginGUI::thread_main() } } break; + case Message::EngineSettingsMessage: + { + EngineSettingsMessage *settings = (EngineSettingsMessage *)msg; + lineedit->setText(settings->drumkitfile); + lineedit2->setText(settings->midimapfile); + check->setChecked(settings->enable_velocity_modifier); + knob->setValue(settings->velocity_modifier_weight); + knob2->setValue(settings->velocity_modifier_falloff); + + } default: break; } @@ -274,9 +303,6 @@ void PluginGUI::init() y += OFFSET1; lineedit = new GUI::LineEdit(window); - if(drumgizmo) lineedit->setText(drumgizmo->drumkitfile()); - else lineedit->setText("/home/deva/aasimonster/aasimonster.xml"); - //else lineedit->setText("Missing DrumGizmo*"); lineedit->move(XOFFSET, y); lineedit->resize(243, 29); @@ -307,7 +333,6 @@ void PluginGUI::init() y += OFFSET1; lineedit2 = new GUI::LineEdit(window); - if(drumgizmo) lineedit2->setText(drumgizmo->midimapfile); lineedit2->move(XOFFSET, y); lineedit2->resize(243, 29); @@ -342,7 +367,6 @@ void PluginGUI::init() //check->setText("Enable Velocity Modifier"); check->move(26, y + OFFSET4); check->resize(59,38); - check->setChecked(Conf::enable_velocity_modifier); check->registerClickHandler(checkClick, this); // Velocity Weight Modifier: @@ -355,7 +379,6 @@ void PluginGUI::init() knob = new GUI::Knob(window); knob->move(109, y + OFFSET4 - 4); knob->resize(57, 57); - knob->setValue(Conf::velocity_modifier_weight); knob->registerClickHandler(knobChange, this); } @@ -369,7 +392,6 @@ void PluginGUI::init() knob2 = new GUI::Knob(window); knob2->move(202 - 13 - 5, y + OFFSET4 - 4); knob2->resize(57, 57); - knob2->setValue(Conf::velocity_modifier_falloff); knob2->registerClickHandler(knobChange2, this); } } 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__*/ |