Browse Source

Setup tabs controls, and plugin now passes connection state to GUI

master
waxfrenzy 22 years ago
parent
commit
9714491cd9
4 changed files with 187 additions and 130 deletions
  1. +90
    -29
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C
  2. +7
    -8
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h
  3. +68
    -67
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C
  4. +22
    -26
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h

+ 90
- 29
SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C View File

@@ -64,8 +64,6 @@ LADSPAPlugin::LADSPAPlugin()
m_MaxInputPortCount = m_LADSPAInfo.GetMaxInputPortCount();

// For receiving from GUI
m_AudioCH->Register("SetGain",&(m_InData.Gain));
m_AudioCH->Register("SetAmped",&(m_InData.Amped));
m_AudioCH->RegisterData("SetPluginIndex", ChannelHandler::INPUT,&(m_InData.PluginIndex),sizeof(m_InData.PluginIndex));

// For sending to GUI
@@ -77,7 +75,7 @@ LADSPAPlugin::LADSPAPlugin()

m_OutData.InputPortNames = (char *)malloc(256 * m_MaxInputPortCount);
m_OutData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_MaxInputPortCount);
m_OutData.InputPortValues = (float *)calloc(m_MaxInputPortCount, sizeof(float));
m_OutData.InputPortValues = (PortValues *)calloc(m_MaxInputPortCount, sizeof(PortValues));
m_InData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_MaxInputPortCount);

if (m_OutData.InputPortNames &&
@@ -85,7 +83,7 @@ LADSPAPlugin::LADSPAPlugin()
m_InData.InputPortSettings) {
m_AudioCH->RegisterData("GetInputPortNames", ChannelHandler::OUTPUT, m_OutData.InputPortNames, 256 * m_MaxInputPortCount);
m_AudioCH->RegisterData("GetInputPortSettings", ChannelHandler::OUTPUT, m_OutData.InputPortSettings, sizeof(PortSettings) * m_MaxInputPortCount);
m_AudioCH->RegisterData("GetInputPortValues", ChannelHandler::OUTPUT, m_OutData.InputPortValues, sizeof(float) * m_MaxInputPortCount);
m_AudioCH->RegisterData("GetInputPortValues", ChannelHandler::OUTPUT, m_OutData.InputPortValues, sizeof(PortValues) * m_MaxInputPortCount);
m_AudioCH->RegisterData("SetInputPortSettings", ChannelHandler::INPUT, m_InData.InputPortSettings, sizeof(PortSettings) * m_MaxInputPortCount);
} else {
cerr<<"Memory allocation error"<<endl;
@@ -146,15 +144,17 @@ void LADSPAPlugin::Execute()
m_LADSPABufVec[n][i]=GetInput(n,i);
}
}
// Copy values into OutData value buffer for display in GUI
m_OutData.InputPortValues[n] = m_LADSPABufVec[n][0];
m_OutData.InputPortValues[n].Connected = true;
}
else // Use default
{
for (int i=0; i<m_HostInfo->BUFSIZE; i++) {
m_LADSPABufVec[n][i]=m_PortDefault[n];
}
m_OutData.InputPortValues[n].Connected = false;
}
// Copy values into OutData value buffer for display in GUI
m_OutData.InputPortValues[n].Value = m_LADSPABufVec[n][0];
}

// run plugin
@@ -163,19 +163,9 @@ void LADSPAPlugin::Execute()
// convert outputs
for (int n=0; n<m_PluginInfo.NumOutputs; n++)
{
/*if (m_Amped)
for (int i=0; i<m_HostInfo->BUFSIZE; i++)
{
for (int i=0; i<m_HostInfo->BUFSIZE; i++)
{
SetOutput(n,i,m_LADSPABufVec[n+m_PluginInfo.NumInputs][i]*m_Gain*10);
}
}
else*/
{
for (int i=0; i<m_HostInfo->BUFSIZE; i++)
{
SetOutput(n,i,m_LADSPABufVec[n+m_PluginInfo.NumInputs][i]*m_Gain);
}
SetOutput(n,i,m_LADSPABufVec[n+m_PluginInfo.NumInputs][i]);
}
}
}
@@ -210,9 +200,8 @@ void LADSPAPlugin::StreamOut(ostream &s)

