diff --git a/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C b/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C index d6d610f..45b4ca8 100644 --- a/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C +++ b/SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C @@ -43,7 +43,7 @@ SpiralPluginGUI(w,h,o,ch) m_Gain->maximum (4.0); m_Gain->minimum (0.0); m_Gain->step (0.0001); - m_Gain->value (2.0); + m_Gain->value (1.0); m_Gain->callback((Fl_Callback*)cb_Gain); m_CtlGroup->add (m_Gain); @@ -73,7 +73,7 @@ SpiralPluginGUI(w,h,o,ch) m_NumGain->minimum (-2.0); m_NumGain->step (0.001); m_NumGain->lstep (0.1); - m_NumGain->value (0.0); + m_NumGain->value (1.0); m_NumGain->callback ((Fl_Callback*)cb_NumGain); m_NumGroup->add (m_NumGain); @@ -162,11 +162,11 @@ void AmpPluginGUI::cb_NumDC (Fl_Counter* o, void* v) { // button callbacks inline void AmpPluginGUI::cb_Reset_i (Fl_Button* o, void* v) { - m_NumGain->value (0); - m_Gain->value (2.0f); + m_NumGain->value (1.0); + m_Gain->value (1.0); m_GUICH->Set ("Gain", 0); - m_NumDC->value (0); - m_DC->value (2.0f); + m_NumDC->value (0.0); + m_DC->value (2.0); m_GUICH->Set ("DC", 0); } @@ -182,5 +182,6 @@ const string AmpPluginGUI::GetHelpText(const string &loc){ + "the signal's DC offset (the up or down in the range of values).\n\n" + "Handy for fine tuning CV's by hand, or modulating complex\n" + "controls.\n\n" - + "The reset button quickly resets both controls back to 0\n"; + + "The reset button quickly resets the gain back to 1 and the\n" + + "offset back to 0\n"; } diff --git a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C index 5b2948d..78a64f0 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C +++ b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C @@ -56,7 +56,7 @@ m_TrigThresh(0.01) { m_PluginInfo.Name="Envelope"; m_PluginInfo.Width=142; - m_PluginInfo.Height=110; + m_PluginInfo.Height=132; m_PluginInfo.NumInputs=2; m_PluginInfo.NumOutputs=2; m_PluginInfo.PortTips.push_back("Trigger CV"); diff --git a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C index 45e7eb9..868e4c0 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C +++ b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ +*/ #include "EnvelopePluginGUI.h" #include @@ -26,251 +26,332 @@ static const float TIMED_SLIDER_MAX = 3.0f; EnvelopePluginGUI::EnvelopePluginGUI(int w, int h,EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info) : SpiralPluginGUI(w,h,o,ch) -{ - Thresh = new Fl_Slider(10, 20, 20, 70, "T"); - Thresh->type(4); - Thresh->selection_color(Info->GUI_COLOUR); - Thresh->labelsize(10); - Thresh->maximum(1.0); - Thresh->step(0.01); - Thresh->value(0.99f); - Thresh->callback((Fl_Callback*)cb_Thresh); - add(Thresh); - - Attack = new Fl_Slider(30, 20, 20, 70, "A"); - Attack->type(4); - Attack->selection_color(Info->GUI_COLOUR); - Attack->labelsize(10); - Attack->maximum(TIMED_SLIDER_MAX); - Attack->step(0.01); - Attack->value(3.0f); - Attack->callback((Fl_Callback*)cb_Attack); - add(Attack); - - Decay = new Fl_Slider(50, 20, 20, 70, "D"); - Decay->type(4); - Decay->selection_color(Info->GUI_COLOUR); - Decay->labelsize(10); - Decay->maximum(TIMED_SLIDER_MAX); - Decay->step(0.01); - Decay->value(2.29); - Decay->callback((Fl_Callback*)cb_Decay); - add(Decay); - - Sustain = new Fl_Slider(70, 20, 20, 70, "S"); - Sustain->type(4); - Sustain->selection_color(Info->GUI_COLOUR); - Sustain->labelsize(10); - Sustain->maximum(1); - Sustain->step(0.01); - Sustain->value(0.0); - Sustain->callback((Fl_Callback*)cb_Sustain); - add(Sustain); - - Release = new Fl_Slider(90, 20, 20, 70, "R"); - Release->type(4); - Release->selection_color(Info->GUI_COLOUR); - Release->labelsize(10); - Release->maximum(TIMED_SLIDER_MAX); - Release->step(0.01); - Release->value(2.0); - Release->callback((Fl_Callback*)cb_Release); - add(Release); - - Volume = new Fl_Slider(110, 20, 20, 70, "V"); - Volume->type(4); - Volume->selection_color(Info->GUI_COLOUR); - Volume->labelsize(10); - Volume->maximum(1); - Volume->step(0.01); - Volume->value(0.5f); - Volume->callback((Fl_Callback*)cb_Volume); - add(Volume); - - m_pop = new Fl_Button(1,h-14, 13, 13, "@>"); - m_pop->type(1); - m_pop->box(FL_FLAT_BOX); - m_pop->down_box(FL_FLAT_BOX); - m_pop->labeltype(FL_SYMBOL_LABEL); - m_pop->labelsize(10); - m_pop->labelcolor(25); - m_pop->callback((Fl_Callback*)cb_pop); - - m_out_thresh = new Fl_Output(15,h+5, 48, 15, "T"); - m_out_thresh->box(FL_ENGRAVED_BOX); - m_out_thresh->color(16); - m_out_thresh->labelsize(10); - m_out_thresh->textsize(10); - m_out_thresh->hide(); - m_out_thresh->set_output(); - - m_out_attack = new Fl_Output(15,h+22, 48, 15, "A"); - m_out_attack->box(FL_ENGRAVED_BOX); - m_out_attack->color(16); - m_out_attack->labelsize(10); - m_out_attack->textsize(10); - m_out_attack->hide(); - m_out_attack->set_output(); - - m_out_decay = new Fl_Output(15,h+39, 48, 15, "D"); - m_out_decay->box(FL_ENGRAVED_BOX); - m_out_decay->color(16); - m_out_decay->labelsize(10); - m_out_decay->textsize(10); - m_out_decay->hide(); - m_out_decay->set_output(); - - m_out_sustain = new Fl_Output(87,h+5, 48, 15, "S"); - m_out_sustain->box(FL_ENGRAVED_BOX); - m_out_sustain->color(16); - m_out_sustain->labelsize(10); - m_out_sustain->textsize(10); - m_out_sustain->hide(); - m_out_sustain->set_output(); - - m_out_release = new Fl_Output(87,h+22, 48, 15, "R"); - m_out_release->box(FL_ENGRAVED_BOX); - m_out_release->color(16); - m_out_release->labelsize(10); - m_out_release->textsize(10); - m_out_release->hide(); - m_out_release->set_output(); - - m_out_volume = new Fl_Output(87,h+39, 48, 15, "V"); - m_out_volume->box(FL_ENGRAVED_BOX); - m_out_volume->color(16); - m_out_volume->labelsize(10); - m_out_volume->textsize(10); - m_out_volume->hide(); - m_out_volume->set_output(); - - end(); +{ + m_Tabs = new Fl_Tabs (5, 12, 132, 115, ""); + m_Tabs->labelsize (10); + m_Tabs->box (FL_PLASTIC_DOWN_BOX); + add (m_Tabs); + + m_CtlGroup = new Fl_Group (5, 30, 132, 81, "Controls"); + m_CtlGroup->labelsize (10); + m_Tabs->add (m_CtlGroup); + + m_Thresh = new Fl_Slider (10, 38, 20, 70, "T"); + m_Thresh->user_data ((void*)(this)); + m_Thresh->type (FL_VERT_NICE_SLIDER); + m_Thresh->selection_color (Info->GUI_COLOUR); + m_Thresh->box (FL_PLASTIC_DOWN_BOX); + m_Thresh->labelsize (10); + m_Thresh->maximum (1.0); + m_Thresh->step (0.01); + m_Thresh->value (0.99f); + m_Thresh->callback ((Fl_Callback*)cb_Thresh); + m_CtlGroup->add (m_Thresh); + + m_Attack = new Fl_Slider (30, 38, 20, 70, "A"); + m_Attack->user_data ((void*)(this)); + m_Attack->type (FL_VERT_NICE_SLIDER); + m_Attack->selection_color (Info->GUI_COLOUR); + m_Attack->box (FL_PLASTIC_DOWN_BOX); + m_Attack->labelsize (10); + m_Attack->maximum (TIMED_SLIDER_MAX); + m_Attack->step (0.01); + m_Attack->value (3.0f); + m_Attack->callback ((Fl_Callback*)cb_Attack); + m_CtlGroup->add (m_Attack); + + m_Decay = new Fl_Slider (50, 38, 20, 70, "D"); + m_Decay->user_data ((void*)(this)); + m_Decay->type (FL_VERT_NICE_SLIDER); + m_Decay->selection_color (Info->GUI_COLOUR); + m_Decay->box (FL_PLASTIC_DOWN_BOX); + m_Decay->labelsize (10); + m_Decay->maximum (TIMED_SLIDER_MAX); + m_Decay->step (0.01); + m_Decay->value (2.29); + m_Decay->callback ((Fl_Callback*)cb_Decay); + m_CtlGroup->add (m_Decay); + + m_Sustain = new Fl_Slider (70, 38, 20, 70, "S"); + m_Sustain->user_data ((void*)(this)); + m_Sustain->type (FL_VERT_NICE_SLIDER); + m_Sustain->selection_color (Info->GUI_COLOUR); + m_Sustain->box (FL_PLASTIC_DOWN_BOX); + m_Sustain->labelsize (10); + m_Sustain->maximum (1); + m_Sustain->step (0.01); + m_Sustain->value (0.0); + m_Sustain->callback ((Fl_Callback*)cb_Sustain); + m_CtlGroup->add (m_Sustain); + + m_Release = new Fl_Slider (90, 38, 20, 70, "R"); + m_Release->user_data ((void*)(this)); + m_Release->type (FL_VERT_NICE_SLIDER); + m_Release->selection_color (Info->GUI_COLOUR); + m_Release->box (FL_PLASTIC_DOWN_BOX); + m_Release->labelsize (10); + m_Release->maximum (TIMED_SLIDER_MAX); + m_Release->step (0.01); + m_Release->value (2.0); + m_Release->callback ((Fl_Callback*)cb_Release); + m_CtlGroup->add (m_Release); + + m_Volume = new Fl_Slider (110, 38, 20, 70, "V"); + m_Volume->user_data ((void*)(this)); + m_Volume->type (FL_VERT_NICE_SLIDER); + m_Volume->selection_color (Info->GUI_COLOUR); + m_Volume->box (FL_PLASTIC_DOWN_BOX); + m_Volume->labelsize (10); + m_Volume->maximum (1); + m_Volume->step (0.01); + m_Volume->value (0.5f); + m_Volume->callback ((Fl_Callback*)cb_Volume); + m_CtlGroup->add (m_Volume); + + m_NumGroup = new Fl_Group (5, 30, 132, 81, "Numbers"); + m_NumGroup->labelsize (10); + m_Tabs->add (m_NumGroup); + + m_NumThresh = new Fl_Counter (10, 35, 60, 20, "Threshold (%)"); + m_NumThresh->user_data ((void*)(this)); + m_NumThresh->type (FL_SIMPLE_COUNTER); + m_NumThresh->color (Info->GUI_COLOUR); + m_NumThresh->box (FL_PLASTIC_UP_BOX); + m_NumThresh->labelsize (8); + m_NumThresh->maximum (100); + m_NumThresh->minimum (0); + m_NumThresh->step (1); + m_NumThresh->value (1); + m_NumThresh->callback ((Fl_Callback*)cb_NumThresh); + m_NumGroup->add (m_NumThresh); + + m_NumAttack = new Fl_Counter (72, 35, 60, 20, "Attack (s)"); + m_NumAttack->user_data ((void*)(this)); + m_NumAttack->type (FL_SIMPLE_COUNTER); + m_NumAttack->color (Info->GUI_COLOUR); + m_NumAttack->box (FL_PLASTIC_UP_BOX); + m_NumAttack->labelsize (8); + m_NumAttack->maximum (TIMED_SLIDER_MAX * TIMED_SLIDER_MAX); + m_NumAttack->minimum (0); + m_NumAttack->step (0.1); + m_NumAttack->value (0); + m_NumAttack->callback ((Fl_Callback*)cb_NumAttack); + m_NumGroup->add (m_NumAttack); + + m_NumDecay = new Fl_Counter (10, 65, 60, 20, "Decay (s)"); + m_NumDecay->user_data ((void*)(this)); + m_NumDecay->type (FL_SIMPLE_COUNTER); + m_NumDecay->color (Info->GUI_COLOUR); + m_NumDecay->box (FL_PLASTIC_UP_BOX); + m_NumDecay->labelsize (8); + m_NumDecay->maximum (TIMED_SLIDER_MAX * TIMED_SLIDER_MAX); + m_NumDecay->minimum (0); + m_NumDecay->step (0.1); + m_NumDecay->value (0.5); + m_NumDecay->callback ((Fl_Callback*)cb_NumDecay); + m_NumGroup->add (m_NumDecay); + + m_NumSustain = new Fl_Counter (72, 65, 60, 20, "Sustain (%)"); + m_NumSustain->user_data ((void*)(this)); + m_NumSustain->type (FL_SIMPLE_COUNTER); + m_NumSustain->color (Info->GUI_COLOUR); + m_NumSustain->box (FL_PLASTIC_UP_BOX); + m_NumSustain->labelsize (8); + m_NumSustain->maximum (100); + m_NumSustain->minimum (0); + m_NumSustain->step (1); + m_NumSustain->value (100); + m_NumSustain->callback ((Fl_Callback*)cb_NumSustain); + m_NumGroup->add (m_NumSustain); + + m_NumRelease = new Fl_Counter (10, 95, 60, 20, "Release (s)"); + m_NumRelease->user_data ((void*)(this)); + m_NumRelease->type (FL_SIMPLE_COUNTER); + m_NumRelease->color (Info->GUI_COLOUR); + m_NumRelease->box (FL_PLASTIC_UP_BOX); + m_NumRelease->labelsize (8); + m_NumRelease->maximum (TIMED_SLIDER_MAX * TIMED_SLIDER_MAX); + m_NumRelease->minimum (0); + m_NumRelease->step (0.1); + m_NumRelease->value (1.0); + m_NumRelease->callback ((Fl_Callback*)cb_NumRelease); + m_NumGroup->add (m_NumRelease); + + m_NumVolume = new Fl_Counter (72, 95, 60, 20, "Volume (%)"); + m_NumVolume->user_data ((void*)(this)); + m_NumVolume->type (FL_SIMPLE_COUNTER); + m_NumVolume->color (Info->GUI_COLOUR); + m_NumVolume->box (FL_PLASTIC_UP_BOX); + m_NumVolume->labelsize (8); + m_NumVolume->maximum (100); + m_NumVolume->minimum (0); + m_NumVolume->step (1); + m_NumVolume->value (50); + m_NumVolume->callback ((Fl_Callback*)cb_NumVolume); + m_NumGroup->add (m_NumVolume); + + end(); } -extern "C" int sprintf(char *,const char *,...); +void EnvelopePluginGUI::UpdateValues (SpiralPlugin *o) { + float val; + EnvelopePlugin *Plugin = (EnvelopePlugin*)o; -void EnvelopePluginGUI::UpdateValues(SpiralPlugin *o) -{ - EnvelopePlugin *Plugin = (EnvelopePlugin*)o; - - Thresh->value(1.0f-Plugin->GetTrigThresh()); - Attack->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetAttack())); - Decay->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetDecay())); - Sustain->value(1.0f-Plugin->GetSustain()); - Release->value(TIMED_SLIDER_MAX-sqrt(Plugin->GetRelease())); - Volume->value(1.0f-Plugin->GetVolume()); - char str[10]; - sprintf(str,"%4.0f %%", 100*Plugin->GetTrigThresh()); - m_out_thresh->value(str); - sprintf(str,"%5.3f s", Plugin->GetAttack()); - m_out_attack->value(str); - sprintf(str,"%5.3f s", Plugin->GetDecay()); - m_out_decay->value(str); - sprintf(str,"%4.0f %%", 100*Plugin->GetSustain()); - m_out_sustain->value(str); - sprintf(str,"%5.3f s", Plugin->GetRelease()); - m_out_release->value(str); - sprintf(str,"%4.0f %%", 100*Plugin->GetVolume()); - m_out_volume->value(str); + val = Plugin->GetTrigThresh(); + m_Thresh->value (1.0f - val); + m_NumThresh->value (100 * val); + + val = Plugin->GetAttack(); + m_Attack->value (TIMED_SLIDER_MAX - sqrt (val)); + m_NumAttack->value (val); + + val = Plugin->GetDecay(); + m_Decay->value (TIMED_SLIDER_MAX - sqrt (val)); + m_NumDecay->value (val); + + val = Plugin->GetSustain(); + m_Sustain->value (1.0f - val); + m_NumSustain->value (100 * val); + + val = Plugin->GetRelease(); + m_Release->value (TIMED_SLIDER_MAX - sqrt (val)); + m_NumRelease->value (val); + + val = Plugin->GetVolume(); + m_Volume->value (1.0f - val); + m_NumVolume->value (100 * val); } +// Slider Callbacks -inline void EnvelopePluginGUI::cb_Thresh_i(Fl_Slider* o, void* v) -{ -char str[10]; - m_GUICH->Set("Trig",(float)(1.0f-o->value())); - sprintf(str,"%4.0f %%", 100*(1.0f-o->value())); - m_out_thresh->value(str); +inline void EnvelopePluginGUI::cb_Thresh_i (Fl_Slider* o, void* v) { + float val = (float)(1.0f - o->value()); + m_GUICH->Set ("Trig", val); + m_NumThresh->value (100 * val); } -void EnvelopePluginGUI::cb_Thresh(Fl_Slider* o, void* v) -{ ((EnvelopePluginGUI*)(o->parent()))->cb_Thresh_i(o,v); } - -inline void EnvelopePluginGUI::cb_Attack_i(Fl_Slider* o, void* v) -{ -char str[10]; - float value=TIMED_SLIDER_MAX-o->value(); - m_GUICH->Set("Attack",value*value); - sprintf(str,"%5.3f s", value*value); - m_out_attack->value(str); +void EnvelopePluginGUI::cb_Thresh (Fl_Slider* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_Thresh_i (o, v); } -void EnvelopePluginGUI::cb_Attack(Fl_Slider* o, void* v) -{ ((EnvelopePluginGUI*)(o->parent()))->cb_Attack_i(o,v); } - -inline void EnvelopePluginGUI::cb_Decay_i(Fl_Slider* o, void* v) -{ -char str[10]; - float value=TIMED_SLIDER_MAX-o->value(); - m_GUICH->Set("Decay",value*value); - sprintf(str,"%5.3f s", value*value); - m_out_decay->value(str); + +inline void EnvelopePluginGUI::cb_Attack_i (Fl_Slider* o, void* v) { + float val = TIMED_SLIDER_MAX - o->value(); + val *= val; + m_GUICH->Set ("Attack", val); + m_NumAttack->value (val); } -void EnvelopePluginGUI::cb_Decay(Fl_Slider* o, void* v) -{ ((EnvelopePluginGUI*)(o->parent()))->cb_Decay_i(o,v); } -inline void EnvelopePluginGUI::cb_Sustain_i(Fl_Slider* o, void* v) -{ -char str[10]; - m_GUICH->Set("Sustain",(float)(1.0f-o->value())); - sprintf(str,"%4.0f %%", 100*(1.0f-o->value())); - m_out_sustain->value(str); +void EnvelopePluginGUI::cb_Attack (Fl_Slider* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_Attack_i (o, v); } - -void EnvelopePluginGUI::cb_Sustain(Fl_Slider* o, void* v) -{ ((EnvelopePluginGUI*)(o->parent()))->cb_Sustain_i(o,v); } - -inline void EnvelopePluginGUI::cb_Release_i(Fl_Slider* o, void* v) -{ -char str[10]; - float value=TIMED_SLIDER_MAX-o->value(); - m_GUICH->Set("Release",value*value); - sprintf(str,"%5.3f s", value*value); - m_out_release->value(str); + +inline void EnvelopePluginGUI::cb_Decay_i (Fl_Slider* o, void* v) { + float val = TIMED_SLIDER_MAX - o->value(); + val *= val; + m_GUICH->Set ("Decay", val); + m_NumDecay->value (val); } -void EnvelopePluginGUI::cb_Release(Fl_Slider* o, void* v) -{ ((EnvelopePluginGUI*)(o->parent()))->cb_Release_i(o,v); } -inline void EnvelopePluginGUI::cb_Volume_i(Fl_Slider* o, void* v) -{ -char str[10]; +void EnvelopePluginGUI::cb_Decay (Fl_Slider* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_Decay_i (o, v); +} + +inline void EnvelopePluginGUI::cb_Sustain_i (Fl_Slider* o, void* v) { + float val = (float)(1.0f - o->value()); + m_GUICH->Set ("Sustain", val); + m_NumSustain->value (100 * val); +} + +void EnvelopePluginGUI::cb_Sustain (Fl_Slider* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_Sustain_i (o, v); +} + +inline void EnvelopePluginGUI::cb_Release_i (Fl_Slider* o, void* v) { + float val = TIMED_SLIDER_MAX - o->value(); + val *= val; + m_GUICH->Set ("Release", val); + m_NumRelease->value (val); +} + +void EnvelopePluginGUI::cb_Release (Fl_Slider* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_Release_i (o, v); +} + +inline void EnvelopePluginGUI::cb_Volume_i (Fl_Slider* o, void* v) { + float val = (float)(1.0f - o->value()); + m_GUICH->Set ("Volume", val); + m_NumVolume->value (100 * val); +} + +void EnvelopePluginGUI::cb_Volume (Fl_Slider* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_Volume_i (o, v); +} + +// Counter Callbacks + +inline void EnvelopePluginGUI::cb_NumThresh_i (Fl_Counter* o, void* v) { + float val = o->value() / 100; + m_GUICH->Set ("Trig", val); + m_Thresh->value (1.0f - val); +} + +void EnvelopePluginGUI::cb_NumThresh (Fl_Counter* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_NumThresh_i (o, v); +} + +inline void EnvelopePluginGUI::cb_NumAttack_i (Fl_Counter* o, void* v) { + float val = o->value(); + m_GUICH->Set ("Attack", val); + m_Attack->value (TIMED_SLIDER_MAX - sqrt (val)); +} + +void EnvelopePluginGUI::cb_NumAttack (Fl_Counter* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_NumAttack_i (o, v); +} + +inline void EnvelopePluginGUI::cb_NumDecay_i (Fl_Counter* o, void* v) { + float val = o->value(); + m_GUICH->Set ("Decay", val); + m_Decay->value (TIMED_SLIDER_MAX - sqrt (val)); +} + +void EnvelopePluginGUI::cb_NumDecay (Fl_Counter* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_NumDecay_i (o, v); +} - m_GUICH->Set("Volume",(float)(1.0f-o->value())); - sprintf(str,"%4.0f %%", (float)(100.0f*(1.0f-o->value()))); - m_out_volume->value(str); +inline void EnvelopePluginGUI::cb_NumSustain_i (Fl_Counter* o, void* v) { + float val = o->value() / 100; + m_GUICH->Set ("Sustain", val); + m_Sustain->value (1.0f - val); } -void EnvelopePluginGUI::cb_Volume(Fl_Slider* o, void* v) -{ ((EnvelopePluginGUI*)(o->parent()))->cb_Volume_i(o,v); } - - -inline void EnvelopePluginGUI::cb_pop_i(Fl_Button *o, void*) { - if (o->value()) - { - o->label("@2>"); - m_out_thresh->show(); - m_out_attack->show(); - m_out_decay->show(); - m_out_sustain->show(); - m_out_release->show(); - redraw(); - } - else - { - o->label("@>"); - m_out_thresh->hide(); - m_out_attack->hide(); - m_out_decay->hide(); - m_out_sustain->hide(); - m_out_release->hide(); - redraw(); - parent()->redraw(); - } +void EnvelopePluginGUI::cb_NumSustain (Fl_Counter* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_NumSustain_i (o, v); } -void EnvelopePluginGUI::cb_pop(Fl_Button* o, void* v) { - ((EnvelopePluginGUI*)(o->parent()))->cb_pop_i(o,v); + +inline void EnvelopePluginGUI::cb_NumRelease_i (Fl_Counter* o, void* v) { + float val = o->value(); + m_GUICH->Set ("Release", val); + m_Release->value (TIMED_SLIDER_MAX - sqrt (val)); } -const string EnvelopePluginGUI::GetHelpText(const string &loc){ +void EnvelopePluginGUI::cb_NumRelease (Fl_Counter* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_NumRelease_i (o, v); +} + +inline void EnvelopePluginGUI::cb_NumVolume_i (Fl_Counter* o, void* v) { + float val = o->value() / 100; + m_GUICH->Set ("Volume", val); + m_Volume->value (1.0f - val); +} + +void EnvelopePluginGUI::cb_NumVolume (Fl_Counter* o, void* v) { + ((EnvelopePluginGUI*)(o->user_data()))->cb_NumVolume_i (o, v); +} + +// Help Text + +const string EnvelopePluginGUI::GetHelpText (const string &loc) { return string("") + "An ADSR envelope. This plugin also has a built in\n" + "amplifier for signals, so data fed through the Input\n" diff --git a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h index ead9c0c..b8ec6f1 100644 --- a/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h +++ b/SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h @@ -14,65 +14,59 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ +*/ #include #include #include #include -#include +#include +#include #include #include - #include "EnvelopePlugin.h" #include "../SpiralPluginGUI.h" #ifndef EnvelopeGUI #define EnvelopeGUI - -class EnvelopePluginGUI : public SpiralPluginGUI -{ -public: - EnvelopePluginGUI(int w, int h, EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info); - - virtual void UpdateValues(SpiralPlugin *o); - -protected: - const string GetHelpText(const string &loc); - -private: - - Fl_Slider *Thresh; - Fl_Slider *Attack; - Fl_Slider *Decay; - Fl_Slider *Sustain; - Fl_Slider *Release; - Fl_Slider *Volume; - Fl_Button *m_pop; - Fl_Output *m_out_thresh; - Fl_Output *m_out_attack; - Fl_Output *m_out_decay; - Fl_Output *m_out_sustain; - Fl_Output *m_out_release; - Fl_Output *m_out_volume; - - //// Callbacks //// - inline void cb_Thresh_i(Fl_Slider* o, void* v); - static void cb_Thresh(Fl_Slider*, void*); - inline void cb_Attack_i(Fl_Slider* o, void* v); - static void cb_Attack(Fl_Slider*, void*); - inline void cb_Decay_i(Fl_Slider* o, void* v); - static void cb_Decay(Fl_Slider* o, void* v); - inline void cb_Sustain_i(Fl_Slider* o, void* v); - static void cb_Sustain(Fl_Slider* o, void* v); - inline void cb_Release_i(Fl_Slider* o, void* v); - static void cb_Release(Fl_Slider* o, void* v); - inline void cb_Volume_i(Fl_Slider* o, void* v); - static void cb_Volume(Fl_Slider* o, void* v); - inline void cb_pop_i(Fl_Button *o, void *v); - static void cb_pop(Fl_Button *o, void *v); - +class EnvelopePluginGUI : public SpiralPluginGUI { + public: + EnvelopePluginGUI(int w, int h, EnvelopePlugin *o,ChannelHandler *ch,const HostInfo *Info); + virtual void UpdateValues(SpiralPlugin *o); + protected: + const string GetHelpText(const string &loc); + private: + Fl_Tabs *m_Tabs; + Fl_Group *m_CtlGroup, *m_NumGroup; + Fl_Slider *m_Thresh, *m_Attack, *m_Decay, *m_Sustain, *m_Release, *m_Volume; + Fl_Counter *m_NumThresh, *m_NumAttack, *m_NumDecay, *m_NumSustain, *m_NumRelease, *m_NumVolume; + // Slider Callbacks + inline void cb_Thresh_i (Fl_Slider* o, void* v); + static void cb_Thresh (Fl_Slider* o, void* v); + inline void cb_Attack_i (Fl_Slider* o, void* v); + static void cb_Attack (Fl_Slider* o, void* v); + inline void cb_Decay_i (Fl_Slider* o, void* v); + static void cb_Decay (Fl_Slider* o, void* v); + inline void cb_Sustain_i (Fl_Slider* o, void* v); + static void cb_Sustain (Fl_Slider* o, void* v); + inline void cb_Release_i (Fl_Slider* o, void* v); + static void cb_Release (Fl_Slider* o, void* v); + inline void cb_Volume_i (Fl_Slider* o, void* v); + static void cb_Volume (Fl_Slider* o, void* v); + // Counter Callbacks + inline void cb_NumThresh_i (Fl_Counter* o, void* v); + static void cb_NumThresh (Fl_Counter* o, void* v); + inline void cb_NumAttack_i (Fl_Counter* o, void* v); + static void cb_NumAttack (Fl_Counter* o, void* v); + inline void cb_NumDecay_i (Fl_Counter* o, void* v); + static void cb_NumDecay (Fl_Counter* o, void* v); + inline void cb_NumSustain_i (Fl_Counter* o, void* v); + static void cb_NumSustain (Fl_Counter* o, void* v); + inline void cb_NumRelease_i (Fl_Counter* o, void* v); + static void cb_NumRelease (Fl_Counter* o, void* v); + inline void cb_NumVolume_i (Fl_Counter* o, void* v); + static void cb_NumVolume (Fl_Counter* o, void* v); }; #endif diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C index 5889c61..0a3d743 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C @@ -233,15 +233,15 @@ void MatrixPlugin::Execute() m_Current=m_PatSeq[m_CurPatSeq]; } } - + // An external clock pulse overrides the internal timing if ((!ExternalClock && m_Time>=m_StepTime*(1/m_Matrix[m_Current].Speed)) || - (ExternalClock && ExternalClockTriggered)) - { + (ExternalClock && ExternalClockTriggered)) + { m_Time=0; m_Step++; - - if (m_Step >= m_Matrix[m_Current].Length) + + if (m_Step >= m_Matrix[m_Current].Length) { SetOutput(18, n, 1); m_Step=0; @@ -249,17 +249,17 @@ void MatrixPlugin::Execute() if (m_PatSeq[m_CurPatSeq]==-1 || m_CurPatSeq==NUM_PATSEQ) m_CurPatSeq=0; m_Current=m_PatSeq[m_CurPatSeq]; } - + // Reset the values m_CurrentTriggerCV=0; if (m_NoteCut) m_CurrentNoteCV=0; - for (int t=0; tGetCommand()) { case MAT_LENGTH : - m_Matrix[m_GUICurrent].Length=m_GUIArgs.Length; + m_Matrix[m_GUICurrent].Length=m_GUIArgs.Length; break; - - case MAT_SPEED : - m_Matrix[m_GUICurrent].Speed=m_GUIArgs.Speed; - break; - - case MAT_ACTIVATE : - m_Matrix[m_GUICurrent].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=true; - break; - - case MAT_DEACTIVATE : - m_Matrix[m_GUICurrent].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=false; + + case MAT_SPEED : + m_Matrix[m_GUICurrent].Speed=m_GUIArgs.Speed; + break; + + case MAT_ACTIVATE : + m_Matrix[m_GUICurrent].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=true; break; - case MAT_OCTAVE : - m_Matrix[m_GUICurrent].Octave=m_GUIArgs.Octave; + + case MAT_DEACTIVATE : + m_Matrix[m_GUICurrent].Matrix[m_GUIArgs.X][m_GUIArgs.Y]=false; break; - case COPY : - CopyPattern(); + case MAT_OCTAVE : + m_Matrix[m_GUICurrent].Octave=m_GUIArgs.Octave; break; - case PASTE : - PastePattern(); + case COPY : + m_CopyPattern = m_GUICurrent; break; - case CLEAR : - ClearPattern(); + case PASTE : + PastePattern(); break; - case TUP : - if (CanTransposeUp()) TransposeUp(); + case CLEAR : + ClearPattern(); break; - case TDOWN : - if (CanTransposeDown()) TransposeDown(); + case TUP : + if (CanTransposeUp()) TransposeUp(); break; - case MAT_VOLUME : - m_Matrix[m_GUICurrent].Volume[m_GUIArgs.X][m_GUIArgs.Y]=m_GUIArgs.Volume; + case TDOWN : + if (CanTransposeDown()) TransposeDown(); break; - case SET_CURRENT : - m_Current=m_GUIArgs.Num; + case MAT_VOLUME : + m_Matrix[m_GUICurrent].Volume[m_GUIArgs.X][m_GUIArgs.Y]=m_GUIArgs.Volume; break; - case SET_PATSEQ : + case SET_CURRENT : + m_Current=m_GUIArgs.Num; + break; + case SET_PATSEQ : m_PatSeq[m_GUIArgs.Y]=m_GUIArgs.Num; break; } @@ -361,17 +361,17 @@ void MatrixPlugin::TransposeUp() { } } -void MatrixPlugin::TransposeDown() +void MatrixPlugin::TransposeDown() { int x, y; - for (y=0; y>version; - + switch (version) { case 1: { s>>m_Current>>m_Time>>m_Step>>m_Loop>>m_NoteCut; - - for (int n=0; n>m_Matrix[n].Length>>m_Matrix[n].Speed>>m_Matrix[n].Octave; diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h index 7a26ed8..937b970 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h @@ -73,7 +73,6 @@ private: GUIArgs m_GUIArgs; - void CopyPattern() { m_CopyPattern = m_Current; } void PastePattern(); void ClearPattern(); void TransposeUp(); diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C index 077ff28..931070d 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C @@ -19,7 +19,7 @@ #include "MatrixPluginGUI.h" #include #include -#include +//#include static const char NoteText[12][3] = {"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"}; @@ -101,88 +101,118 @@ MatrixPluginGUI::MatrixPluginGUI(int w, int h,MatrixPlugin *o,ChannelHandler *ch SpiralPluginGUI(w,h,o,ch), m_LastLight(0), m_LastPatSeqLight(0) -{ +{ //size_range(10,10); - m_NoteCut = new Fl_Button (5, h-30, 85, 20,"NoteCut"); - m_NoteCut->type(1); - m_NoteCut->labelsize(10); - m_NoteCut->value(0); - m_NoteCut->callback((Fl_Callback*)cb_NoteCut); - add(m_NoteCut); - - m_Pattern = new Fl_Counter(5, 20, 40, 20, "View"); - m_Pattern->labelsize(10); - m_Pattern->type(FL_SIMPLE_COUNTER); - m_Pattern->step(1); - m_Pattern->value(0); - m_Pattern->callback((Fl_Callback*)cb_Pattern); - add(m_Pattern); - - m_PlayPattern = new Fl_Counter(50, 20, 40, 20, "Play"); - m_PlayPattern->labelsize(10); - m_PlayPattern->type(FL_SIMPLE_COUNTER); - m_PlayPattern->step(1); - m_PlayPattern->value(0); - m_PlayPattern->callback((Fl_Callback*)cb_PlayPattern); - add(m_PlayPattern); - - m_Length = new Fl_Counter(5, 55, 40, 20, "Length"); - m_Length->labelsize(10); - m_Length->type(FL_SIMPLE_COUNTER); - m_Length->step(1); - m_Length->value(64); - m_Length->callback((Fl_Callback*)cb_Length); - add(m_Length); - - m_Speed = new Fl_Knob (50, 60, 40, 40, "Speed"); - m_Speed->color(Info->GUI_COLOUR); - m_Speed->type(Fl_Knob::DOTLIN); - m_Speed->labelsize(10); - m_Speed->maximum(200); - m_Speed->step(0.01); - m_Speed->value(1.0); - m_Speed->callback((Fl_Callback*)cb_Speed); - add(m_Speed); - - m_SpeedVal = new Fl_Counter (5, 125, 85, 20, ""); - m_SpeedVal->labelsize(10); - m_SpeedVal->value(10); - m_SpeedVal->type(FL_SIMPLE_COUNTER); - m_SpeedVal->step(1); - m_SpeedVal->callback((Fl_Callback*)cb_Speed); - add(m_SpeedVal); - + m_Pattern = new Fl_Counter (5, 20, 40, 20, "View"); + m_Pattern->labelsize (10); + m_Pattern->type (FL_SIMPLE_COUNTER); + m_Pattern->box (FL_PLASTIC_UP_BOX); + m_Pattern->color (Info->GUI_COLOUR); + m_Pattern->step (1); + m_Pattern->minimum (0); + m_Pattern->maximum (NUM_PATTERNS-1); + m_Pattern->value (0); + m_Pattern->callback ((Fl_Callback*)cb_Pattern); + add (m_Pattern); + + m_PlayPattern = new Fl_Counter (50, 20, 40, 20, "Play"); + m_PlayPattern->labelsize (10); + m_PlayPattern->type (FL_SIMPLE_COUNTER); + m_PlayPattern->box (FL_PLASTIC_UP_BOX); + m_PlayPattern->color (Info->GUI_COLOUR); + m_PlayPattern->step (1); + m_PlayPattern->minimum (0); + m_PlayPattern->maximum (NUM_PATTERNS-1); + m_PlayPattern->value (0); + m_PlayPattern->callback ((Fl_Callback*)cb_PlayPattern); + add (m_PlayPattern); + + m_Length = new Fl_Counter (5, 55, 40, 20, "Length"); + m_Length->labelsize (10); + m_Length->type (FL_SIMPLE_COUNTER); + m_Length->box (FL_PLASTIC_UP_BOX); + m_Length->color (Info->GUI_COLOUR); + m_Length->step (1); + m_Length->value (64); + m_Length->minimum (1); + m_Length->maximum (64); + m_Length->callback ((Fl_Callback*)cb_Length); + add (m_Length); + m_Octave = new Fl_Counter(5, 90, 40, 20, "Octave"); - m_Octave->labelsize(10); - m_Octave->type(FL_SIMPLE_COUNTER); - m_Octave->step(1); - m_Octave->value(0); + m_Octave->labelsize(10); + m_Octave->type (FL_SIMPLE_COUNTER); + m_Octave->box (FL_PLASTIC_UP_BOX); + m_Octave->color (Info->GUI_COLOUR); + m_Octave->minimum (0); + m_Octave->maximum (6); + m_Octave->step (1); + m_Octave->value (0); m_Octave->callback((Fl_Callback*)cb_Octave); - add(m_Octave); + add (m_Octave); + + m_Speed = new Fl_Knob (50, 60, 40, 40, "Speed"); + m_Speed->color (Info->GUI_COLOUR); + m_Speed->type (Fl_Knob::DOTLIN); + m_Speed->labelsize (10); + m_Speed->minimum (0); + m_Speed->maximum (200); + m_Speed->step (0.01); + m_Speed->value (8); + m_Speed->callback ((Fl_Callback*)cb_Speed); + add (m_Speed); - m_CopyBtn = new Fl_Button (5, 150, 40, 20, "Copy"); + m_SpeedVal = new Fl_Counter (5, 125, 85, 20, ""); + m_SpeedVal->labelsize (10); + m_SpeedVal->value (10); + m_SpeedVal->type (FL_SIMPLE_COUNTER); + m_SpeedVal->box (FL_PLASTIC_UP_BOX); + m_SpeedVal->color (Info->GUI_COLOUR); + m_SpeedVal->step (1); + m_SpeedVal->maximum (200); + m_SpeedVal->minimum (0); + m_SpeedVal->value (8); + m_SpeedVal->callback ((Fl_Callback*)cb_SpeedVal); + add (m_SpeedVal); + + m_CopyBtn = new Fl_Button (5, 150, 40, 20, "Copy"); m_CopyBtn->labelsize (10); - m_CopyBtn->callback ((Fl_Callback*)cb_CopyBtn); + m_CopyBtn->box (FL_PLASTIC_UP_BOX); + m_CopyBtn->color (Info->GUI_COLOUR); + m_CopyBtn->selection_color (Info->GUI_COLOUR); + m_CopyBtn->callback ((Fl_Callback*)cb_CopyBtn); add (m_CopyBtn); m_PasteBtn = new Fl_Button (50, 150, 40, 20, "Paste"); m_PasteBtn->labelsize (10); + m_PasteBtn->box (FL_PLASTIC_UP_BOX); + m_PasteBtn->color (Info->GUI_COLOUR); + m_PasteBtn->selection_color (Info->GUI_COLOUR); m_PasteBtn->deactivate(); m_PasteBtn->callback ((Fl_Callback*)cb_PasteBtn); add (m_PasteBtn); m_ClearBtn = new Fl_Button (5, 175, 85, 20, "Clear"); m_ClearBtn->labelsize (10); + m_ClearBtn->box (FL_PLASTIC_UP_BOX); + m_ClearBtn->color (Info->GUI_COLOUR); + m_ClearBtn->selection_color (Info->GUI_COLOUR); m_ClearBtn->callback ((Fl_Callback*)cb_ClearBtn); add (m_ClearBtn); m_TransUpBtn = new Fl_Button (5, 200, 40, 20, "Up"); m_TransUpBtn->labelsize (10); + m_TransUpBtn->box (FL_PLASTIC_UP_BOX); + m_TransUpBtn->color (Info->GUI_COLOUR); + m_TransUpBtn->selection_color (Info->GUI_COLOUR); m_TransUpBtn->callback ((Fl_Callback*)cb_TransUpBtn); add (m_TransUpBtn); m_TransDnBtn = new Fl_Button (50, 200, 40, 20, "Down"); m_TransDnBtn->labelsize (10); + m_TransDnBtn->box (FL_PLASTIC_UP_BOX); + m_TransDnBtn->color (Info->GUI_COLOUR); + m_TransDnBtn->selection_color (Info->GUI_COLOUR); m_TransDnBtn->callback ((Fl_Callback*)cb_TransDnBtn); add (m_TransDnBtn); @@ -190,7 +220,17 @@ m_LastPatSeqLight(0) m_TransLbl->labelsize(10); add (m_TransLbl); - int xoff=105; + m_NoteCut = new Fl_Button (5, h-30, 85, 20, "NoteCut"); + m_NoteCut->type (FL_TOGGLE_BUTTON); + m_NoteCut->box (FL_PLASTIC_UP_BOX); + m_NoteCut->color (Info->GUI_COLOUR); + m_NoteCut->selection_color (Info->GUI_COLOUR); + m_NoteCut->labelsize (10); + m_NoteCut->value (0); + m_NoteCut->callback ((Fl_Callback*)cb_NoteCut); + add (m_NoteCut); + + int xoff=105; int yoff=40; int butsize=7; int n=0; @@ -227,7 +267,7 @@ m_LastPatSeqLight(0) box->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT); box->labelsize(8); } - + xoff=103; for(int x=0; xselection_color(FL_WHITE); add(m_Flash[x]); } - + xoff=560; yoff=40; int height=12,gap=2; - + Fl_Box *patseqlabel = new Fl_Box(xoff,yoff-15,30,10,"Pat Seq"); patseqlabel->labelsize(10); add(patseqlabel); - + for(int y=0; ytype(FL_SIMPLE_COUNTER); m_PatSeq[y]->step(1); m_PatSeq[y]->textsize(8); + m_PatSeq[y]->minimum (-1); + m_PatSeq[y]->maximum (NUM_PATTERNS-1); m_PatSeq[y]->callback((Fl_Callback*)cb_PatSeq,(void*)&Numbers[y]); add(m_PatSeq[y]); - + m_PatSeqFlash[y] = new Fl_LED_Button(xoff+25,yoff+y*(height+gap),15,15,""); m_PatSeqFlash[y]->selection_color(FL_WHITE); add(m_PatSeqFlash[y]); } - + end(); } void MatrixPluginGUI::Update() -{ +{ int Light=m_GUICH->GetInt("Step"); if (Light!=m_LastLight) { @@ -327,167 +369,168 @@ void MatrixPluginGUI::UpdateMatrix() } -inline void MatrixPluginGUI::cb_NoteCut_i(Fl_Button* o, void* v) -{ - m_GUICH->Set("NoteCut",o->value()); -} -void MatrixPluginGUI::cb_NoteCut(Fl_Button* o, void* v) -{ ((MatrixPluginGUI*)(o->parent()))->cb_NoteCut_i(o,v);} +// Callbacks - Side Panel - Top Section -inline void MatrixPluginGUI::cb_Matrix_i(Fl_Button* o, void* v) -{ - m_GUICH->Set("X",*(int*)v/MATY); - m_GUICH->Set("Y",*(int*)v%MATY); +inline void MatrixPluginGUI::cb_Pattern_i (Fl_Counter* o, void* v) { + m_GUICH->Set ("Current", (int)o->value()); + UpdateMatrix(); +} - if (o->value()) m_GUICH->SetCommand(MatrixPlugin::MAT_ACTIVATE); - else m_GUICH->SetCommand(MatrixPlugin::MAT_DEACTIVATE); +void MatrixPluginGUI::cb_Pattern (Fl_Counter* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_Pattern_i (o, v); +} - m_GUICH->Wait(); +inline void MatrixPluginGUI::cb_PlayPattern_i (Fl_Counter* o, void* v) { + m_GUICH->Set ("Num", (int)o->value()); + m_GUICH->SetCommand (MatrixPlugin::SET_CURRENT); } -void MatrixPluginGUI::cb_Matrix(Fl_Button* o, void* v) -{ ((MatrixPluginGUI*)(o->parent()))->cb_Matrix_i(o,v);} -inline void MatrixPluginGUI::cb_MatVol_i(Fl_Button* o, void* v) -{ - m_GUICH->Set("X",*(int*)v/MATY); - m_GUICH->Set("Y",*(int*)v%MATY); - m_GUICH->Set("Volume",((Fl_MatrixButton*)o)->GetVolume()); - m_GUICH->SetCommand(MatrixPlugin::MAT_VOLUME); +void MatrixPluginGUI::cb_PlayPattern(Fl_Counter* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_PlayPattern_i (o, v); } -void MatrixPluginGUI::cb_MatVol(Fl_Button* o, void* v) -{ ((MatrixPluginGUI*)(o->parent()))->cb_MatVol_i(o,v);} -inline void MatrixPluginGUI::cb_Pattern_i(Fl_Counter* o, void* v) -{ - if (o->value()<0) o->value(0); - if (o->value()>NUM_PATTERNS-1) o->value(NUM_PATTERNS-1); - m_GUICH->Set("Current",(int)o->value()); - UpdateMatrix(); +inline void MatrixPluginGUI::cb_Length_i (Fl_Counter* o, void* v) +{ + m_GUICH->Set ("Length", (int)o->value()); + m_GUICH->SetCommand (MatrixPlugin::MAT_LENGTH); } -void MatrixPluginGUI::cb_Pattern(Fl_Counter* o, void* v) -{ ((MatrixPluginGUI*)(o->parent()))->cb_Pattern_i(o,v);} -inline void MatrixPluginGUI::cb_PlayPattern_i(Fl_Counter* o, void* v) -{ - if (o->value()<0) o->value(0); - if (o->value()>NUM_PATTERNS-1) o->value(NUM_PATTERNS-1); - m_GUICH->Set("Num",(int)o->value()); - m_GUICH->SetCommand(MatrixPlugin::SET_CURRENT); +void MatrixPluginGUI::cb_Length (Fl_Counter* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_Length_i (o, v); } -void MatrixPluginGUI::cb_PlayPattern(Fl_Counter* o, void* v) -{ ((MatrixPluginGUI*)(o->parent()))->cb_PlayPattern_i(o,v);} -inline void MatrixPluginGUI::cb_Length_i(Fl_Counter* o, void* v) -{ - if (o->value()<1) o->value(1); - if (o->value()>64) o->value(64); - - m_GUICH->Set("Length",(int)o->value()); - m_GUICH->SetCommand(MatrixPlugin::MAT_LENGTH); +inline void MatrixPluginGUI::cb_Octave_i (Fl_Counter* o, void* v) { + m_GUICH->Set ("Octave", (int)o->value()); + m_GUICH->SetCommand (MatrixPlugin::MAT_OCTAVE); +} +void MatrixPluginGUI::cb_Octave (Fl_Counter* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_Octave_i (o, v); } -void MatrixPluginGUI::cb_Length(Fl_Counter* o, void* v) -{ ((MatrixPluginGUI*)(o->parent()))->cb_Length_i(o,v);} -inline void MatrixPluginGUI::cb_Speed_i(Fl_Knob* o, void* v) -{ +inline void MatrixPluginGUI::cb_Speed_i (Fl_Knob* o, void* v) +{ // Round off value, but it should be a float for tweaking - float value=o->value()+((int)o->value()-o->value()); - m_SpeedVal->value(value); - - m_GUICH->Set("Speed",(float)value/8.0f); - m_GUICH->SetCommand(MatrixPlugin::MAT_SPEED); + float value = o->value() + ((int)o->value() - o->value()); + m_SpeedVal->value (value); + m_GUICH->Set ("Speed", (float)value / 8.0f); + m_GUICH->SetCommand (MatrixPlugin::MAT_SPEED); } -void MatrixPluginGUI::cb_Speed(Fl_Knob* o, void* v) -{ ((MatrixPluginGUI*)(o->parent()))->cb_Speed_i(o,v);} -inline void MatrixPluginGUI::cb_Octave_i(Fl_Counter* o, void* v) -{ - if (o->value()<0) o->value(0); - if (o->value()>6) o->value(6); - - m_GUICH->Set("Octave",(int)o->value()); - m_GUICH->SetCommand(MatrixPlugin::MAT_OCTAVE); +void MatrixPluginGUI::cb_Speed (Fl_Knob* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_Speed_i (o, v); } -void MatrixPluginGUI::cb_Octave(Fl_Counter* o, void* v) -{ ((MatrixPluginGUI*)(o->parent()))->cb_Octave_i(o,v);} -inline void MatrixPluginGUI::cb_SpeedVal_i (Fl_Counter* o, void* v) +inline void MatrixPluginGUI::cb_SpeedVal_i (Fl_Counter* o, void* v) { - m_Speed->value(o->value()); + float value = o->value(); + m_Speed->value (value); + m_GUICH->Set ("Speed", (float)value / 8.0f); + m_GUICH->SetCommand (MatrixPlugin::MAT_SPEED); } -void MatrixPluginGUI::cb_SpeedVal (Fl_Counter* o, void* v) -{ - ((MatrixPluginGUI*)(o->parent())) -> cb_SpeedVal_i (o, v); +void MatrixPluginGUI::cb_SpeedVal (Fl_Counter* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_SpeedVal_i (o, v); } -inline void MatrixPluginGUI::cb_CopyBtn_i (Fl_Button* o, void* v) -{ +// Callbacks - Side Panel - Editing Section + +inline void MatrixPluginGUI::cb_CopyBtn_i (Fl_Button* o, void* v) { m_PasteBtn->activate(); - m_GUICH->SetCommand(MatrixPlugin::COPY); - UpdateMatrix(); + m_GUICH->SetCommand (MatrixPlugin::COPY); + UpdateMatrix(); } -void MatrixPluginGUI::cb_CopyBtn (Fl_Button* o, void* v) -{ +void MatrixPluginGUI::cb_CopyBtn (Fl_Button* o, void* v) { ((MatrixPluginGUI*)(o->parent())) -> cb_CopyBtn_i (o, v); } -inline void MatrixPluginGUI::cb_PasteBtn_i (Fl_Button* o, void* v) -{ - m_GUICH->SetCommand(MatrixPlugin::PASTE); - UpdateMatrix(); +inline void MatrixPluginGUI::cb_PasteBtn_i (Fl_Button* o, void* v) { + m_GUICH->SetCommand (MatrixPlugin::PASTE); + UpdateMatrix(); } -void MatrixPluginGUI::cb_PasteBtn (Fl_Button* o, void* v) -{ +void MatrixPluginGUI::cb_PasteBtn (Fl_Button* o, void* v) { ((MatrixPluginGUI*)(o->parent())) -> cb_PasteBtn_i (o, v); } -inline void MatrixPluginGUI::cb_ClearBtn_i (Fl_Button* o, void* v) -{ - m_GUICH->SetCommand(MatrixPlugin::CLEAR); - UpdateMatrix(); +inline void MatrixPluginGUI::cb_ClearBtn_i (Fl_Button* o, void* v) { + m_GUICH->SetCommand (MatrixPlugin::CLEAR); + UpdateMatrix(); } -void MatrixPluginGUI::cb_ClearBtn (Fl_Button* o, void* v) -{ +void MatrixPluginGUI::cb_ClearBtn (Fl_Button* o, void* v) { ((MatrixPluginGUI*)(o->parent())) -> cb_ClearBtn_i (o, v); } -inline void MatrixPluginGUI::cb_TransUpBtn_i (Fl_Button* o, void* v) -{ - m_GUICH->SetCommand(MatrixPlugin::TUP); - UpdateMatrix(); +// Callbacks - Side Panel - Transpose Section + +inline void MatrixPluginGUI::cb_TransUpBtn_i (Fl_Button* o, void* v) { + m_GUICH->SetCommand(MatrixPlugin::TUP); + UpdateMatrix(); } -void MatrixPluginGUI::cb_TransUpBtn (Fl_Button* o, void* v) -{ +void MatrixPluginGUI::cb_TransUpBtn (Fl_Button* o, void* v) { ((MatrixPluginGUI*)(o->parent())) -> cb_TransUpBtn_i (o, v); } -inline void MatrixPluginGUI::cb_TransDnBtn_i (Fl_Button* o, void* v) -{ - m_GUICH->SetCommand(MatrixPlugin::TDOWN); - UpdateMatrix(); +inline void MatrixPluginGUI::cb_TransDnBtn_i (Fl_Button* o, void* v) { + m_GUICH->SetCommand(MatrixPlugin::TDOWN); + UpdateMatrix(); } -void MatrixPluginGUI::cb_TransDnBtn (Fl_Button* o, void* v) -{ +void MatrixPluginGUI::cb_TransDnBtn (Fl_Button* o, void* v) { ((MatrixPluginGUI*)(o->parent())) -> cb_TransDnBtn_i (o, v); } -inline void MatrixPluginGUI::cb_PatSeq_i(Fl_Counter* o, void* v) -{ - if (o->value()<-1) o->value(-1); - if (o->value()>NUM_PATTERNS-1) o->value(NUM_PATTERNS-1); - m_GUICH->Set("Num",(int)o->value()); - m_GUICH->Set("Y",*(int*)v); - m_GUICH->SetCommand(MatrixPlugin::SET_PATSEQ); +// Callbacks - Side Panel - Bottom Section + +inline void MatrixPluginGUI::cb_NoteCut_i (Fl_Button* o, void* v) { + m_GUICH->Set ("NoteCut",o->value()); +} + +void MatrixPluginGUI::cb_NoteCut (Fl_Button* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_NoteCut_i (o,v); +} + +// Callbacks - Matrix + +inline void MatrixPluginGUI::cb_Matrix_i (Fl_Button* o, void* v) { + m_GUICH->Set ("X", *(int*)v/MATY); + m_GUICH->Set ("Y", *(int*)v%MATY); + if (o->value()) m_GUICH->SetCommand (MatrixPlugin::MAT_ACTIVATE); + else m_GUICH->SetCommand (MatrixPlugin::MAT_DEACTIVATE); + m_GUICH->Wait(); +} + +void MatrixPluginGUI::cb_Matrix (Fl_Button* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_Matrix_i (o, v); +} + +inline void MatrixPluginGUI::cb_MatVol_i (Fl_Button* o, void* v) { + m_GUICH->Set ("X", *(int*)v/MATY); + m_GUICH->Set ("Y", *(int*)v%MATY); + m_GUICH->Set ("Volume", ((Fl_MatrixButton*)o)->GetVolume()); + m_GUICH->SetCommand (MatrixPlugin::MAT_VOLUME); +} + +void MatrixPluginGUI::cb_MatVol (Fl_Button* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_MatVol_i (o, v); } -void MatrixPluginGUI::cb_PatSeq(Fl_Counter* o, void* v) -{ ((MatrixPluginGUI*)(o->parent()))->cb_PatSeq_i(o,v);} + +// Callbacks - Pattern Sequencer + +inline void MatrixPluginGUI::cb_PatSeq_i (Fl_Counter* o, void* v) { + m_GUICH->Set("Num", (int)o->value()); + m_GUICH->Set("Y", *(int*)v); + m_GUICH->SetCommand (MatrixPlugin::SET_PATSEQ); +} + +void MatrixPluginGUI::cb_PatSeq (Fl_Counter* o, void* v) { + ((MatrixPluginGUI*)(o->parent()))->cb_PatSeq_i (o, v); +} + +// Help text const string MatrixPluginGUI::GetHelpText(const string &loc){ return string("") @@ -495,7 +538,7 @@ const string MatrixPluginGUI::GetHelpText(const string &loc){ + "drum programming, but also capable of robotic bass and melodies.\n\n" + "Note events are turned on and off by activating the 64*32 grid of\n" + "toggle buttons on the GUI. The speed and octave of the notes can be\n" - + "set. The length of the pattern in notes and note cut are also\n" + + "set. The length of the pattern in notes and note cut are also\n" + "present. The current play position is indicated by the row of LED's\n" + "along the top of the plugin window. You can copy and paste between\n" + "different patterns and transpose the notes\n\n" diff --git a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h index b324c97..964a281 100644 --- a/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h +++ b/SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h @@ -56,12 +56,12 @@ private: Fl_Slider *m_Volume; float m_VolVal; Fl_Color m_SelCol; - + void (*cb_VolChange)(Fl_Widget*, void*); void *cb_context; - + inline void cb_Vol_i(Fl_Slider* o, void* v); - static void cb_Vol(Fl_Slider* o, void* v); + static void cb_Vol(Fl_Slider* o, void* v); }; @@ -72,19 +72,19 @@ public: virtual void UpdateValues(SpiralPlugin *o); virtual void Update(); - + protected: - const string GetHelpText(const string &loc); - + const string GetHelpText(const string &loc); + private: - + void UpdateMatrix(); - + int Numbers[MATX*MATY]; Pattern m_GUIMatrix[NUM_PATTERNS]; int m_LastLight; int m_LastPatSeqLight; - + Fl_Button* m_NoteCut; Fl_Counter* m_Pattern; Fl_Counter* m_PlayPattern; @@ -98,43 +98,41 @@ private: Fl_Button* m_PasteBtn; Fl_Button* m_ClearBtn; Fl_Box* m_TransLbl; - Fl_Button* m_TransUpBtn; + Fl_Button* m_TransUpBtn; Fl_Button* m_TransDnBtn; - Fl_Counter* m_PatSeq[NUM_PATSEQ]; Fl_LED_Button* m_PatSeqFlash[NUM_PATSEQ]; - //// Callbacks //// - inline void cb_Matrix_i(Fl_Button* o, void* v); - static void cb_Matrix(Fl_Button* o, void* v); - inline void cb_MatVol_i(Fl_Button* o, void* v); - static void cb_MatVol(Fl_Button* o, void* v); - inline void cb_Pattern_i(Fl_Counter* o, void* v); - static void cb_Pattern(Fl_Counter* o, void* v); - inline void cb_PlayPattern_i(Fl_Counter* o, void* v); - static void cb_PlayPattern(Fl_Counter* o, void* v); - inline void cb_Length_i(Fl_Counter* o, void* v); - static void cb_Length(Fl_Counter* o, void* v); - inline void cb_Speed_i(Fl_Knob* o, void* v); - static void cb_Speed(Fl_Knob* o, void* v); - inline void cb_NoteCut_i(Fl_Button* o, void* v); - static void cb_NoteCut(Fl_Button* o, void* v); - inline void cb_Octave_i(Fl_Counter* o, void* v); - static void cb_Octave(Fl_Counter* o, void* v); + inline void cb_Matrix_i (Fl_Button* o, void* v); + static void cb_Matrix (Fl_Button* o, void* v); + inline void cb_MatVol_i (Fl_Button* o, void* v); + static void cb_MatVol (Fl_Button* o, void* v); + inline void cb_Pattern_i (Fl_Counter* o, void* v); + static void cb_Pattern (Fl_Counter* o, void* v); + inline void cb_PlayPattern_i (Fl_Counter* o, void* v); + static void cb_PlayPattern (Fl_Counter* o, void* v); + inline void cb_Length_i (Fl_Counter* o, void* v); + static void cb_Length (Fl_Counter* o, void* v); + inline void cb_Speed_i (Fl_Knob* o, void* v); + static void cb_Speed (Fl_Knob* o, void* v); inline void cb_SpeedVal_i (Fl_Counter* o, void* v); static void cb_SpeedVal (Fl_Counter* o, void* v); - inline void cb_CopyBtn_i (Fl_Button* o, void* v); + inline void cb_NoteCut_i (Fl_Button* o, void* v); + static void cb_NoteCut (Fl_Button* o, void* v); + inline void cb_Octave_i (Fl_Counter* o, void* v); + static void cb_Octave (Fl_Counter* o, void* v); + inline void cb_CopyBtn_i (Fl_Button* o, void* v); static void cb_CopyBtn (Fl_Button* o, void* v); - inline void cb_PasteBtn_i (Fl_Button* o, void* v); + inline void cb_PasteBtn_i (Fl_Button* o, void* v); static void cb_PasteBtn (Fl_Button* o, void* v); - inline void cb_ClearBtn_i (Fl_Button* o, void* v); + inline void cb_ClearBtn_i (Fl_Button* o, void* v); static void cb_ClearBtn (Fl_Button* o, void* v); - inline void cb_TransUpBtn_i (Fl_Button* o, void* v); + inline void cb_TransUpBtn_i (Fl_Button* o, void* v); static void cb_TransUpBtn (Fl_Button* o, void* v); - inline void cb_TransDnBtn_i (Fl_Button* o, void* v); + inline void cb_TransDnBtn_i (Fl_Button* o, void* v); static void cb_TransDnBtn (Fl_Button* o, void* v); - inline void cb_PatSeq_i(Fl_Counter* o, void* v); - static void cb_PatSeq(Fl_Counter* o, void* v); + inline void cb_PatSeq_i (Fl_Counter* o, void* v); + static void cb_PatSeq (Fl_Counter* o, void* v); }; #endif