Browse Source

Last of the GUI enhancements. Filter & Echo Bugfix.

master
edgeeffect 22 years ago
parent
commit
08fbfe4c2d
9 changed files with 452 additions and 374 deletions
  1. +1
    -1
      SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C
  2. +1
    -1
      SpiralSound/Plugins/FilterPlugin/FilterPlugin.C
  3. +12
    -12
      SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C
  4. +4
    -4
      SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C
  5. +10
    -2
      SpiralSound/Plugins/WaveTablePlugin/Makefile.in
  6. +2
    -2
      SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C
  7. +1
    -1
      SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h
  8. +357
    -278
      SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C
  9. +64
    -73
      SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h

+ 1
- 1
SpiralSound/Plugins/EchoPlugin/EchoPluginGUI.C View File

@@ -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);
}



+ 1
- 1
SpiralSound/Plugins/FilterPlugin/FilterPlugin.C View File

@@ -112,7 +112,7 @@ void FilterPlugin::Execute()
{
float Cutoff;
float Resonance;
if (fc<0) return;
for (int n=0; n<m_HostInfo->BUFSIZE; n++)


+ 12
- 12
SpiralSound/Plugins/FilterPlugin/FilterPluginGUI.C View File

@@ -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); }


+ 4
- 4
SpiralSound/Plugins/OscillatorPlugin/OscillatorPluginGUI.C View File

@@ -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()));


+ 10
- 2
SpiralSound/Plugins/WaveTablePlugin/Makefile.in View File

@@ -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 \


+ 2
- 2
SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.C View File

@@ -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");


+ 1
- 1
SpiralSound/Plugins/WaveTablePlugin/WaveTablePlugin.h View File

@@ -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:


+ 357
- 278
SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.C View File

@@ -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"


+ 64
- 73
SpiralSound/Plugins/WaveTablePlugin/WaveTablePluginGUI.h View File

@@ -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 <FL/Fl_Check_Button.H>
#include <FL/Fl_Pixmap.H>
#include <FL/Fl_Slider.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Counter.H>
#include <FL/Fl_Tabs.h>
#include <FL/Fl_Group.h>
#include <FL/Fl_Button.h>
#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

Loading…
Cancel
Save