switch (m_Version)
{
case 5:
case 6:
{
s<<m_Gain<<" ";
s<<m_UniqueID<<" ";
s<<m_PortMin.size()<<" ";
assert(m_PortMin.size()==m_PortMax.size());
@@ -239,11 +228,40 @@ void LADSPAPlugin::StreamOut(ostream &s)
s<<*i<<" ";
}
}
case 5:
{
// Here for consistency - should never actually happen, as
// version is always 6!
// s<<m_Gain<<" ";
// s<<m_UniqueID<<" ";
// s<<m_PortMin.size()<<" ";
// assert(m_PortMin.size()==m_PortMax.size());
// assert(m_PortMin.size()==m_PortClamp.size());
// assert(m_PortMin.size()==m_PortDefault.size());
// for (vector<float>::iterator i=m_PortMin.begin();
// i!=m_PortMin.end(); i++)
// {
// s<<*i<<" ";
// }
// for (vector<float>::iterator i=m_PortMax.begin();
// i!=m_PortMax.end(); i++)
// {
// s<<*i<<" ";
// }
// for (vector<bool>::iterator i=m_PortClamp.begin();
// i!=m_PortClamp.end(); i++)
// {
// s<<*i<<" ";
// }
// for (vector<float>::iterator i=m_PortDefault.begin();
// i!=m_PortDefault.end(); i++)
// {
// s<<*i<<" ";
// }
}
break;
case 4:
{
// Here for consistency - should never actually happen, as
// version is always 5!
// s<<m_Gain<<" ";
// s<<m_UniqueID<<" ";
// s<<m_PortMin.size()<<" ";
@@ -328,11 +346,52 @@ void LADSPAPlugin::StreamIn(istream &s)

switch (version)
{
case 6:
{
ClearPlugin();

unsigned long UniqueID;
s>>UniqueID;
int PortCount;
s>>PortCount;
float Min, Max;
bool Clamp;
float Default;

for (int n=0; n<PortCount; n++)
{
s>>Min;
m_PortMin.push_back(Min);
}

for (int n=0; n<PortCount; n++)
{
s>>Max;
m_PortMax.push_back(Max);
}
for (int n=0; n<PortCount; n++)
{
s>>Clamp;
m_PortClamp.push_back(Clamp);
}
for (int n=0; n<PortCount; n++)
{
s>>Default;
m_PortDefault.push_back(Default);
}

if (SelectPlugin(UniqueID)) {
SetGUIExports();
} else {
ClearPlugin();
}
}
case 5:
{
ClearPlugin();

s>>m_Gain;
float temp_gain;
s>>temp_gain;

unsigned long UniqueID;
s>>UniqueID;
@@ -375,7 +434,8 @@ void LADSPAPlugin::StreamIn(istream &s)
{
ClearPlugin();

s>>m_Gain;
float temp_gain;
s>>temp_gain;

unsigned long UniqueID;
s>>UniqueID;
@@ -418,7 +478,8 @@ void LADSPAPlugin::StreamIn(istream &s)
{
ClearPlugin();

s>>m_Gain;
float temp_gain;
s>>temp_gain;

string Filename,Label;
s>>Filename>>Label;
@@ -467,7 +528,8 @@ void LADSPAPlugin::StreamIn(istream &s)
{
ClearPlugin();

s>>m_Gain;
float temp_gain;
s>>temp_gain;

string Filename,Label;
s>>Filename>>Label;
@@ -513,7 +575,8 @@ void LADSPAPlugin::StreamIn(istream &s)

case 1:
{
s>>m_Gain;
float temp_gain;
s>>temp_gain;

string Filename,Label;
s>>Filename>>Label;
@@ -653,8 +716,6 @@ void LADSPAPlugin::ClearPlugin(void)

m_PluginIndex = 0;
m_InputPortCount = 0;
m_Gain = 1.0f;
m_Amped = false;
strncpy(m_Name, "None\0", 5);
strncpy(m_Maker, "None\0", 5);



+ 7
- 8
SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h View File

@@ -34,6 +34,11 @@ struct PortSettings
bool Clamp;
float Default;
};
struct PortValues
{
float Value;
bool Connected;
};

class LADSPAPlugin : public SpiralPlugin
{
@@ -48,14 +53,12 @@ public:
virtual void StreamOut(ostream &s);
virtual void StreamIn(istream &s);

float GetGain() { return m_Gain; }
bool GetAmped() { return m_Amped; }
const char *GetName() { return (const char *)m_Name; }
const char *GetMaker() { return (const char *)m_Maker; }
unsigned long GetInputPortCount() { return m_InputPortCount; }
const char *GetPortName(unsigned long p)
{
return (const char *)(m_OutData.InputPortNames + p * 256);
return (const char *)(m_OutData.InputPortNames + p * 256);
}
PortSettings GetPortSettings(unsigned long p)
{
@@ -99,8 +102,6 @@ private:
unsigned long m_PluginIndex;
unsigned long m_UniqueID;

float m_Gain;
bool m_Amped;
unsigned long m_MaxInputPortCount;
unsigned long m_InputPortCount;
char m_Name[256];
@@ -111,15 +112,13 @@ private:
{
char *InputPortNames;
PortSettings *InputPortSettings;
float *InputPortValues;
PortValues *InputPortValues;
};

// Data received from GUI
struct InputChannelData
{
unsigned long PluginIndex;
float Gain;
bool Amped;
PortSettings *InputPortSettings;
};



+ 68
- 67
SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C View File

@@ -50,14 +50,37 @@ SpiralPluginGUI(w,h,o,ch)
// Set up buffers for data transfer via ChannelHandler
m_InData.InputPortNames = (char *)malloc(256 * m_InData.MaxInputPortCount);
m_InData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_InData.MaxInputPortCount);
m_InData.InputPortValues = (float *)calloc(m_InData.MaxInputPortCount, sizeof(float));
m_InData.InputPortValues = (PortValues *)calloc(m_InData.MaxInputPortCount, sizeof(PortValues));

if (!(m_InData.InputPortNames && m_InData.InputPortSettings)) {
cerr<<"Memory allocation error\n"<<endl;
}

// Set up widgets
m_Browser = new Fl_Choice(60,20,420,25,"Plugin:");
m_Name = new Fl_Box(10,20,480,15,"None");
m_Name->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
m_Name->labelcolor(GUI_COLOUR);
m_Name->labelsize(12);
add(m_Name);

m_Maker = new Fl_Box(10,40,480,15,"None");
m_Maker->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
m_Maker->labelcolor(GUI_COLOUR);
m_Maker->labelsize(12);
add(m_Maker);

m_Tab = new Fl_Tabs(5,60,490,255,"");
add(m_Tab);

m_ControlGroup = new Fl_Group(0,80,490,255,"Control");
m_ControlGroup->labelsize(12);

m_SetupGroup = new Fl_Group(0,80,490,255,"Setup");
m_SetupGroup->labelsize(12);

m_Browser = new Fl_Choice(50,85,440,22,"Plugin:");
m_Browser->labelsize(12);
m_Browser->textsize(12);
m_Browser->callback((Fl_Callback *)cb_Select);

m_Browser->add("(None)");
@@ -68,54 +91,36 @@ SpiralPluginGUI(w,h,o,ch)
}
m_Browser->value(0);

m_Name = new Fl_Box(10,50,480,20,"None");
m_Name->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
m_Name->labelcolor(GUI_COLOUR);
m_Name->labelsize(10);
add(m_Name);

m_Maker = new Fl_Box(10,70,480,20,"None");
m_Maker->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
m_Maker->labelcolor(GUI_COLOUR);
m_Maker->labelsize(10);
add(m_Maker);
m_SetupGroup->add(m_Browser);

m_InputScroll = new Fl_Scroll(10,110,480,150," Value Default Min Max Clamp? Port Name");
m_InputScroll = new Fl_Scroll(10,130,480,145," Value Default Min Max Clamp? Port Name");
m_InputScroll->labelsize(12);
m_InputScroll->align(FL_ALIGN_TOP_LEFT);
m_InputScroll->type(Fl_Scroll::VERTICAL);
m_InputScroll->box(FL_DOWN_BOX);
add(m_InputScroll);
m_InputPack = new Fl_Pack(5,115,460,20,"");
m_InputPack = new Fl_Pack(5,135,460,26,"");
m_InputScroll->add(m_InputPack);

m_PowerAmp = new Fl_Button(125,277,100,25,"PowerAmp");
m_PowerAmp->labelsize(10);
m_PowerAmp->value(0);
m_PowerAmp->type(1);
m_PowerAmp->callback((Fl_Callback*)cb_PowerAmp);
add(m_PowerAmp);
m_SetupGroup->add(m_InputScroll);

m_UpdateMinMax = new Fl_Button(230,277,100,25,"Update Settings");
m_UpdateMinMax->labelsize(10);
m_UpdateMinMax->callback((Fl_Callback*)cb_MinMax);
add(m_UpdateMinMax);

m_UpdateInputs = new Fl_Button(335,277,100,25,"Refresh");
m_UpdateInputs->labelsize(10);
m_UpdateInputs = new Fl_Button(10,282,120,25,"Refresh");
m_UpdateInputs->labelsize(12);
m_UpdateInputs->value(1);
m_UpdateInputs->type(1);
add(m_UpdateInputs);

m_OutputGain = new Fl_Knob(440,265,40,40,"Output Gain");
m_OutputGain->color(GUI_COLOUR);
m_OutputGain->type(Fl_Knob::DOTLIN);
m_OutputGain->maximum(2);
m_OutputGain->step(0.001);
m_OutputGain->value(1.0);
m_OutputGain->labelsize(10);
m_OutputGain->callback((Fl_Callback*)cb_Gain);
add(m_OutputGain);
m_SetupGroup->add(m_UpdateInputs);

m_UpdatePortSettings = new Fl_Button(140,282,120,25,"Update Settings");
m_UpdatePortSettings->labelsize(12);
m_UpdatePortSettings->callback((Fl_Callback*)cb_PortSettings);
add(m_UpdatePortSettings);

m_SetupGroup->add(m_UpdatePortSettings);

m_Tab->add(m_ControlGroup);
m_Tab->add(m_SetupGroup);

end();
}
@@ -127,12 +132,26 @@ LADSPAPluginGUI::~LADSPAPluginGUI(void)
Fl::check();
}

void LADSPAPluginGUI::UpdatePortDisplay(int n, float v)
void LADSPAPluginGUI::UpdatePortDisplay(int n, PortValues pv)
{
// Need to show that a connection is present
// regardless of Refresh being set
if (pv.Connected) {
// Disable
m_PortDefault[n]->readonly(1);
m_PortDefault[n]->color(FL_BACKGROUND_COLOR);
} else {
// Enable
m_PortDefault[n]->readonly(0);
m_PortDefault[n]->color(FL_BACKGROUND2_COLOR);
}
m_PortDefault[n]->redraw();

// Only update values if Refresh is set
if (!m_UpdateInputs->value()) return;

char temp[256];
sprintf(temp,"%.4f",v);
sprintf(temp,"%.4f",pv.Value);
m_PortOutput[n]->value(temp);
}

@@ -172,7 +191,7 @@ void LADSPAPluginGUI::ClearPortInfo()

m_InputScroll->remove(m_InputPack);
delete m_InputPack;
m_InputPack = new Fl_Pack(x()+5,y()+115,460,20,"");
m_InputPack = new Fl_Pack(x()+5,y()+135,460,26,"");
m_InputScroll->add(m_InputPack);

m_PortOutput.clear();
@@ -185,7 +204,7 @@ void LADSPAPluginGUI::ClearPortInfo()

void LADSPAPluginGUI::AddPortInfo(const char *Info)
{
Fl_Group* NewGroup = new Fl_Group(0,0,430,18,"");
Fl_Group* NewGroup = new Fl_Group(0,0,430,24,"");
NewGroup->box(FL_FLAT_BOX);
m_InputPack->add(NewGroup);
m_PackVec.push_back(NewGroup);
@@ -194,6 +213,8 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info)
Fl_Output* NewOutput = new Fl_Output(10,0,60,18,"");
NewOutput->value(0);
NewOutput->textsize(10);
NewOutput->color(FL_BACKGROUND_COLOR);
NewOutput->readonly(1);
NewGroup->add(NewOutput);
m_PortOutput.push_back(NewOutput);

@@ -219,13 +240,13 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info)
m_PortMax.push_back(NewInput);

// Clamp
Fl_Check_Button* NewCheckButton = new Fl_Check_Button(270,0,10,18,"");
Fl_Check_Button* NewCheckButton = new Fl_Check_Button(265,0,10,18,"");
NewCheckButton->value(0);
NewGroup->add(NewCheckButton);
m_PortClamp.push_back(NewCheckButton);

// Port Name
Fl_Box* NewText = new Fl_Box(322,0,10,18,"");
Fl_Box* NewText = new Fl_Box(320,0,10,18,"");
NewText->label(Info);
NewText->labelsize(10);
NewText->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
@@ -239,8 +260,6 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info)
void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o)
{
LADSPAPlugin* Plugin = (LADSPAPlugin*)o;
m_OutputGain->value(Plugin->GetGain());
m_PowerAmp->value(Plugin->GetAmped());
SetName(Plugin->GetName());
SetMaker(Plugin->GetMaker());

@@ -269,15 +288,6 @@ void LADSPAPluginGUI::Update(void)
}
}

