diff --git a/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C b/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C index 540da8f..a62a18c 100644 --- a/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C +++ b/SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C @@ -148,7 +148,7 @@ void EchoPluginGUI::cb_Feedback(Fl_Knob* o, void* v) inline void EchoPluginGUI::cb_NumDelay_i (Fl_Counter* o, void* v) { float value = o->value(); - m_NumDelay->value (value); + m_Delay->value (value); m_GUICH->Set ("Delay", value); } diff --git a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C index 3a8adf6..7d7bc13 100644 --- a/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C +++ b/SpiralSound/Plugins/FilterPlugin/FilterPlugin.C @@ -112,7 +112,7 @@ void FilterPlugin::Execute() { float Cutoff; float Resonance; - + if (fc<0) return; for (int n=0; nBUFSIZE; n++) diff --git a/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C b/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C index c5122b3..e91557e 100644 --- a/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C +++ b/SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C @@ -33,7 +33,7 @@ SpiralPluginGUI(w,h,o,ch) Cutoff->labelsize(10); Cutoff->maximum(100); Cutoff->step(0.01); - Cutoff->value(10); + Cutoff->value(90.51); Cutoff->callback((Fl_Callback*)cb_Cutoff); Resonance = new Fl_Knob(58, 18, 45, 45, ""); @@ -68,36 +68,36 @@ void FilterPluginGUI::UpdateValues(SpiralPlugin *o) { FilterPlugin *Plugin = (FilterPlugin*)o; - Cutoff->value(100.0f-sqrt(Plugin->GetCutoff()-10.0f)); + Cutoff->value(100.0f-sqrt(Plugin->GetCutoff())-10.0f); Resonance->value(Plugin->GetResonance()-1.0f); RevCutoff->value(0); RevResonance->value(0); - + if (Plugin->GetRevCutoffMod()) RevCutoff->value(1); if (Plugin->GetRevResonanceMod()) RevResonance->value(1); } -inline void FilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v) -{ +inline void FilterPluginGUI::cb_Cutoff_i(Fl_Slider* o, void* v) +{ float value=100.0f-o->value(); - m_GUICH->Set("Cutoff",(float)(value*value)+10.0f); + m_GUICH->Set("Cutoff",(float)(value*value)+10.0f); } -void FilterPluginGUI::cb_Cutoff(Fl_Slider* o, void* v) +void FilterPluginGUI::cb_Cutoff(Fl_Slider* o, void* v) { ((FilterPluginGUI*)(o->parent()))->cb_Cutoff_i(o,v); } -inline void FilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v) +inline void FilterPluginGUI::cb_Resonance_i(Fl_Knob* o, void* v) { m_GUICH->Set("Resonance",(float)(o->value()+1.0f)); } -void FilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v) +void FilterPluginGUI::cb_Resonance(Fl_Knob* o, void* v) { ((FilterPluginGUI*)(o->parent()))->cb_Resonance_i(o,v); } -inline void FilterPluginGUI::cb_RevCutoff_i(Fl_Button* o, void* v) +inline void FilterPluginGUI::cb_RevCutoff_i(Fl_Button* o, void* v) { m_GUICH->Set("RevC",(bool)o->value()); } -void FilterPluginGUI::cb_RevCutoff(Fl_Button* o, void* v) +void FilterPluginGUI::cb_RevCutoff(Fl_Button* o, void* v) { ((FilterPluginGUI*)(o->parent()))->cb_RevCutoff_i(o,v); } -inline void FilterPluginGUI::cb_RevResonance_i(Fl_Button* o, void* v) +inline void FilterPluginGUI::cb_RevResonance_i(Fl_Button* o, void* v) { m_GUICH->Set("RevR",(bool)o->value()); } void FilterPluginGUI::cb_RevResonance(Fl_Button* o, void* v) { ((FilterPluginGUI*)(o->parent()))->cb_RevResonance_i(o,v); } diff --git a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C index f2d7d47..e198423 100644 --- a/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C +++ b/SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C @@ -222,14 +222,14 @@ void OscillatorPluginGUI::UpdateValues (SpiralPlugin *o) { m_PulseWidth->value (val); m_NumPulseWidth->value (val * 100); - val = Plugin->GetModAmount(); - m_ModAmount->value (val); - m_NumModAmount->value (val * 100); - val = 0.2f - Plugin->GetSHLen(); m_SHLen->value (val); m_NumSHLen->value (val); + val = Plugin->GetModAmount(); + m_ModAmount->value (val); + m_NumModAmount->value (val * 100); + m_NumOctave->value (Plugin->GetOctave()); m_Octave->value ((int)m_NumOctave->value() + 3); m_FineTune->value (sqrt (Plugin->GetFineFreq())); diff --git a/SpiralSound/Plugins/WaveTablePlugin/Makefile.in b/SpiralSound/Plugins/WaveTablePlugin/Makefile.in index 28ff309..f98bf40 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/Makefile.in +++ b/SpiralSound/Plugins/WaveTablePlugin/Makefile.in @@ -41,6 +41,7 @@ mandir = @mandir@ HEADERS = ../SpiralPlugin.h \ ../SpiralPluginGUI.h \ ../Widgets/Fl_Knob.H \ + ../Widgets/Fl_LED_Button.H \ ../Widgets/Fl_DragBar.H \ ../GUI/WS_Square.h \ ../GUI/WS_Saw.h \ @@ -58,6 +59,7 @@ SOURCES = ../SpiralPlugin.C \ ../SpiralPluginGUI.C \ ../../ChannelHandler.C \ ../Widgets/Fl_Knob.cxx \ + ../Widgets/Fl_LED_Button.cxx \ ../Widgets/Fl_DragBar.cxx \ ../../Sample.C \ WaveTablePlugin.C \ @@ -66,6 +68,7 @@ OBJECTS = ../SpiralPlugin.o \ ../SpiralPluginGUI.o \ ../../ChannelHandler.o \ ../Widgets/Fl_Knob.o \ + ../Widgets/Fl_LED_Button.o \ ../Widgets/Fl_DragBar.o \ ../../Sample.o \ WaveTablePlugin.o \ @@ -142,6 +145,9 @@ install: ../Widgets/Fl_Knob.o: ../Widgets/Fl_Knob.cxx \ ../Widgets/Fl_Knob.H +../Widgets/Fl_LED_Button.o: ../Widgets/Fl_LED_Button.cxx \ + ../Widgets/Fl_LED_Button.H + ../Widgets/Fl_DragBar.o: ../Widgets/Fl_DragBar.cxx \ ../Widgets/Fl_DragBar.H @@ -151,13 +157,14 @@ install: WaveTablePlugin.o: WaveTablePlugin.C \ WaveTablePlugin.h \ + WaveTablePluginGUI.h \ ../SpiralPlugin.h \ + ../SpiralPluginGUI.h \ ../../Sample.h \ ../../SpiralInfo.h \ ../../Sample.h \ - WaveTablePluginGUI.h \ ../Widgets/Fl_Knob.H \ - ../SpiralPluginGUI.h \ + ../Widgets/Fl_LED_Button.H \ ../Widgets/Fl_DragBar.H \ SpiralIcon.xpm @@ -167,6 +174,7 @@ WaveTablePluginGUI.o: WaveTablePluginGUI.C \ ../SpiralPluginGUI.h \ ../SpiralPlugin.h \ ../Widgets/Fl_Knob.H \ + ../Widgets/Fl_LED_Button.H \ ../Widgets/Fl_DragBar.H \ ../GUI/WS_Square.h \ ../GUI/WS_Saw.h \ diff --git a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C index 4ddfbd8..cef1a67 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C +++ b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C @@ -62,8 +62,8 @@ m_TableLength(DEFAULT_TABLE_LEN) m_Note=0; m_PluginInfo.Name="WaveTable"; - m_PluginInfo.Width=245; - m_PluginInfo.Height=110; + m_PluginInfo.Width=210; + m_PluginInfo.Height=140; m_PluginInfo.NumInputs=1; m_PluginInfo.NumOutputs=1; m_PluginInfo.PortTips.push_back("Frequency CV"); diff --git a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h index 13027e5..be05e28 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h +++ b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h @@ -48,7 +48,7 @@ public: Type GetType() { return m_Type; } int GetOctave() { return m_Octave; } - float GetFinefreq() { return m_FineFreq; } + float GetFineFreq() { return m_FineFreq; } float GetModAmount(){ return m_ModAmount; } private: diff --git a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C index 9a41403..1962a8d 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C +++ b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C @@ -28,291 +28,370 @@ #include "../GUI/WS_Pulse2.h" #include "../GUI/WS_InvSine.h" -WaveTablePluginGUI::WaveTablePluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info) : -SpiralPluginGUI(w,h,o,ch), -pixmap_Square(image_Square), -pixmap_Saw(image_Saw), -pixmap_RevSaw(image_RevSaw), -pixmap_Tri(image_Tri), -pixmap_Sine(image_Sine), -pixmap_Pulse1(image_Pulse1), -pixmap_Pulse2(image_Pulse2), -pixmap_InvSine(image_InvSine), -m_FineFreq(0), -m_Octave(0) +WaveTablePluginGUI::WaveTablePluginGUI (int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info) : +SpiralPluginGUI (w, h, o, ch), +m_PixmapSine (image_Sine), +m_PixmapSquare (image_Square), +m_PixmapSaw (image_Saw), +m_PixmapRevSaw (image_RevSaw), +m_PixmapTri (image_Tri), +m_PixmapPulse1 (image_Pulse1), +m_PixmapPulse2 (image_Pulse2), +m_PixmapInvSine (image_InvSine), +m_FineFreq (0) { - ShapeSine = new Fl_Check_Button(5, 15, 55, 30); - ShapeSine->type(102); - ShapeSine->down_box(FL_DIAMOND_DOWN_BOX); - ShapeSine->selection_color(Info->GUI_COLOUR); - pixmap_Sine.label(ShapeSine); - ShapeSine->set(); - ShapeSine->callback((Fl_Callback*)cb_Sine); - - ShapeSquare = new Fl_Check_Button(5, 35, 55, 30); - ShapeSquare->type(102); - ShapeSquare->down_box(FL_DIAMOND_DOWN_BOX); - ShapeSquare->selection_color(Info->GUI_COLOUR); - pixmap_Square.label(ShapeSquare); - ShapeSquare->callback((Fl_Callback*)cb_Square); - - ShapeSaw = new Fl_Check_Button(5, 55, 55, 30); - ShapeSaw->type(102); - ShapeSaw->down_box(FL_DIAMOND_DOWN_BOX); - ShapeSaw->selection_color(Info->GUI_COLOUR); - pixmap_Saw.label(ShapeSaw); - ShapeSaw->callback((Fl_Callback*)cb_Saw); - - ShapeRevSaw = new Fl_Check_Button(5, 75, 55, 30); - ShapeRevSaw->type(102); - ShapeRevSaw->down_box(FL_DIAMOND_DOWN_BOX); - ShapeRevSaw->selection_color(Info->GUI_COLOUR); - pixmap_RevSaw.label(ShapeRevSaw); - ShapeRevSaw->callback((Fl_Callback*)cb_RevSaw); - - ShapeTri = new Fl_Check_Button(55, 15, 55, 30); - ShapeTri->type(102); - ShapeTri->down_box(FL_DIAMOND_DOWN_BOX); - ShapeTri->selection_color(Info->GUI_COLOUR); - pixmap_Tri.label(ShapeTri); - ShapeTri->callback((Fl_Callback*)cb_Tri); - - Pulse1 = new Fl_Check_Button(55, 35, 55, 30); - Pulse1->type(102); - Pulse1->down_box(FL_DIAMOND_DOWN_BOX); - Pulse1->selection_color(Info->GUI_COLOUR); - pixmap_Pulse1.label(Pulse1); - Pulse1->callback((Fl_Callback*)cb_Pulse1); - - Pulse2 = new Fl_Check_Button(55, 55, 55, 30); - Pulse2->type(102); - Pulse2->down_box(FL_DIAMOND_DOWN_BOX); - Pulse2->selection_color(Info->GUI_COLOUR); - pixmap_Pulse2.label(Pulse2); - Pulse2->callback((Fl_Callback*)cb_Pulse2); - - ShapeInvSine = new Fl_Check_Button(55, 75, 55, 30); - ShapeInvSine->type(102); - ShapeInvSine->down_box(FL_DIAMOND_DOWN_BOX); - ShapeInvSine->selection_color(Info->GUI_COLOUR); - pixmap_InvSine.label(ShapeInvSine); - ShapeInvSine->callback((Fl_Callback*)cb_InvSine); - - - - Freq = new Fl_Knob(188, 2, 40, 40, "Octave"); - Freq->color(Info->GUI_COLOUR); - Freq->type(Fl_Knob::LINELIN); - Freq->labelsize(10); - Freq->maximum(6); - Freq->step(1); - Freq->value(3); - Freq->scaleticks(6); - Freq->cursor(50); - Freq->callback((Fl_Callback*)cb_Freq); - - FineTune = new Fl_Knob(112, 22, 65, 65, "Fine Tune"); - FineTune->color(Info->GUI_COLOUR); - FineTune->type(Fl_Knob::LINELIN); - FineTune->labelsize(10); - FineTune->scaleticks(20); - FineTune->maximum(1.414); - FineTune->step(0.000001); - FineTune->value(1); - FineTune->callback((Fl_Callback*)cb_FineTune); - - ModAmount = new Fl_Knob(188, 54, 40, 40, "Mod Depth"); - ModAmount->color(Info->GUI_COLOUR); - ModAmount->type(Fl_Knob::LINELIN); - ModAmount->labelsize(10); - ModAmount->maximum(2.0f); - ModAmount->step(0.001); - ModAmount->value(1.0); - ModAmount->callback((Fl_Callback*)cb_ModAmount); - - 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_ICON_LABEL); - m_pop->labelsize(10); - m_pop->labelcolor(25); - m_pop->callback((Fl_Callback*)cb_pop); - - m_out_freq = new Fl_Output(65,h+5, 58, 15, "Frequency"); - m_out_freq->box(FL_ENGRAVED_BOX); - m_out_freq->color(16); - m_out_freq->labelsize(10); - m_out_freq->textsize(10); - m_out_freq->hide(); - m_out_freq->set_output(); - - m_out_mod = new Fl_Output(188,h+5, 48, 15, "Modulation"); - m_out_mod->box(FL_ENGRAVED_BOX); - m_out_mod->color(16); - m_out_mod->labelsize(10); - m_out_mod->textsize(10); - m_out_mod->hide(); - m_out_mod->set_output(); - - end(); -} - -extern "C" int sprintf(char *,const char *,...); - -void WaveTablePluginGUI::UpdateValues(SpiralPlugin *o) -{ - WaveTablePlugin *Plugin = (WaveTablePlugin*)o; - - ShapeSquare->value(0); - ShapeRevSaw->value(0); - ShapeSaw->value(0); - ShapeTri->value(0); - ShapeSine->value(0); - Pulse1->value(0); - Pulse2->value(0); - ShapeInvSine->value(0); - - switch (Plugin->GetType()) - { - case WaveTablePlugin::SQUARE : ShapeSquare->value(1); break; - case WaveTablePlugin::SINE : ShapeSine->value(1); break; - case WaveTablePlugin::SAW : ShapeSaw->value(1); break; - case WaveTablePlugin::REVSAW : ShapeRevSaw->value(1); break; - case WaveTablePlugin::TRIANGLE : ShapeTri->value(1); break; - case WaveTablePlugin::PULSE1 : Pulse1->value(1); break; - case WaveTablePlugin::PULSE2 : Pulse2->value(1); break; - case WaveTablePlugin::INVSINE : ShapeInvSine->value(1); break; - } - - Freq->value (Plugin->GetOctave () - 3); - ModAmount->value(Plugin->GetModAmount()); - FineTune->value(sqrt(Plugin->GetFinefreq())); - - char str[10]; - float fr = 110.0f * Plugin->GetFinefreq(); - m_FineFreq=Plugin->GetFinefreq(); - int oc = Plugin->GetOctave(); - m_Octave = oc; - if (oc > 0) fr *= 1 << oc; - if (oc < 0) fr /= 1 << (-oc); - sprintf(str,"%4.1f Hz", fr); - m_out_freq->value(str); - sprintf(str,"%4.0f %%", 100*Plugin->GetModAmount()); - m_out_mod->value(str); -} - - -//// Callbacks //// - -inline void WaveTablePluginGUI::cb_Freq_i(Fl_Knob* o, void* v) -{ - char str[10]; - m_GUICH->Set("Octave",(int)o->value()-3); - m_Octave=(int)o->value()-3; - float fr = 110.0f * m_FineFreq; - int oc = m_Octave; - if (oc > 0) fr *= 1 << oc; - if (oc < 0) fr /= 1 << (-oc); - sprintf(str,"%4.1f Hz", fr); - m_out_freq->value(str); -} -void WaveTablePluginGUI::cb_Freq(Fl_Knob* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_Freq_i(o,v); } - -inline void WaveTablePluginGUI::cb_FineTune_i(Fl_Knob* o, void* v) -{ - char str[10]; - m_GUICH->Set("FineFreq",(float)(o->value()*o->value())); - m_FineFreq=(float)(o->value()*o->value()); - float fr = 110.0f * m_FineFreq; - int oc = m_Octave; - if (oc > 0) fr *= 1 << oc; - if (oc < 0) fr /= 1 << (-oc); - sprintf(str,"%4.1f Hz", fr); - m_out_freq->value(str); -} - -void WaveTablePluginGUI::cb_FineTune(Fl_Knob* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_FineTune_i(o,v); } - -inline void WaveTablePluginGUI::cb_Square_i(Fl_Check_Button* o, void* v) -{ m_GUICH->Set("Type",(char)WaveTablePlugin::SQUARE); } -void WaveTablePluginGUI::cb_Square(Fl_Check_Button* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_Square_i(o,v); } - -inline void WaveTablePluginGUI::cb_Saw_i(Fl_Check_Button* o, void* v) -{ m_GUICH->Set("Type",(char)WaveTablePlugin::SAW); } -void WaveTablePluginGUI::cb_Saw(Fl_Check_Button* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_Saw_i(o,v); } - -inline void WaveTablePluginGUI::cb_Sine_i(Fl_Check_Button* o, void* v) -{ m_GUICH->Set("Type",(char)WaveTablePlugin::SINE); } -void WaveTablePluginGUI::cb_Sine(Fl_Check_Button* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_Sine_i(o,v); } - -inline void WaveTablePluginGUI::cb_RevSaw_i(Fl_Check_Button* o, void* v) -{ m_GUICH->Set("Type",(char)WaveTablePlugin::REVSAW); } -void WaveTablePluginGUI::cb_RevSaw(Fl_Check_Button* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_RevSaw_i(o,v); } - -inline void WaveTablePluginGUI::cb_Tri_i(Fl_Check_Button* o, void* v) -{ m_GUICH->Set("Type",(char)WaveTablePlugin::TRIANGLE); } -void WaveTablePluginGUI::cb_Tri(Fl_Check_Button* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_Tri_i(o,v); } - -inline void WaveTablePluginGUI::cb_Pulse1_i(Fl_Check_Button* o, void* v) -{ m_GUICH->Set("Type",(char)WaveTablePlugin::PULSE1); } -void WaveTablePluginGUI::cb_Pulse1(Fl_Check_Button* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_Pulse1_i(o,v); } - -inline void WaveTablePluginGUI::cb_Pulse2_i(Fl_Check_Button* o, void* v) -{ m_GUICH->Set("Type",(char)WaveTablePlugin::PULSE2); } -void WaveTablePluginGUI::cb_Pulse2(Fl_Check_Button* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_Pulse2_i(o,v); } - -inline void WaveTablePluginGUI::cb_InvSine_i(Fl_Check_Button* o, void* v) -{ m_GUICH->Set("Type",(char)WaveTablePlugin::INVSINE); } -void WaveTablePluginGUI::cb_InvSine(Fl_Check_Button* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_InvSine_i(o,v); } - -inline void WaveTablePluginGUI::cb_ModAmount_i(Fl_Knob* o, void* v) + m_ShapeSine = new Fl_LED_Button (2, 15, 23, 23); + m_ShapeSine->type (FL_RADIO_BUTTON); + m_PixmapSine.label (m_ShapeSine); + m_ShapeSine->set(); + m_ShapeSine->callback ((Fl_Callback*)cb_Sine); + add (m_ShapeSine); + + m_ShapeSquare = new Fl_LED_Button (2, 45, 23, 23); + m_ShapeSquare->type (FL_RADIO_BUTTON); + m_PixmapSquare.label (m_ShapeSquare); + m_ShapeSquare->callback ((Fl_Callback*)cb_Square); + add (m_ShapeSquare); + + m_ShapeSaw = new Fl_LED_Button (2, 75, 23, 23); + m_ShapeSaw->type (FL_RADIO_BUTTON); + m_PixmapSaw.label (m_ShapeSaw); + m_ShapeSaw->callback ((Fl_Callback*)cb_Saw); + add (m_ShapeSaw); + + m_ShapeRevSaw = new Fl_LED_Button (2, 105, 23, 23); + m_ShapeRevSaw->type (FL_RADIO_BUTTON); + m_PixmapRevSaw.label (m_ShapeRevSaw); + m_ShapeRevSaw->callback ((Fl_Callback*)cb_RevSaw); + add (m_ShapeRevSaw); + + m_ShapeTri = new Fl_LED_Button(44, 15, 23, 23); + m_ShapeTri->type (FL_RADIO_BUTTON); + m_PixmapTri.label (m_ShapeTri); + m_ShapeTri->callback ((Fl_Callback*)cb_Tri); + add (m_ShapeTri); + + m_ShapePulse1 = new Fl_LED_Button (44, 45, 23, 23); + m_ShapePulse1->type (FL_RADIO_BUTTON); + m_PixmapPulse1.label (m_ShapePulse1); + m_ShapePulse1->callback ((Fl_Callback*)cb_Pulse1); + add (m_ShapePulse1); + + m_ShapePulse2 = new Fl_LED_Button (44, 75, 23, 23); + m_ShapePulse2->type (FL_RADIO_BUTTON); + m_PixmapPulse2.label (m_ShapePulse2); + m_ShapePulse2->callback ((Fl_Callback*)cb_Pulse2); + add (m_ShapePulse2); + + m_ShapeInvSine = new Fl_LED_Button (44, 105, 23, 23); + m_ShapeInvSine->type (FL_RADIO_BUTTON); + m_PixmapInvSine.label (m_ShapeInvSine); + m_ShapeInvSine->callback ((Fl_Callback*)cb_InvSine); + add (m_ShapeInvSine); + + m_Tabs = new Fl_Tabs (88, 10, 124, 124); + m_Tabs->box (FL_PLASTIC_DOWN_BOX); + m_Tabs->color (Info->GUI_COLOUR); + add (m_Tabs); + + m_CtlGroup = new Fl_Group (88, 24, 124, 110, "Control"); + m_CtlGroup->labelsize (10); + m_Tabs->add (m_CtlGroup); + + m_FineTune = new Fl_Knob (98, 32, 60, 60, "Fine Tune"); + m_FineTune->user_data ((void*)(this)); + m_FineTune->color (Info->GUI_COLOUR); + m_FineTune->type (Fl_Knob::LINELIN); + m_FineTune->labelsize (10); + m_FineTune->scaleticks (20); + m_FineTune->maximum (1.414); + m_FineTune->step (0.000001); + m_FineTune->value (1); + m_FineTune->callback ((Fl_Callback*)cb_FineTune); + m_CtlGroup->add (m_FineTune); + + m_Reset = new Fl_Button (108, 106, 40, 20, "Reset"); + m_Reset->user_data ((void*)(this)); + m_Reset->labelsize (10); + m_Reset->box (FL_PLASTIC_UP_BOX); + m_Reset->color (Info->GUI_COLOUR); + m_Reset->selection_color (Info->GUI_COLOUR); + m_Reset->callback ((Fl_Callback*)cb_Reset); + m_CtlGroup->add (m_Reset); + + m_Octave = new Fl_Knob (160, 27, 40, 40, "Octave"); + m_Octave->user_data ((void*)(this)); + m_Octave->color (Info->GUI_COLOUR); + m_Octave->type (Fl_Knob::LINELIN); + m_Octave->labelsize (10); + m_Octave->maximum (6); + m_Octave->step (1); + m_Octave->value (3); + m_Octave->scaleticks (6); + m_Octave->cursor (50); + m_Octave->callback ((Fl_Callback*)cb_Octave); + m_CtlGroup->add (m_Octave); + + m_ModAmount = new Fl_Knob (160, 79, 40, 40, "Mod Depth"); + m_ModAmount->user_data ((void*)(this)); + m_ModAmount->color (Info->GUI_COLOUR); + m_ModAmount->type (Fl_Knob::LINELIN); + m_ModAmount->labelsize (10); + m_ModAmount->maximum (2.0f); + m_ModAmount->step (0.001); + m_ModAmount->value (1.0); + m_ModAmount->callback ((Fl_Callback*)cb_ModAmount); + m_CtlGroup->add (m_ModAmount); + + m_NumGroup = new Fl_Group (88, 24, 124, 110, "Numbers"); + m_NumGroup->labelsize (10); + m_Tabs->add (m_NumGroup); + + m_NumFreq = new Fl_Counter (108, 32, 90, 20, "Freq (Hz)"); + m_NumFreq->user_data ((void*)(this)); + m_NumFreq->box (FL_PLASTIC_UP_BOX); + m_NumFreq->color (Info->GUI_COLOUR); + m_NumFreq->labelsize (10); + m_NumFreq->textsize (10); + m_NumFreq->minimum (0); + m_NumFreq->step (0.1); + m_NumFreq->lstep (10); + m_NumFreq->callback ((Fl_Callback*)cb_NumFreq); + m_NumGroup->add (m_NumFreq); + + m_NumOctave = new Fl_Counter (120, 66, 64, 20, "Octave"); + m_NumOctave->user_data ((void*)(this)); + m_NumOctave->type (FL_SIMPLE_COUNTER); + m_NumOctave->box (FL_PLASTIC_UP_BOX); + m_NumOctave->color (Info->GUI_COLOUR); + m_NumOctave->labelsize (10); + m_NumOctave->textsize (10); + m_NumOctave->minimum (-3); + m_NumOctave->maximum (3); + m_NumOctave->step (1); + m_NumOctave->value (0); + m_NumOctave->callback ((Fl_Callback*)cb_NumOctave); + m_NumGroup->add (m_NumOctave); + + m_NumModAmount = new Fl_Counter (120, 98, 64, 20, "Mod (%)"); + m_NumModAmount->user_data ((void*)(this)); + m_NumModAmount->type (FL_SIMPLE_COUNTER); + m_NumModAmount->box (FL_PLASTIC_UP_BOX); + m_NumModAmount->color (Info->GUI_COLOUR); + m_NumModAmount->labelsize (10); + m_NumModAmount->textsize (10); + m_NumModAmount->minimum (0); + m_NumModAmount->maximum (200); + m_NumModAmount->step (1); + m_NumModAmount->value (m_ModAmount->value() * 100); + m_NumModAmount->callback ((Fl_Callback*)cb_NumModAmount); + m_NumGroup->add (m_NumModAmount); + + end(); + UpdateFreq(); +} + +void WaveTablePluginGUI::UpdateValues (SpiralPlugin *o) { + float val; + WaveTablePlugin *Plugin = (WaveTablePlugin*)o; + + m_ShapeSquare->value(0); + m_ShapeRevSaw->value(0); + m_ShapeSaw->value(0); + m_ShapeTri->value(0); + m_ShapeSine->value(0); + m_ShapePulse1->value(0); + m_ShapePulse2->value(0); + m_ShapeInvSine->value(0); + switch (Plugin->GetType()) { + case WaveTablePlugin::SQUARE : m_ShapeSquare->value(1); break; + case WaveTablePlugin::SINE : m_ShapeSine->value(1); break; + case WaveTablePlugin::SAW : m_ShapeSaw->value(1); break; + case WaveTablePlugin::REVSAW : m_ShapeRevSaw->value(1); break; + case WaveTablePlugin::TRIANGLE : m_ShapeTri->value(1); break; + case WaveTablePlugin::PULSE1 : m_ShapePulse1->value(1); break; + case WaveTablePlugin::PULSE2 : m_ShapePulse2->value(1); break; + case WaveTablePlugin::INVSINE : m_ShapeInvSine->value(1); break; + default : break; + } + val = Plugin->GetModAmount(); + m_ModAmount->value (val); + m_NumModAmount->value (val * 100); + + m_NumOctave->value (Plugin->GetOctave()); + m_Octave->value ((int)m_NumOctave->value() + 3); + m_FineTune->value (sqrt (Plugin->GetFineFreq())); + UpdateFreq(); +} + +// Utility functions + +float WaveTablePluginGUI::CalcFineFreq (float Fine) { + int oct = (int)m_NumOctave->value(); + m_FineFreq = Fine * Fine; + float fr = 110.0f * m_FineFreq; + if (oct > 0) fr *= 1 << oct; + if (oct < 0) fr /= 1 << (-oct); + return fr; +} + +void WaveTablePluginGUI::UpdateFreq (void) { + // always do max first - CalcFineFreq leaves a value in m_FineFreq + m_NumFreq->maximum (CalcFineFreq (m_FineTune->maximum())); + m_NumFreq->value (CalcFineFreq (m_FineTune->value())); +} + +// Callbacks - Controls outside the tabs + +inline void WaveTablePluginGUI::cb_Sine_i (Fl_LED_Button* o, void* v) { + m_GUICH->Set ("Type", (char)WaveTablePlugin::SINE); +} + +void WaveTablePluginGUI::cb_Sine (Fl_LED_Button* o, void* v) { + ((WaveTablePluginGUI*)(o->parent()))->cb_Sine_i (o, v); +} + +inline void WaveTablePluginGUI::cb_Square_i(Fl_LED_Button* o, void* v) { + m_GUICH->Set ("Type", (char)WaveTablePlugin::SQUARE); +} + +void WaveTablePluginGUI::cb_Square(Fl_LED_Button* o, void* v) { + ((WaveTablePluginGUI*)(o->parent()))->cb_Square_i (o, v); +} + +inline void WaveTablePluginGUI::cb_Saw_i (Fl_LED_Button* o, void* v) { + m_GUICH->Set ("Type", (char)WaveTablePlugin::SAW); +} + +void WaveTablePluginGUI::cb_Saw (Fl_LED_Button* o, void* v) { + ((WaveTablePluginGUI*)(o->parent()))->cb_Saw_i (o, v); +} + +inline void WaveTablePluginGUI::cb_RevSaw_i (Fl_LED_Button* o, void* v) { + m_GUICH->Set ("Type", (char)WaveTablePlugin::REVSAW); +} + +void WaveTablePluginGUI::cb_RevSaw (Fl_LED_Button* o, void* v) { + ((WaveTablePluginGUI*)(o->parent()))->cb_RevSaw_i (o, v); +} + +inline void WaveTablePluginGUI::cb_Tri_i (Fl_LED_Button* o, void* v) { + m_GUICH->Set ("Type", (char)WaveTablePlugin::TRIANGLE); +} + +void WaveTablePluginGUI::cb_Tri (Fl_LED_Button* o, void* v) { + ((WaveTablePluginGUI*)(o->parent()))->cb_Tri_i (o, v); +} + +inline void WaveTablePluginGUI::cb_Pulse1_i (Fl_LED_Button* o, void* v) { + m_GUICH->Set ("Type", (char)WaveTablePlugin::PULSE1); +} + +void WaveTablePluginGUI::cb_Pulse1 (Fl_LED_Button* o, void* v) { + ((WaveTablePluginGUI*)(o->parent()))->cb_Pulse1_i (o, v); +} + +inline void WaveTablePluginGUI::cb_Pulse2_i(Fl_LED_Button* o, void* v) { + m_GUICH->Set ("Type", (char)WaveTablePlugin::PULSE2); +} + +void WaveTablePluginGUI::cb_Pulse2 (Fl_LED_Button* o, void* v) { + ((WaveTablePluginGUI*)(o->parent()))->cb_Pulse2_i (o, v); +} + +inline void WaveTablePluginGUI::cb_InvSine_i (Fl_LED_Button* o, void* v) { + m_GUICH->Set ("Type", (char)WaveTablePlugin::INVSINE); +} + +void WaveTablePluginGUI::cb_InvSine (Fl_LED_Button* o, void* v) { + ((WaveTablePluginGUI*)(o->parent()))->cb_InvSine_i (o, v); +} + +// Callbacks - Control Group + +inline void WaveTablePluginGUI::cb_FineTune_i(Fl_Knob* o, void* v) { -char str[10]; - m_GUICH->Set("ModAmount",(float)o->value()); - sprintf(str,"%4.0f %%", 100*o->value()); - m_out_mod->value(str); -} - -void WaveTablePluginGUI::cb_ModAmount(Fl_Knob* o, void* v) -{ ((WaveTablePluginGUI*)(o->parent()))->cb_ModAmount_i(o,v); } - -inline void WaveTablePluginGUI::cb_pop_i(Fl_Button *o, void*) { - if (o->value()) - { - o->label("@2>"); - m_out_freq->show(); - m_out_mod->show(); - redraw(); - } - else - { - o->label("@>"); - m_out_freq->hide(); - m_out_mod->hide(); - redraw(); - parent()->redraw(); - } -} -void WaveTablePluginGUI::cb_pop(Fl_Button* o, void* v) { - ((WaveTablePluginGUI*)o->parent())->cb_pop_i(o,v); + UpdateFreq(); + m_GUICH->Set ("FineFreq", m_FineFreq); +} + +void WaveTablePluginGUI::cb_FineTune (Fl_Knob* o, void* v) { + ((WaveTablePluginGUI*)(o->user_data()))->cb_FineTune_i (o, v); } +inline void WaveTablePluginGUI::cb_Reset_i (Fl_Button* o, void* v) { + m_FineTune->value (1); + UpdateFreq(); + m_GUICH->Set ("FineFreq", m_FineFreq); +} + +void WaveTablePluginGUI::cb_Reset (Fl_Button* o, void* v) { + ((WaveTablePluginGUI*)(o->user_data()))->cb_Reset_i (o, v); +} + +inline void WaveTablePluginGUI::cb_Octave_i (Fl_Knob* o, void* v) { + m_NumOctave->value ((int)m_Octave->value() - 3); + UpdateFreq(); + m_GUICH->Set ("Octave", (int)m_NumOctave->value ()); +} + +void WaveTablePluginGUI::cb_Octave (Fl_Knob* o, void* v) { + ((WaveTablePluginGUI*)(o->user_data()))->cb_Octave_i (o, v); +} + +inline void WaveTablePluginGUI::cb_ModAmount_i (Fl_Knob* o, void* v) { + float val = o->value(); + m_GUICH->Set ("ModAmount", val); + m_NumModAmount->value (val * 100); +} + +void WaveTablePluginGUI::cb_ModAmount (Fl_Knob* o, void* v) { + ((WaveTablePluginGUI*)(o->user_data()))->cb_ModAmount_i (o, v); +} + +// Callbacks - Number Group + +inline void WaveTablePluginGUI::cb_NumFreq_i (Fl_Counter* o, void* v) { + int oct = (int)m_NumOctave->value(); + float fr = o->value (); + if (oct > 0) fr /= 1 << oct; + if (oct < 0) fr *= 1 << (-oct); + m_FineFreq = fr / 110.0f; + m_GUICH->Set ("FineFreq", m_FineFreq); + m_FineTune->value (sqrt (m_FineFreq)); +} + +void WaveTablePluginGUI::cb_NumOctave (Fl_Counter* o, void* v) { + ((WaveTablePluginGUI*)(o->user_data()))->cb_NumOctave_i (o, v); +} + +inline void WaveTablePluginGUI::cb_NumOctave_i (Fl_Counter* o, void* v) { + m_Octave->value ((int)m_NumOctave->value() + 3); + UpdateFreq(); + m_GUICH->Set ("Octave", (int)m_NumOctave->value ()); +} + +void WaveTablePluginGUI::cb_NumFreq (Fl_Counter* o, void* v) { + ((WaveTablePluginGUI*)(o->user_data()))->cb_NumFreq_i (o, v); +} + +inline void WaveTablePluginGUI::cb_NumModAmount_i (Fl_Counter* o, void* v) { + float val = o->value() / 100; + m_GUICH->Set ("ModAmount", val); + m_ModAmount->value (val); +} + +void WaveTablePluginGUI::cb_NumModAmount (Fl_Counter* o, void* v) { + ((WaveTablePluginGUI*)(o->user_data()))->cb_NumModAmount_i (o, v); +} + +// Help Text + const string WaveTablePluginGUI::GetHelpText(const string &loc){ - return string("") + return string("") + "The WaveTable plugin is a fast multifunction oscillator with a variety \n" + "of wave shapes:\n" - + "Sine, Square, Saw, Reverse Saw, Triangle, Two pulse shapes and an inverse\n" + + "Sine, Square, Saw, Reverse Saw, Triangle, Two pulse shapes and an inverse\n" + "sinewave.\n\n" + "These wave shapes are internally represented as samples, rather than\n" + "being continually calculated like the conventional oscillator. This \n" diff --git a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h index eb39a5e..d0f5938 100644 --- a/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h +++ b/SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h @@ -14,86 +14,77 @@ * 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. -*/ +*/ + +#ifndef W_TABLE_GUI +#define W_TABLE_GUI -#include #include -#include -#include #include - +#include +#include +#include +#include +#include "../Widgets/Fl_LED_Button.H" #include "../Widgets/Fl_Knob.H" #include "../SpiralPluginGUI.h" #include "WaveTablePlugin.h" -#ifndef SCOPEGUI -#define SCOPEGUI - -class WaveTablePluginGUI : public SpiralPluginGUI -{ -public: - WaveTablePluginGUI(int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info); - - virtual void UpdateValues(SpiralPlugin* o); - -protected: - const string GetHelpText(const string &loc); - -private: - - Fl_Check_Button *ShapeSquare; - Fl_Pixmap pixmap_Square; - Fl_Check_Button *ShapeSaw; - Fl_Pixmap pixmap_Saw; - Fl_Check_Button *ShapeRevSaw; - Fl_Pixmap pixmap_RevSaw; - Fl_Check_Button *ShapeTri; - Fl_Pixmap pixmap_Tri; - Fl_Check_Button *ShapeSine; - Fl_Pixmap pixmap_Sine; - Fl_Check_Button *Pulse1; - Fl_Pixmap pixmap_Pulse1; - Fl_Check_Button *Pulse2; - Fl_Pixmap pixmap_Pulse2; - Fl_Check_Button *ShapeInvSine; - Fl_Pixmap pixmap_InvSine; - - Fl_Knob *Freq; - Fl_Knob *ModAmount; - Fl_Knob *FineTune; - Fl_Button *m_pop; - Fl_Output *m_out_freq; - Fl_Output *m_out_mod; - - float m_FineFreq; - int m_Octave; - - //// Callbacks //// - inline void cb_Freq_i(Fl_Knob* o, void* v); - static void cb_Freq(Fl_Knob*, void*); - inline void cb_FineTune_i(Fl_Knob* o, void* v); - static void cb_FineTune(Fl_Knob* o, void* v); - inline void cb_ModAmount_i(Fl_Knob* o, void* v); - static void cb_ModAmount(Fl_Knob* o, void* v); - - inline void cb_Square_i(Fl_Check_Button* o, void* v); - static void cb_Square(Fl_Check_Button*, void*); - inline void cb_Saw_i(Fl_Check_Button* o, void* v); - static void cb_Saw(Fl_Check_Button*, void*); - inline void cb_Sine_i(Fl_Check_Button* o, void* v); - static void cb_Sine(Fl_Check_Button* o, void* v); - inline void cb_RevSaw_i(Fl_Check_Button* o, void* v); - static void cb_RevSaw(Fl_Check_Button* o, void* v); - inline void cb_Tri_i(Fl_Check_Button* o, void* v); - static void cb_Tri(Fl_Check_Button* o, void* v); - inline void cb_Pulse1_i(Fl_Check_Button* o, void* v); - static void cb_Pulse1(Fl_Check_Button* o, void* v); - inline void cb_Pulse2_i(Fl_Check_Button* o, void* v); - static void cb_Pulse2(Fl_Check_Button* o, void* v); - inline void cb_InvSine_i(Fl_Check_Button* o, void* v); - static void cb_InvSine(Fl_Check_Button* o, void* v); - inline void cb_pop_i(Fl_Button* o, void*); - static void cb_pop(Fl_Button* o, void*); +class WaveTablePluginGUI : public SpiralPluginGUI { + public: + WaveTablePluginGUI (int w, int h, SpiralPlugin *o, ChannelHandler *ch, const HostInfo *Info); + virtual void UpdateValues (SpiralPlugin* o); + protected: + const string GetHelpText(const string &loc); + private: + // Utility Functions + void UpdateFreq (void); + float CalcFineFreq (float Fine); + // Widgets + Fl_Tabs *m_Tabs; + Fl_Group *m_CtlGroup, *m_NumGroup; + Fl_Button *m_Reset; + Fl_LED_Button *m_ShapeSine, *m_ShapeSquare, *m_ShapeSaw, *m_ShapeRevSaw, + *m_ShapeTri, *m_ShapePulse1, *m_ShapePulse2, *m_ShapeInvSine; + Fl_Pixmap m_PixmapSine, m_PixmapSquare, m_PixmapSaw, m_PixmapRevSaw, + m_PixmapTri, m_PixmapPulse1, m_PixmapPulse2, m_PixmapInvSine; + Fl_Knob *m_Octave, *m_ModAmount, *m_FineTune; + Fl_Counter *m_NumFreq, *m_NumModAmount, *m_NumOctave; + // Data + float m_FineFreq; + // Callbacks - no group + inline void cb_Sine_i (Fl_LED_Button* o, void* v); + static void cb_Sine (Fl_LED_Button* o, void* v); + inline void cb_Square_i (Fl_LED_Button* o, void* v); + static void cb_Square (Fl_LED_Button* o, void* v); + inline void cb_Saw_i (Fl_LED_Button* o, void* v); + static void cb_Saw (Fl_LED_Button* o, void* v); + inline void cb_RevSaw_i (Fl_LED_Button* o, void* v); + static void cb_RevSaw (Fl_LED_Button* o, void* v); + inline void cb_Tri_i (Fl_LED_Button* o, void* v); + static void cb_Tri (Fl_LED_Button* o, void* v); + inline void cb_Pulse1_i (Fl_LED_Button* o, void* v); + static void cb_Pulse1 (Fl_LED_Button* o, void* v); + inline void cb_Pulse2_i (Fl_LED_Button* o, void* v); + static void cb_Pulse2 (Fl_LED_Button* o, void* v); + inline void cb_InvSine_i (Fl_LED_Button* o, void* v); + static void cb_InvSine (Fl_LED_Button* o, void* v); + // Callbacks - Control Group + inline void cb_Octave_i (Fl_Knob* o, void* v); + static void cb_Octave (Fl_Knob* o, void* v); + inline void cb_FineTune_i (Fl_Knob* o, void* v); + static void cb_FineTune (Fl_Knob* o, void* v); + inline void cb_Reset_i (Fl_Button* o, void* v); + static void cb_Reset (Fl_Button* o, void* v); + inline void cb_ModAmount_i (Fl_Knob* o, void* v); + static void cb_ModAmount (Fl_Knob* o, void* v); + // Callbacks - Numbers Group + inline void cb_NumFreq_i (Fl_Counter* o, void* v); + static void cb_NumFreq (Fl_Counter* o, void* v); + inline void cb_NumOctave_i (Fl_Counter* o, void* v); + static void cb_NumOctave (Fl_Counter* o, void* v); + inline void cb_NumModAmount_i (Fl_Counter* o, void* v); + static void cb_NumModAmount (Fl_Counter* o, void* v); }; #endif