Browse Source

GUI Updates / Minor Bugfixes Envelope / Amp / Matrix

master
edgeeffect 22 years ago
parent
commit
ed8876c33e
8 changed files with 657 additions and 541 deletions
  1. +8
    -7
      SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C
  2. +1
    -1
      SpiralSound/Plugins/EnvelopePlugin/EnvelopePlugin.C
  3. +307
    -226
      SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C
  4. +40
    -46
      SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h
  5. +48
    -48
      SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C
  6. +0
    -1
      SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h
  7. +220
    -177
      SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C
  8. +33
    -35
      SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h

+ 8
- 7
SpiralSound/Plugins/AmpPlugin/AmpPluginGUI.C View File

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

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

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


+ 307
- 226
SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.C View File

@@ -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 <FL/fl_draw.h>
@@ -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"


+ 40
- 46
SpiralSound/Plugins/EnvelopePlugin/EnvelopePluginGUI.h View File

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

#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

+ 48
- 48
SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.C View File

@@ -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; t<NUM_PATTERNS; t++)
for (int t=0; t<NUM_PATTERNS; t++)
{
SetOutput(t+2,n,0);
m_TriggerLevel[t]=0;
}
// Scan the matrix at current time
// Scan the matrix at current time
for (int i=0; i<MATY; i++)
{
if (m_Matrix[m_Current].Matrix[m_Step][i])
@@ -269,7 +269,7 @@ void MatrixPlugin::Execute()
m_TriggerLevel[i]=m_Matrix[m_Current].Volume[m_Step][i];
}
}
// reset the triggers between steps to clear them
// otherwise consecutive events wont get triggered
SetOutput(1,n,0);
@@ -285,45 +285,45 @@ void MatrixPlugin::ExecuteCommands()
switch (m_AudioCH->GetCommand())
{
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<MATY-1; y++)
for (y=0; y<MATY-1; y++)
{
for (x=0; x<MATX; x++)
for (x=0; x<MATX; x++)
{
m_Matrix[m_GUICurrent].Matrix[x][y] = m_Matrix[m_GUICurrent].Matrix[x][y+1];
}
}
for (x=0; x<MATX; x++)
for (x=0; x<MATX; x++)
{
m_Matrix[m_GUICurrent].Matrix[x][MATY-1] = 0;
}
@@ -397,7 +397,7 @@ void MatrixPlugin::StreamOut(ostream &s)
for (int n=0; n<NUM_PATTERNS; n++)
{
s<<m_Matrix[n].Length<<" "<<m_Matrix[n].Speed<<" "<<m_Matrix[n].Octave<<endl;
for (int y=0; y<MATY; y++)
{
for (int x=0; x<MATX; x++)
@@ -408,7 +408,7 @@ void MatrixPlugin::StreamOut(ostream &s)
s<<"-1 ";
}
s<<endl;
for (int n=0; n<NUM_PATSEQ; n++)
for (int n=0; n<NUM_PATSEQ; n++)
{
s<<m_PatSeq[n]<<" ";
}
@@ -419,14 +419,14 @@ void MatrixPlugin::StreamIn(istream &s)
{
int version;
s>>version;
switch (version)
{
case 1:
{
s>>m_Current>>m_Time>>m_Step>>m_Loop>>m_NoteCut;
for (int n=0; n<NUM_PATTERNS; n++)
for (int n=0; n<NUM_PATTERNS; n++)
{
s>>m_Matrix[n].Length>>m_Matrix[n].Speed>>m_Matrix[n].Octave;


+ 0
- 1
SpiralSound/Plugins/MatrixPlugin/MatrixPlugin.h View File

@@ -73,7 +73,6 @@ private:

GUIArgs m_GUIArgs;

void CopyPattern() { m_CopyPattern = m_Current; }
void PastePattern();
void ClearPattern();
void TransposeUp();


+ 220
- 177
SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.C View File

@@ -19,7 +19,7 @@
#include "MatrixPluginGUI.h"
#include <FL/fl_draw.h>
#include <FL/fl_draw.H>
#include <FL/fl_file_chooser.h>
//#include <FL/fl_file_chooser.h>

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; x<MATX; x++)
{
@@ -235,34 +275,36 @@ m_LastPatSeqLight(0)
m_Flash[x]->selection_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; y<NUM_PATSEQ; y++)
{
m_PatSeq[y]= new Fl_Counter(xoff,yoff+y*(height+gap),25,height);
m_PatSeq[y]->type(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"


+ 33
- 35
SpiralSound/Plugins/MatrixPlugin/MatrixPluginGUI.h View File

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

Loading…
Cancel
Save