inline void LADSPAPluginGUI::cb_Gain_i(Fl_Knob* o, void* v)
{
m_GUICH->Set("SetGain",(float)(o->value()));
}
void LADSPAPluginGUI::cb_Gain(Fl_Knob* o, void* v)
{
((LADSPAPluginGUI*)(o->parent()))->cb_Gain_i(o,v);
}

inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o)
{
if (o->value() == 0) {
@@ -317,10 +327,10 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o)
}
void LADSPAPluginGUI::cb_Select(Fl_Choice* o)
{
((LADSPAPluginGUI*)(o->parent()))->cb_Select_i(o);
((LADSPAPluginGUI*)(o->parent()->parent()->parent()))->cb_Select_i(o);
}

inline void LADSPAPluginGUI::cb_MinMax_i(Fl_Button* o, void* v)
inline void LADSPAPluginGUI::cb_PortSettings_i(Fl_Button* o, void* v)
{
unsigned long n=0;
for (vector<Fl_Input*>::iterator i=m_PortMin.begin();
@@ -354,16 +364,7 @@ inline void LADSPAPluginGUI::cb_MinMax_i(Fl_Button* o, void* v)
m_GUICH->SetData("SetInputPortSettings", m_InData.InputPortSettings);
m_GUICH->SetCommand(LADSPAPlugin::SETPORTSETTINGS);
}
void LADSPAPluginGUI::cb_MinMax(Fl_Button* o, void* v)
{
((LADSPAPluginGUI*)(o->parent()))->cb_MinMax_i(o,v);
}

inline void LADSPAPluginGUI::cb_PowerAmp_i(Fl_Button* o, void* v)
{
m_GUICH->Set("SetAmped",(bool)(o->value()));
}
void LADSPAPluginGUI::cb_PowerAmp(Fl_Button* o, void* v)
void LADSPAPluginGUI::cb_PortSettings(Fl_Button* o, void* v)
{
((LADSPAPluginGUI*)(o->parent()))->cb_PowerAmp_i(o,v);
((LADSPAPluginGUI*)(o->parent()->parent()->parent()))->cb_PortSettings_i(o,v);
}

+ 22
- 26
SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h View File

@@ -24,12 +24,13 @@
#include <FL/Fl_Group.H>
#include <FL/Fl_Pack.H>
#include <FL/Fl_Choice.H>
#include <FL/Fl_Tabs.H>
#include <FL/Fl_Scroll.H>
#include <FL/Fl_Input.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Check_Button.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Output.H>
#include <FL/Fl_Scroll.H>
#include "../Widgets/Fl_Knob.H"

#include <vector>
@@ -60,26 +61,26 @@ public:

void ClearPortInfo();
void AddPortInfo(const char *Info);
void UpdatePortDisplay(int n, float v);
void UpdatePortDisplay(int n, PortValues pv);
void SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt);
// void SetMinMax(int n, float min, float max, bool clamp);
// void GetMinMax(int n, float &min, float &max, bool &clamp);

private:
Fl_Scroll *m_InputScroll;
Fl_Pack *m_InputPack;
Fl_Choice *m_Browser;
Fl_Knob *m_OutputGain;
Fl_Box *m_Name;
Fl_Box *m_Maker;
Fl_Button *m_UpdateInputs;
Fl_Button *m_UpdateMinMax;
Fl_Button *m_PowerAmp;
std::vector<Fl_Output*> m_PortOutput;
std::vector<Fl_Input*> m_PortMin;
std::vector<Fl_Input*> m_PortMax;
std::vector<Fl_Check_Button*> m_PortClamp;
std::vector<Fl_Input*> m_PortDefault;
Fl_Tabs *m_Tab;
Fl_Group *m_ControlGroup;
Fl_Group *m_SetupGroup;
Fl_Scroll *m_InputScroll;
Fl_Pack *m_InputPack;
Fl_Choice *m_Browser;
Fl_Box *m_Name;
Fl_Box *m_Maker;
Fl_Button *m_UpdateInputs;
Fl_Button *m_UpdatePortSettings;
std::vector<Fl_Output*> m_PortOutput;
std::vector<Fl_Input*> m_PortMin;
std::vector<Fl_Input*> m_PortMax;
std::vector<Fl_Check_Button*> m_PortClamp;
std::vector<Fl_Input*> m_PortDefault;
std::vector<Fl_Knob*> m_PortDefaultKnob;

std::vector<LADSPAInfo::PluginEntry> PluginList;

@@ -91,24 +92,19 @@ private:

inline void cb_Select_i(Fl_Choice* o);
static void cb_Select(Fl_Choice* o);
inline void cb_Gain_i(Fl_Knob* o, void* v);
static void cb_Gain(Fl_Knob* o, void* v);
inline void cb_MinMax_i(Fl_Button* o, void* v);
static void cb_MinMax(Fl_Button* o, void* v);
inline void cb_PowerAmp_i(Fl_Button* o, void* v);
static void cb_PowerAmp(Fl_Button* o, void* v);
inline void cb_PortSettings_i(Fl_Button* o, void* v);
static void cb_PortSettings(Fl_Button* o, void* v);

struct InChannelData
{
unsigned long PluginIndex;
float Gain;
char Name[256];
char Maker[256];
unsigned long MaxInputPortCount;
unsigned long InputPortCount;
char *InputPortNames;
PortSettings *InputPortSettings;
float *InputPortValues;
PortValues *InputPortValues;
};

InChannelData m_InData;


Loading…
Cancel
Save