@@ -17,7 +17,9 @@ | |||||
*/ | */ | ||||
#include "LADSPAPlugin.h" | #include "LADSPAPlugin.h" | ||||
#include "LADSPAPluginGUI.h" | #include "LADSPAPluginGUI.h" | ||||
#include <stdio.h> | |||||
#include <cstdio> | |||||
#include <cstdlib> | |||||
#include <cstring> | |||||
#include "SpiralIcon.xpm" | #include "SpiralIcon.xpm" | ||||
#include "utils.h" | #include "utils.h" | ||||
#include <algorithm> | #include <algorithm> | ||||
@@ -63,7 +65,9 @@ void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle, | |||||
pi.Filename = pcFullFilename; | pi.Filename = pcFullFilename; | ||||
pi.Label = psDescriptor->Label; | pi.Label = psDescriptor->Label; | ||||
pi.Name = psDescriptor->Name; | pi.Name = psDescriptor->Name; | ||||
/* ARGH! I really can't stand this ugly hack */ | |||||
pi.InputPortCount = getPortCountByType(psDescriptor, LADSPA_PORT_INPUT); | |||||
// ARGH! I really can't stand this ugly hack | |||||
lg->m_LADSPAList.push_back(pi); | lg->m_LADSPAList.push_back(pi); | ||||
} else { | } else { | ||||
cerr << "Plugin ignored...\n\n"; | cerr << "Plugin ignored...\n\n"; | ||||
@@ -76,6 +80,7 @@ void describePluginLibrary(const char * pcFullFilename, void * pvPluginHandle, | |||||
void LADSPAPlugin::LoadPluginList(void) | void LADSPAPlugin::LoadPluginList(void) | ||||
{ | { | ||||
m_LADSPAList.clear(); | m_LADSPAList.clear(); | ||||
m_CurrentPlugin.Name = ""; | m_CurrentPlugin.Name = ""; | ||||
m_CurrentPlugin.Filename = ""; | m_CurrentPlugin.Filename = ""; | ||||
m_CurrentPlugin.Label = ""; | m_CurrentPlugin.Label = ""; | ||||
@@ -85,7 +90,7 @@ void LADSPAPlugin::LoadPluginList(void) | |||||
lg = NULL; | lg = NULL; | ||||
sort(m_LADSPAList.begin(), m_LADSPAList.end(), LPluginInfoSortAsc()); | sort(m_LADSPAList.begin(), m_LADSPAList.end(), LPluginInfoSortAsc()); | ||||
} | |||||
} | |||||
//////////////////////////////////////////////////// | //////////////////////////////////////////////////// | ||||
@@ -108,35 +113,74 @@ int GetID() | |||||
/////////////////////////////////////////////////////// | /////////////////////////////////////////////////////// | ||||
LADSPAPlugin::LADSPAPlugin() : | |||||
PlugHandle(0), | |||||
LADSPAPlugin::LADSPAPlugin() : | |||||
PlugHandle(0), | |||||
PlugDesc(NULL), | PlugDesc(NULL), | ||||
m_Gain(1.0f), | m_Gain(1.0f), | ||||
m_Amped(false) | m_Amped(false) | ||||
{ | { | ||||
m_Version=3; | m_Version=3; | ||||
m_PluginInfo.Name="LADSPA"; | m_PluginInfo.Name="LADSPA"; | ||||
m_PluginInfo.Width=600; | m_PluginInfo.Width=600; | ||||
m_PluginInfo.Height=300; | m_PluginInfo.Height=300; | ||||
m_PluginInfo.NumInputs=0; | m_PluginInfo.NumInputs=0; | ||||
m_PluginInfo.NumOutputs=1; | m_PluginInfo.NumOutputs=1; | ||||
m_PluginInfo.PortTips.push_back("Nuffink yet"); | |||||
m_PluginInfo.PortTips.push_back("Nuffink yet"); | |||||
m_InputPortCountMax = 0; | |||||
m_InputPortCount = 0; | |||||
// For receiving from GUI | |||||
m_AudioCH->Register("Gain",&m_Gain); | m_AudioCH->Register("Gain",&m_Gain); | ||||
m_AudioCH->Register("Amped",&m_Amped); | m_AudioCH->Register("Amped",&m_Amped); | ||||
m_AudioCH->RegisterData("Desc",ChannelHandler::OUTPUT,&PlugDesc,sizeof(PlugDesc)); | |||||
m_AudioCH->Register("Num",&m_GUIArgs.Num); | |||||
m_AudioCH->Register("Value",&m_GUIArgs.Value); | |||||
m_AudioCH->Register("Clamp",&m_GUIArgs.Clamp); | |||||
m_AudioCH->RegisterData("Filename",ChannelHandler::INPUT,&m_GUIArgs.Filename,sizeof(m_GUIArgs.Filename)); | |||||
m_AudioCH->RegisterData("Label",ChannelHandler::INPUT,&m_GUIArgs.Label,sizeof(m_GUIArgs.Label)); | |||||
m_AudioCH->RegisterData("PluginIndex", ChannelHandler::INPUT,&m_PluginIndex,sizeof(m_PluginIndex)); | |||||
LoadPluginList(); | LoadPluginList(); | ||||
// Examine plugin list and find highest input port count | |||||
for (vector<LPluginInfo>::iterator i = m_LADSPAList.begin(); | |||||
i != m_LADSPAList.end(); i++) { | |||||
if ((*i).InputPortCount > m_InputPortCountMax) | |||||
m_InputPortCountMax = (*i).InputPortCount; | |||||
} | |||||
// Now we have a maximum input port count, so we can allocate and register our | |||||
// port info arrays | |||||
m_AudioCH->RegisterData("InputPortCountMax",ChannelHandler::OUTPUT,&m_InputPortCountMax,sizeof(m_InputPortCountMax)); | |||||
m_AudioCH->RegisterData("InputPortCount",ChannelHandler::OUTPUT,&m_InputPortCount,sizeof(m_InputPortCount)); | |||||
m_InputPortMin = (float *)malloc(sizeof(float) * m_InputPortCountMax); | |||||
m_InputPortMax = (float *)malloc(sizeof(float) * m_InputPortCountMax); | |||||
m_InputPortClamp = (bool *)malloc(sizeof(bool) * m_InputPortCountMax); | |||||
m_InputPortNames = (char *)malloc(256 * m_InputPortCountMax); | |||||
m_Name = (char *)malloc(256); | |||||
m_Maker = (char *)malloc(256); | |||||
if (m_InputPortMin && m_InputPortMax && m_InputPortClamp && m_InputPortNames && | |||||
m_Name && m_Maker) { | |||||
m_AudioCH->RegisterData("InputPortMin", ChannelHandler::OUTPUT, m_InputPortMin, sizeof(float) * m_InputPortCountMax); | |||||
m_AudioCH->RegisterData("InputPortMax", ChannelHandler::OUTPUT, m_InputPortMax, sizeof(float) * m_InputPortCountMax); | |||||
m_AudioCH->RegisterData("InputPortClamp", ChannelHandler::OUTPUT, m_InputPortClamp, sizeof(bool) * m_InputPortCountMax); | |||||
m_AudioCH->RegisterData("InputPortNames", ChannelHandler::OUTPUT, m_InputPortNames, 256 * m_InputPortCountMax); | |||||
m_AudioCH->RegisterData("Name",ChannelHandler::OUTPUT,m_Name,256); | |||||
m_AudioCH->RegisterData("Maker",ChannelHandler::OUTPUT,m_Maker,256); | |||||
} else { | |||||
cerr<<"Memory allocation error\n"<<endl; | |||||
} | |||||
} | } | ||||
LADSPAPlugin::~LADSPAPlugin() | LADSPAPlugin::~LADSPAPlugin() | ||||
{ | { | ||||
// Free allocated buffers | |||||
if (m_InputPortMin) free(m_InputPortMin); | |||||
if (m_InputPortMax) free(m_InputPortMax); | |||||
if (m_InputPortClamp) free(m_InputPortClamp); | |||||
if (m_InputPortNames) free(m_InputPortNames); | |||||
if (m_Name) free(m_Name); | |||||
if (m_Maker) free(m_Maker); | |||||
} | } | ||||
PluginInfo &LADSPAPlugin::Initialise(const HostInfo *Host) | PluginInfo &LADSPAPlugin::Initialise(const HostInfo *Host) | ||||
@@ -144,12 +188,13 @@ PluginInfo &LADSPAPlugin::Initialise(const HostInfo *Host) | |||||
PluginInfo& Info = SpiralPlugin::Initialise(Host); | PluginInfo& Info = SpiralPlugin::Initialise(Host); | ||||
LADSPA_Data *NewPort = new LADSPA_Data[m_HostInfo->BUFSIZE]; | LADSPA_Data *NewPort = new LADSPA_Data[m_HostInfo->BUFSIZE]; | ||||
m_LADSPABufVec.push_back(NewPort); | m_LADSPABufVec.push_back(NewPort); | ||||
return Info; | |||||
return Info; | |||||
} | } | ||||
SpiralGUIType *LADSPAPlugin::CreateGUI() | SpiralGUIType *LADSPAPlugin::CreateGUI() | ||||
{ | { | ||||
return new LADSPAPluginGUI(m_PluginInfo.Width,m_PluginInfo.Height,this,m_AudioCH,m_HostInfo,m_LADSPAList); | |||||
return new LADSPAPluginGUI(m_PluginInfo.Width, m_PluginInfo.Height, | |||||
this, m_AudioCH, m_HostInfo, m_LADSPAList); | |||||
} | } | ||||
void LADSPAPlugin::Execute() | void LADSPAPlugin::Execute() | ||||
@@ -188,10 +233,10 @@ void LADSPAPlugin::Execute() | |||||
for (int i=0; i<m_HostInfo->BUFSIZE; i++) m_LADSPABufVec[n][i]=0; | for (int i=0; i<m_HostInfo->BUFSIZE; i++) m_LADSPABufVec[n][i]=0; | ||||
} | } | ||||
} | } | ||||
// run plugin | // run plugin | ||||
PlugDesc->run(PlugInstHandle,m_HostInfo->BUFSIZE); | |||||
PlugDesc->run(PlugInstHandle,m_HostInfo->BUFSIZE); | |||||
// convert outputs | // convert outputs | ||||
for (int n=0; n<m_PluginInfo.NumOutputs; n++) | for (int n=0; n<m_PluginInfo.NumOutputs; n++) | ||||
{ | { | ||||
@@ -219,10 +264,8 @@ void LADSPAPlugin::ExecuteCommands() | |||||
{ | { | ||||
switch(m_AudioCH->GetCommand()) | switch(m_AudioCH->GetCommand()) | ||||
{ | { | ||||
case (SETMIN) : SetMin(m_GUIArgs.Num,m_GUIArgs.Value); break; | |||||
case (SETMAX) : SetMax(m_GUIArgs.Num,m_GUIArgs.Value); break; | |||||
case (SETCLAMP) : SetPortClamp(m_GUIArgs.Num,m_GUIArgs.Clamp); break; | |||||
case (UPDATEPLUGIN) : UpdatePlugin(m_GUIArgs.Num); break; | |||||
case (UPDATERANGES) : break; | |||||
case (UPDATEPLUGIN) : UpdatePlugin(m_PluginIndex); break; | |||||
}; | }; | ||||
} | } | ||||
} | } | ||||
@@ -230,7 +273,7 @@ void LADSPAPlugin::ExecuteCommands() | |||||
void LADSPAPlugin::StreamOut(ostream &s) | void LADSPAPlugin::StreamOut(ostream &s) | ||||
{ | { | ||||
s<<m_Version<<" "; | s<<m_Version<<" "; | ||||
switch (m_Version) | switch (m_Version) | ||||
{ | { | ||||
case 3: | case 3: | ||||
@@ -329,7 +372,7 @@ void LADSPAPlugin::StreamIn(istream &s) | |||||
{ | { | ||||
UpdatePlugin(Filename.c_str(), Label.c_str(), false); | UpdatePlugin(Filename.c_str(), Label.c_str(), false); | ||||
} | } | ||||
m_CurrentPlugin.Ports.reserve(PortCount); | m_CurrentPlugin.Ports.reserve(PortCount); | ||||
for (int n=0; n<PortCount; n++) | for (int n=0; n<PortCount; n++) | ||||
@@ -390,7 +433,7 @@ void LADSPAPlugin::StreamIn(istream &s) | |||||
string Filename,Label; | string Filename,Label; | ||||
s>>Filename>>Label; | s>>Filename>>Label; | ||||
if (Filename!="None") | if (Filename!="None") | ||||
{ | { | ||||
UpdatePlugin(Filename.c_str(), Label.c_str()); | UpdatePlugin(Filename.c_str(), Label.c_str()); | ||||
@@ -430,10 +473,10 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool | |||||
PlugHandle = 0; | PlugHandle = 0; | ||||
return 0; | return 0; | ||||
} | } | ||||
m_PluginInfo.NumInputs=getPortCountByType(PlugDesc, LADSPA_PORT_INPUT); | m_PluginInfo.NumInputs=getPortCountByType(PlugDesc, LADSPA_PORT_INPUT); | ||||
m_PluginInfo.NumOutputs=getPortCountByType(PlugDesc, LADSPA_PORT_OUTPUT); | m_PluginInfo.NumOutputs=getPortCountByType(PlugDesc, LADSPA_PORT_OUTPUT); | ||||
///////////////////////////////// | ///////////////////////////////// | ||||
// LADSPA Buffers | // LADSPA Buffers | ||||
@@ -442,9 +485,9 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool | |||||
{ | { | ||||
if (*i) delete[] (*i); | if (*i) delete[] (*i); | ||||
} | } | ||||
m_LADSPABufVec.clear(); | |||||
unsigned long c=0; | |||||
m_LADSPABufVec.clear(); | |||||
unsigned long c=0; | |||||
for (unsigned int n=0; n<PlugDesc->PortCount; n++) | for (unsigned int n=0; n<PlugDesc->PortCount; n++) | ||||
{ | { | ||||
if (LADSPA_IS_PORT_INPUT(PlugDesc->PortDescriptors[n])) | if (LADSPA_IS_PORT_INPUT(PlugDesc->PortDescriptors[n])) | ||||
@@ -452,11 +495,11 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool | |||||
LADSPA_Data *NewPort = new LADSPA_Data[m_HostInfo->BUFSIZE]; | LADSPA_Data *NewPort = new LADSPA_Data[m_HostInfo->BUFSIZE]; | ||||
m_LADSPABufVec.push_back(NewPort); | m_LADSPABufVec.push_back(NewPort); | ||||
PlugDesc->connect_port(PlugInstHandle, n, m_LADSPABufVec[c]); | PlugDesc->connect_port(PlugInstHandle, n, m_LADSPABufVec[c]); | ||||
m_PortID.push_back(n); | |||||
m_PortID.push_back(n); | |||||
c++; | c++; | ||||
} | |||||
} | |||||
} | |||||
} | |||||
for (unsigned int n=0; n<PlugDesc->PortCount; n++) | for (unsigned int n=0; n<PlugDesc->PortCount; n++) | ||||
{ | { | ||||
if (LADSPA_IS_PORT_OUTPUT(PlugDesc->PortDescriptors[n])) | if (LADSPA_IS_PORT_OUTPUT(PlugDesc->PortDescriptors[n])) | ||||
@@ -466,9 +509,9 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool | |||||
PlugDesc->connect_port(PlugInstHandle, n, m_LADSPABufVec[c]); | PlugDesc->connect_port(PlugInstHandle, n, m_LADSPABufVec[c]); | ||||
m_PortID.push_back(n); | m_PortID.push_back(n); | ||||
c++; | c++; | ||||
} | |||||
} | |||||
} | |||||
} | |||||
// activate the plugin now | // activate the plugin now | ||||
if (PlugDesc->activate) | if (PlugDesc->activate) | ||||
PlugDesc->activate(PlugInstHandle); | PlugDesc->activate(PlugInstHandle); | ||||
@@ -481,9 +524,9 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool | |||||
RemoveAllOutputs(); | RemoveAllOutputs(); | ||||
// Reallocate the i/o buffers required | // Reallocate the i/o buffers required | ||||
for (int n=0; n<m_PluginInfo.NumInputs; n++) AddInput(); | |||||
for (int n=0; n<m_PluginInfo.NumInputs; n++) AddInput(); | |||||
for (int n=0; n<m_PluginInfo.NumOutputs; n++) AddOutput(); | for (int n=0; n<m_PluginInfo.NumOutputs; n++) AddOutput(); | ||||
////////////////////////////// | ////////////////////////////// | ||||
// Update the GUI stuff | // Update the GUI stuff | ||||
@@ -491,55 +534,55 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool | |||||
m_CurrentPlugin.Maker=PlugDesc->Maker; | m_CurrentPlugin.Maker=PlugDesc->Maker; | ||||
m_CurrentPlugin.Filename=filename; | m_CurrentPlugin.Filename=filename; | ||||
m_CurrentPlugin.Label=label; | m_CurrentPlugin.Label=label; | ||||
m_CurrentPlugin.Ports.clear(); | m_CurrentPlugin.Ports.clear(); | ||||
m_PluginInfo.PortTips.clear(); | m_PluginInfo.PortTips.clear(); | ||||
string desc; | string desc; | ||||
c=0; | c=0; | ||||
for (unsigned int i = 0; i < PlugDesc->PortCount; i++) | |||||
for (unsigned int i = 0; i < PlugDesc->PortCount; i++) | |||||
{ | { | ||||
if (LADSPA_IS_PORT_INPUT(PlugDesc->PortDescriptors[i])) | |||||
if (LADSPA_IS_PORT_INPUT(PlugDesc->PortDescriptors[i])) | |||||
{ | { | ||||
desc = string(PlugDesc->PortNames[i]) + | desc = string(PlugDesc->PortNames[i]) + | ||||
(LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); | (LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); | ||||
m_PluginInfo.PortTips.push_back(desc.c_str()); | m_PluginInfo.PortTips.push_back(desc.c_str()); | ||||
LPluginInfo::LPortDetails PortDetails; | LPluginInfo::LPortDetails PortDetails; | ||||
PortDetails.Name=m_PluginInfo.PortTips[c].c_str(); | PortDetails.Name=m_PluginInfo.PortTips[c].c_str(); | ||||
m_CurrentPlugin.Ports.push_back(PortDetails); | m_CurrentPlugin.Ports.push_back(PortDetails); | ||||
c++; | c++; | ||||
} | } | ||||
} | } | ||||
for (unsigned int i = 0; i < PlugDesc->PortCount; i++) | |||||
{ | |||||
for (unsigned int i = 0; i < PlugDesc->PortCount; i++) | |||||
{ | |||||
if (LADSPA_IS_PORT_OUTPUT(PlugDesc->PortDescriptors[i])) { | if (LADSPA_IS_PORT_OUTPUT(PlugDesc->PortDescriptors[i])) { | ||||
desc = string(PlugDesc->PortNames[i]) + | desc = string(PlugDesc->PortNames[i]) + | ||||
(LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); | (LADSPA_IS_PORT_CONTROL(PlugDesc->PortDescriptors[i]) ? " (CV)" : " (AU)"); | ||||
m_PluginInfo.PortTips.push_back(desc.c_str()); | m_PluginInfo.PortTips.push_back(desc.c_str()); | ||||
} | } | ||||
} | } | ||||
UpdatePluginInfoWithHost(); | UpdatePluginInfoWithHost(); | ||||
if (PortClampReset) | if (PortClampReset) | ||||
{ | { | ||||
m_PortMin.clear(); | m_PortMin.clear(); | ||||
m_PortMax.clear(); | |||||
m_PortMax.clear(); | |||||
m_PortClamp.clear(); | m_PortClamp.clear(); | ||||
for (int n=0; n<m_PluginInfo.NumInputs; n++) | for (int n=0; n<m_PluginInfo.NumInputs; n++) | ||||
{ | { | ||||
float Max=1.0f, Min=-1.0f; | float Max=1.0f, Min=-1.0f; | ||||
int Port=m_PortID[n]; | int Port=m_PortID[n]; | ||||
// Get the bounding hints for the port | // Get the bounding hints for the port | ||||
LADSPA_PortRangeHintDescriptor HintDesc=PlugDesc->PortRangeHints[Port].HintDescriptor; | LADSPA_PortRangeHintDescriptor HintDesc=PlugDesc->PortRangeHints[Port].HintDescriptor; | ||||
if (LADSPA_IS_HINT_BOUNDED_BELOW(HintDesc)) | |||||
if (LADSPA_IS_HINT_BOUNDED_BELOW(HintDesc)) | |||||
{ | { | ||||
Min=PlugDesc->PortRangeHints[Port].LowerBound; | Min=PlugDesc->PortRangeHints[Port].LowerBound; | ||||
if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) | if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) | ||||
@@ -547,7 +590,7 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool | |||||
Min*=m_HostInfo->SAMPLERATE; | Min*=m_HostInfo->SAMPLERATE; | ||||
} | } | ||||
} | } | ||||
if (LADSPA_IS_HINT_BOUNDED_ABOVE(HintDesc)) | |||||
if (LADSPA_IS_HINT_BOUNDED_ABOVE(HintDesc)) | |||||
{ | { | ||||
Max=PlugDesc->PortRangeHints[Port].UpperBound; | Max=PlugDesc->PortRangeHints[Port].UpperBound; | ||||
if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) | if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) | ||||
@@ -555,23 +598,53 @@ bool LADSPAPlugin::UpdatePlugin(const char * filename, const char * label, bool | |||||
Max*=m_HostInfo->SAMPLERATE; | Max*=m_HostInfo->SAMPLERATE; | ||||
} | } | ||||
} | } | ||||
m_PortMin.push_back(Min); | m_PortMin.push_back(Min); | ||||
m_PortMax.push_back(Max); | m_PortMax.push_back(Max); | ||||
// PortClamp defaults to true | // PortClamp defaults to true | ||||
m_PortClamp.push_back(true); | m_PortClamp.push_back(true); | ||||
m_CurrentPlugin.Ports[n].Min=Min; | m_CurrentPlugin.Ports[n].Min=Min; | ||||
m_CurrentPlugin.Ports[n].Max=Max; | m_CurrentPlugin.Ports[n].Max=Max; | ||||
m_CurrentPlugin.Ports[n].Clamped=true; | m_CurrentPlugin.Ports[n].Clamped=true; | ||||
} | } | ||||
} | |||||
} | |||||
// Finally, we need to supply the GUI with information via | |||||
// ChannelHandler. | |||||
m_InputPortCount = m_PluginInfo.NumInputs; | |||||
int lbl_length; | |||||
char *lbl_start; | |||||
lbl_length = m_CurrentPlugin.Name.size(); | |||||
lbl_length = lbl_length > 255 ? 255 : lbl_length; | |||||
strncpy(m_Name, m_CurrentPlugin.Name.substr(0, lbl_length).c_str(), lbl_length); | |||||
m_Name[lbl_length] = '\0'; | |||||
lbl_length = m_CurrentPlugin.Maker.size(); | |||||
lbl_length = lbl_length > 255 ? 255 : lbl_length; | |||||
strncpy(m_Maker, m_CurrentPlugin.Maker.substr(0, lbl_length).c_str(), lbl_length); | |||||
m_Maker[lbl_length] = '\0'; | |||||
lbl_start = m_InputPortNames; | |||||
for (unsigned long n = 0; n < m_InputPortCount; n++) { | |||||
m_InputPortMin[n] = m_CurrentPlugin.Ports[n].Min; | |||||
m_InputPortMax[n] = m_CurrentPlugin.Ports[n].Max; | |||||
m_InputPortClamp[n] = m_CurrentPlugin.Ports[n].Clamped; | |||||
lbl_length = m_CurrentPlugin.Ports[n].Name.size(); | |||||
lbl_length = lbl_length > 255 ? 255 : lbl_length; | |||||
strncpy(lbl_start, m_CurrentPlugin.Ports[n].Name.substr(0, lbl_length).c_str(), lbl_length); | |||||
lbl_start[lbl_length] = '\0'; | |||||
lbl_start += 256; | |||||
} | |||||
return true; | return true; | ||||
} | } | ||||
} | } | ||||
cerr << "Error loading LADSPA Plugin.\n"; | cerr << "Error loading LADSPA Plugin.\n"; | ||||
return false; | return false; | ||||
} | } | ||||
@@ -14,7 +14,7 @@ | |||||
* You should have received a copy of the GNU General Public License | * You should have received a copy of the GNU General Public License | ||||
* along with this program; if not, write to the Free Software | * along with this program; if not, write to the Free Software | ||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||
*/ | |||||
*/ | |||||
#include "../SpiralPlugin.h" | #include "../SpiralPlugin.h" | ||||
#include <FL/Fl_Pixmap.H> | #include <FL/Fl_Pixmap.H> | ||||
@@ -32,16 +32,17 @@ public: | |||||
string Label; | string Label; | ||||
string Name; | string Name; | ||||
string Maker; | string Maker; | ||||
unsigned long InputPortCount; | |||||
struct LPortDetails | struct LPortDetails | ||||
{ | { | ||||
string Name; | string Name; | ||||
float Min,Max; | float Min,Max; | ||||
bool Clamped; | bool Clamped; | ||||
}; | }; | ||||
vector<LPortDetails> Ports; | vector<LPortDetails> Ports; | ||||
bool operator<(const LPluginInfo & li) { return (Name < li.Name); } | bool operator<(const LPluginInfo & li) { return (Name < li.Name); } | ||||
bool operator==(const LPluginInfo& li) { return (Name == li.Name); } | bool operator==(const LPluginInfo& li) { return (Name == li.Name); } | ||||
}; | }; | ||||
@@ -60,34 +61,22 @@ class LADSPAPlugin : public SpiralPlugin | |||||
public: | public: | ||||
LADSPAPlugin(); | LADSPAPlugin(); | ||||
virtual ~LADSPAPlugin(); | virtual ~LADSPAPlugin(); | ||||
virtual PluginInfo &Initialise(const HostInfo *Host); | virtual PluginInfo &Initialise(const HostInfo *Host); | ||||
virtual SpiralGUIType *CreateGUI(); | virtual SpiralGUIType *CreateGUI(); | ||||
virtual void Execute(); | virtual void Execute(); | ||||
virtual void ExecuteCommands(); | |||||
virtual void ExecuteCommands(); | |||||
virtual void StreamOut(ostream &s); | virtual void StreamOut(ostream &s); | ||||
virtual void StreamIn(istream &s); | virtual void StreamIn(istream &s); | ||||
float GetGain() { return m_Gain; } | float GetGain() { return m_Gain; } | ||||
bool GetAmped() { return m_Amped; } | bool GetAmped() { return m_Amped; } | ||||
enum GUICommands{NONE,SETMIN,SETMAX,SETCLAMP,UPDATEPLUGIN}; | |||||
struct GUIArgs | |||||
{ | |||||
int Num; | |||||
float Value; | |||||
bool Clamp; | |||||
char Filename[256]; | |||||
char Label[256]; | |||||
}; | |||||
private: | |||||
GUIArgs m_GUIArgs; | |||||
enum GUICommands{NONE,UPDATERANGES,UPDATEPLUGIN}; | |||||
private: | |||||
void SetMin(int n,float min) { m_PortMin[n]=min; } | |||||
void SetMax(int n,float max) { m_PortMax[n]=max; } | |||||
void SetPortClamp(int n,bool i) { m_PortClamp[n]=i; } | |||||
void UpdatePortRange(void); | |||||
bool UpdatePlugin(int n); | bool UpdatePlugin(int n); | ||||
bool UpdatePlugin(const char * filename, const char * label, bool PortClampReset=true); | bool UpdatePlugin(const char * filename, const char * label, bool PortClampReset=true); | ||||
@@ -96,20 +85,33 @@ private: | |||||
void * PlugHandle; | void * PlugHandle; | ||||
const LADSPA_Descriptor * PlugDesc; | const LADSPA_Descriptor * PlugDesc; | ||||
vector<LADSPA_Data*> m_LADSPABufVec; | vector<LADSPA_Data*> m_LADSPABufVec; | ||||
LADSPA_Handle PlugInstHandle; | LADSPA_Handle PlugInstHandle; | ||||
vector<int> m_PortID; | |||||
vector<int> m_PortID; | |||||
vector<float> m_PortMin; | vector<float> m_PortMin; | ||||
vector<float> m_PortMax; | |||||
vector<bool> m_PortClamp; | |||||
vector<float> m_PortMax; | |||||
vector<bool> m_PortClamp; | |||||
// our database of ladspa plugins | // our database of ladspa plugins | ||||
vector<LPluginInfo> m_LADSPAList; | vector<LPluginInfo> m_LADSPAList; | ||||
LPluginInfo m_CurrentPlugin; | LPluginInfo m_CurrentPlugin; | ||||
float m_Gain; | |||||
bool m_Amped; | |||||
float m_Gain; | |||||
bool m_Amped; | |||||
unsigned long m_PluginIndex; | |||||
char *m_Name; | |||||
char *m_Maker; | |||||
unsigned long m_InputPortCountMax; // Maximum number of input ports | |||||
// Corresponds to input port count of one | |||||
// (or more) plugins found | |||||
unsigned long m_InputPortCount; // Number of input ports in current plugin | |||||
float *m_InputPortMin; // Input port range minima | |||||
float *m_InputPortMax; // Input port range maxima | |||||
bool *m_InputPortClamp; // Input port clamp state | |||||
char *m_InputPortNames; // Input port names | |||||
}; | }; | ||||
#endif | #endif |
@@ -21,8 +21,8 @@ | |||||
#include <FL/fl_draw.h> | #include <FL/fl_draw.h> | ||||
#include <FL/fl_draw.H> | #include <FL/fl_draw.H> | ||||
#include "ladspa.h" | #include "ladspa.h" | ||||
#include <stdio.h> | |||||
#include <math.h> | |||||
#include <cstdio> | |||||
#include <cmath> | |||||
#include <dlfcn.h> | #include <dlfcn.h> | ||||
#include <vector> | #include <vector> | ||||
#include "utils.h" | #include "utils.h" | ||||
@@ -35,7 +35,7 @@ LADSPAPluginGUI::LADSPAPluginGUI(int w, int h,LADSPAPlugin *o, ChannelHandler *c | |||||
SpiralPluginGUI(w,h,o,ch) | SpiralPluginGUI(w,h,o,ch) | ||||
{ | { | ||||
PluginList=PVec; | PluginList=PVec; | ||||
m_Filename="None"; | m_Filename="None"; | ||||
int Width=20; | int Width=20; | ||||
@@ -43,13 +43,30 @@ SpiralPluginGUI(w,h,o,ch) | |||||
m_Browser= new Fl_Hold_Browser(5,20,290,260,"LADSPA Plugins"); | m_Browser= new Fl_Hold_Browser(5,20,290,260,"LADSPA Plugins"); | ||||
m_Browser->callback((Fl_Callback*)cb_Select); | m_Browser->callback((Fl_Callback*)cb_Select); | ||||
for (vector<LPluginInfo>::iterator i=PluginList.begin(); | for (vector<LPluginInfo>::iterator i=PluginList.begin(); | ||||
i!=PluginList.end(); i++) | i!=PluginList.end(); i++) | ||||
{ | { | ||||
m_Browser->add((*i).Name.c_str()); | m_Browser->add((*i).Name.c_str()); | ||||
} | } | ||||
// Get maximum input port count | |||||
m_GUICH->GetData("InputPortCountMax",&m_InputPortCountMax); | |||||
// Set up buffers for data transfer via ChannelHandler | |||||
m_InputPortMin = (float *)malloc(sizeof(float) * m_InputPortCountMax); | |||||
m_InputPortMax = (float *)malloc(sizeof(float) * m_InputPortCountMax); | |||||
m_InputPortClamp = (bool *)malloc(sizeof(bool) * m_InputPortCountMax); | |||||
m_InputPortNames = (char *)malloc(256 * m_InputPortCountMax); | |||||
m_NameString = (char *)malloc(256); | |||||
m_MakerString = (char *)malloc(256); | |||||
if (!(m_InputPortMin && m_InputPortMax && m_InputPortClamp && m_InputPortNames && | |||||
m_NameString && m_MakerString)) { | |||||
cerr<<"Memory allocation error\n"<<endl; | |||||
} | |||||
m_InputScroll = new Fl_Scroll(300,80,290,150," Value Min Max Clamp?"); | m_InputScroll = new Fl_Scroll(300,80,290,150," Value Min Max Clamp?"); | ||||
m_InputScroll->align(FL_ALIGN_TOP_LEFT); | m_InputScroll->align(FL_ALIGN_TOP_LEFT); | ||||
m_InputScroll->type(Fl_Scroll::VERTICAL); | m_InputScroll->type(Fl_Scroll::VERTICAL); | ||||
@@ -57,71 +74,77 @@ SpiralPluginGUI(w,h,o,ch) | |||||
add(m_InputScroll); | add(m_InputScroll); | ||||
m_InputPack = new Fl_Pack(300,85,300,100,""); | m_InputPack = new Fl_Pack(300,85,300,100,""); | ||||
m_InputScroll->add(m_InputPack); | m_InputScroll->add(m_InputPack); | ||||
m_Name = new Fl_Box(290,20,10,20,"None"); | m_Name = new Fl_Box(290,20,10,20,"None"); | ||||
m_Name->align(FL_ALIGN_RIGHT); | m_Name->align(FL_ALIGN_RIGHT); | ||||
m_Name->labelcolor(GUI_COLOUR); | m_Name->labelcolor(GUI_COLOUR); | ||||
m_Name->labelsize(10); | m_Name->labelsize(10); | ||||
add(m_Name); | add(m_Name); | ||||
m_Maker = new Fl_Box(290,40,10,20,"None"); | m_Maker = new Fl_Box(290,40,10,20,"None"); | ||||
m_Maker->align(FL_ALIGN_RIGHT); | m_Maker->align(FL_ALIGN_RIGHT); | ||||
m_Maker->labelcolor(GUI_COLOUR); | m_Maker->labelcolor(GUI_COLOUR); | ||||
m_Maker->labelsize(10); | m_Maker->labelsize(10); | ||||
add(m_Maker); | add(m_Maker); | ||||
m_OutputGain = new Fl_Knob(545,240,40,40,"Output Gain"); | m_OutputGain = new Fl_Knob(545,240,40,40,"Output Gain"); | ||||
m_OutputGain->color(GUI_COLOUR); | m_OutputGain->color(GUI_COLOUR); | ||||
m_OutputGain->type(Fl_Knob::DOTLIN); | m_OutputGain->type(Fl_Knob::DOTLIN); | ||||
m_OutputGain->maximum(2); | m_OutputGain->maximum(2); | ||||
m_OutputGain->step(0.001); | |||||
m_OutputGain->value(1.0); | |||||
m_OutputGain->step(0.001); | |||||
m_OutputGain->value(1.0); | |||||
m_OutputGain->labelsize(10); | m_OutputGain->labelsize(10); | ||||
m_OutputGain->callback((Fl_Callback*)cb_Gain); | m_OutputGain->callback((Fl_Callback*)cb_Gain); | ||||
add(m_OutputGain); | add(m_OutputGain); | ||||
m_UpdateInputs = new Fl_Button(480,252,50,25,"Refresh"); | m_UpdateInputs = new Fl_Button(480,252,50,25,"Refresh"); | ||||
m_UpdateInputs->labelsize(10); | m_UpdateInputs->labelsize(10); | ||||
m_UpdateInputs->value(1); | m_UpdateInputs->value(1); | ||||
m_UpdateInputs->type(1); | m_UpdateInputs->type(1); | ||||
add(m_UpdateInputs); | add(m_UpdateInputs); | ||||
m_UpdateMinMax = new Fl_Button(400,252,85,25,"Update Min/Max"); | m_UpdateMinMax = new Fl_Button(400,252,85,25,"Update Min/Max"); | ||||
m_UpdateMinMax->labelsize(10); | m_UpdateMinMax->labelsize(10); | ||||
m_UpdateMinMax->callback((Fl_Callback*)cb_MinMax); | m_UpdateMinMax->callback((Fl_Callback*)cb_MinMax); | ||||
add(m_UpdateMinMax); | add(m_UpdateMinMax); | ||||
m_PowerAmp = new Fl_Button(320,252,80,25,"PowerAmp"); | m_PowerAmp = new Fl_Button(320,252,80,25,"PowerAmp"); | ||||
m_PowerAmp->labelsize(10); | m_PowerAmp->labelsize(10); | ||||
m_PowerAmp->value(0); | m_PowerAmp->value(0); | ||||
m_PowerAmp->type(1); | m_PowerAmp->type(1); | ||||
m_PowerAmp->callback((Fl_Callback*)cb_PowerAmp); | m_PowerAmp->callback((Fl_Callback*)cb_PowerAmp); | ||||
add(m_PowerAmp); | add(m_PowerAmp); | ||||
end(); | end(); | ||||
} | } | ||||
LADSPAPluginGUI::~LADSPAPluginGUI(void) | |||||
LADSPAPluginGUI::~LADSPAPluginGUI(void) | |||||
{ | { | ||||
if (m_InputPortMin) free(m_InputPortMin); | |||||
if (m_InputPortMax) free(m_InputPortMax); | |||||
if (m_InputPortClamp) free(m_InputPortClamp); | |||||
if (m_InputPortNames) free(m_InputPortNames); | |||||
if (m_NameString) free(m_NameString); | |||||
if (m_MakerString) free(m_MakerString); | |||||
Fl::check(); | Fl::check(); | ||||
} | } | ||||
void LADSPAPluginGUI::UpdatePortDisplay(int n, float v) | void LADSPAPluginGUI::UpdatePortDisplay(int n, float v) | ||||
{ | { | ||||
if (!m_UpdateInputs->value()) return; | if (!m_UpdateInputs->value()) return; | ||||
char temp[256]; | char temp[256]; | ||||
sprintf(temp,"%f",v); | |||||
sprintf(temp,"%f",v); | |||||
m_PortOutput[n]->value(temp); | m_PortOutput[n]->value(temp); | ||||
} | } | ||||
void LADSPAPluginGUI::SetMinMax(int n, float min, float max, bool clamp) | void LADSPAPluginGUI::SetMinMax(int n, float min, float max, bool clamp) | ||||
{ | { | ||||
char temp[256]; | char temp[256]; | ||||
sprintf(temp,"%f",min); | |||||
sprintf(temp,"%f",min); | |||||
m_PortMin[n]->value(temp); | m_PortMin[n]->value(temp); | ||||
sprintf(temp,"%f",max); | |||||
sprintf(temp,"%f",max); | |||||
m_PortMax[n]->value(temp); | m_PortMax[n]->value(temp); | ||||
sprintf(temp, "%d",clamp); | sprintf(temp, "%d",clamp); | ||||
@@ -144,7 +167,7 @@ void LADSPAPluginGUI::SetMaker(const char *s) | |||||
{ | { | ||||
m_Maker->label(s); | m_Maker->label(s); | ||||
} | } | ||||
void LADSPAPluginGUI::ClearPortInfo() | void LADSPAPluginGUI::ClearPortInfo() | ||||
{ | { | ||||
for (vector<Fl_Group*>::iterator i=m_PackVec.begin(); | for (vector<Fl_Group*>::iterator i=m_PackVec.begin(); | ||||
@@ -152,12 +175,12 @@ void LADSPAPluginGUI::ClearPortInfo() | |||||
{ | { | ||||
m_InputPack->remove((*i)); | m_InputPack->remove((*i)); | ||||
} | } | ||||
m_InputScroll->remove(m_InputPack); | |||||
m_InputScroll->remove(m_InputPack); | |||||
delete m_InputPack; | delete m_InputPack; | ||||
m_InputPack = new Fl_Pack(x()+300,y()+85,300,100,""); | m_InputPack = new Fl_Pack(x()+300,y()+85,300,100,""); | ||||
m_InputScroll->add(m_InputPack); | |||||
m_InputScroll->add(m_InputPack); | |||||
m_PortOutput.clear(); | m_PortOutput.clear(); | ||||
m_PackVec.clear(); | m_PackVec.clear(); | ||||
m_PortMin.clear(); | m_PortMin.clear(); | ||||
@@ -166,24 +189,24 @@ void LADSPAPluginGUI::ClearPortInfo() | |||||
} | } | ||||
void LADSPAPluginGUI::AddPortInfo(const char *Info) | void LADSPAPluginGUI::AddPortInfo(const char *Info) | ||||
{ | |||||
{ | |||||
Fl_Group* NewGroup = new Fl_Group(0,85,150,15,""); | Fl_Group* NewGroup = new Fl_Group(0,85,150,15,""); | ||||
NewGroup->box(FL_FLAT_BOX); | NewGroup->box(FL_FLAT_BOX); | ||||
m_InputPack->add(NewGroup); | m_InputPack->add(NewGroup); | ||||
m_PackVec.push_back(NewGroup); | m_PackVec.push_back(NewGroup); | ||||
Fl_Box* NewText = new Fl_Box(100,85,80,15,""); | Fl_Box* NewText = new Fl_Box(100,85,80,15,""); | ||||
NewText->label(Info); | NewText->label(Info); | ||||
NewText->labelsize(8); | NewText->labelsize(8); | ||||
NewText->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); | NewText->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE); | ||||
NewGroup->add(NewText); | NewGroup->add(NewText); | ||||
Fl_Output* NewOutput = new Fl_Output(5,85,20,15,""); | Fl_Output* NewOutput = new Fl_Output(5,85,20,15,""); | ||||
NewOutput->value(0); | NewOutput->value(0); | ||||
NewOutput->textsize(10); | NewOutput->textsize(10); | ||||
NewGroup->add(NewOutput); | NewGroup->add(NewOutput); | ||||
m_PortOutput.push_back(NewOutput); | m_PortOutput.push_back(NewOutput); | ||||
Fl_Input* NewInput = new Fl_Input(26,85,20,15,""); | Fl_Input* NewInput = new Fl_Input(26,85,20,15,""); | ||||
NewInput->value(0); | NewInput->value(0); | ||||
NewInput->textsize(10); | NewInput->textsize(10); | ||||
@@ -195,7 +218,7 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info) | |||||
NewInput->textsize(10); | NewInput->textsize(10); | ||||
NewGroup->add(NewInput); | NewGroup->add(NewInput); | ||||
m_PortMax.push_back(NewInput); | m_PortMax.push_back(NewInput); | ||||
Fl_Check_Button* NewCheckButton = new Fl_Check_Button(80,85,15,15,""); | Fl_Check_Button* NewCheckButton = new Fl_Check_Button(80,85,15,15,""); | ||||
NewCheckButton->value(0); | NewCheckButton->value(0); | ||||
NewGroup->add(NewCheckButton); | NewGroup->add(NewCheckButton); | ||||
@@ -204,63 +227,92 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info) | |||||
NewGroup->redraw(); | NewGroup->redraw(); | ||||
m_InputPack->redraw(); | m_InputPack->redraw(); | ||||
m_InputScroll->redraw(); | m_InputScroll->redraw(); | ||||
redraw(); | redraw(); | ||||
} | } | ||||
void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) | void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) | ||||
{ | { | ||||
LADSPAPlugin* Plugin = (LADSPAPlugin*)o; | LADSPAPlugin* Plugin = (LADSPAPlugin*)o; | ||||
m_OutputGain->value(Plugin->GetGain()); | m_OutputGain->value(Plugin->GetGain()); | ||||
} | } | ||||
inline void LADSPAPluginGUI::cb_Gain_i(Fl_Knob* o, void* v) | |||||
{ m_GUICH->Set("Gain",(float)(o->value())); } | |||||
void LADSPAPluginGUI::cb_Gain(Fl_Knob* o, void* v) | |||||
{ ((LADSPAPluginGUI*)(o->parent()))->cb_Gain_i(o,v); } | |||||
inline void LADSPAPluginGUI::cb_Gain_i(Fl_Knob* o, void* v) | |||||
{ | |||||
m_GUICH->Set("Gain",(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_Hold_Browser* o) | |||||
{ | |||||
inline void LADSPAPluginGUI::cb_Select_i(Fl_Hold_Browser* o) | |||||
{ | |||||
m_Filename=PluginList[o->value()-1].Filename; | m_Filename=PluginList[o->value()-1].Filename; | ||||
m_Label=PluginList[o->value()-1].Label; | m_Label=PluginList[o->value()-1].Label; | ||||
m_GUICH->Set("Num",o->value()-1); | |||||
m_GUICH->Set("PluginIndex",o->value()-1); | |||||
m_GUICH->SetCommand(LADSPAPlugin::UPDATEPLUGIN); | m_GUICH->SetCommand(LADSPAPlugin::UPDATEPLUGIN); | ||||
// Wait until next update for data to be set up for new plugin | |||||
m_GUICH->Wait(); | |||||
// Now get the new values to populate GUI controls | |||||
m_GUICH->GetData("Name", m_NameString); | |||||
m_GUICH->GetData("Maker", m_MakerString); | |||||
m_GUICH->GetData("InputPortCount", &m_InputPortCount); | |||||
m_GUICH->GetData("InputPortMin", m_InputPortMin); | |||||
m_GUICH->GetData("InputPortMax", m_InputPortMax); | |||||
m_GUICH->GetData("InputPortClamp", m_InputPortClamp); | |||||
m_GUICH->GetData("InputPortNames", m_InputPortNames); | |||||
SetName((const char *)m_NameString); | |||||
SetMaker((const char *)m_MakerString); | |||||
// Clear out port info, and refresh | |||||
ClearPortInfo(); | |||||
for (unsigned long n = 0; n < m_InputPortCount; n++) { | |||||
AddPortInfo((const char *)(m_InputPortNames + n * 256)); | |||||
SetMinMax(n, m_InputPortMin[n], m_InputPortMax[n], m_InputPortClamp[n]); | |||||
} | |||||
} | |||||
void LADSPAPluginGUI::cb_Select(Fl_Hold_Browser* o) | |||||
{ | |||||
((LADSPAPluginGUI*)(o->parent()))->cb_Select_i(o); | |||||
} | } | ||||
void LADSPAPluginGUI::cb_Select(Fl_Hold_Browser* o) | |||||
{ ((LADSPAPluginGUI*)(o->parent()))->cb_Select_i(o);} | |||||
inline void LADSPAPluginGUI::cb_MinMax_i(Fl_Button* o, void* v) | |||||
{ | |||||
inline void LADSPAPluginGUI::cb_MinMax_i(Fl_Button* o, void* v) | |||||
{ | |||||
int n=0; | int n=0; | ||||
for (vector<Fl_Input*>::iterator i=m_PortMin.begin(); | for (vector<Fl_Input*>::iterator i=m_PortMin.begin(); | ||||
i!=m_PortMin.end(); i++) | |||||
i!=m_PortMin.end(); i++) | |||||
{ | { | ||||
m_GUICH->Set("Min",(float)(n,atof((*i)->value()))); | |||||
n++; | n++; | ||||
} | } | ||||
n=0; | n=0; | ||||
for (vector<Fl_Input*>::iterator i=m_PortMax.begin(); | for (vector<Fl_Input*>::iterator i=m_PortMax.begin(); | ||||
i!=m_PortMax.end(); i++) | |||||
i!=m_PortMax.end(); i++) | |||||
{ | { | ||||
m_GUICH->Set("Max",(n,atof((*i)->value()))); | |||||
n++; | n++; | ||||
} | } | ||||
n=0; | n=0; | ||||
for (vector<Fl_Check_Button*>::iterator i=m_PortClamp.begin(); | for (vector<Fl_Check_Button*>::iterator i=m_PortClamp.begin(); | ||||
i!=m_PortClamp.end(); i++) | i!=m_PortClamp.end(); i++) | ||||
{ | { | ||||
m_GUICH->Set("Clamp",(bool)(n,(*i)->value())); | |||||
n++; | n++; | ||||
} | } | ||||
} | } | ||||
void LADSPAPluginGUI::cb_MinMax(Fl_Button* o, void* v) | |||||
{ ((LADSPAPluginGUI*)(o->parent()))->cb_MinMax_i(o,v);} | |||||
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) | |||||
{ | |||||
inline void LADSPAPluginGUI::cb_PowerAmp_i(Fl_Button* o, void* v) | |||||
{ | |||||
m_GUICH->Set("Amped",(bool)(o->value())); | m_GUICH->Set("Amped",(bool)(o->value())); | ||||
} | } | ||||
void LADSPAPluginGUI::cb_PowerAmp(Fl_Button* o, void* v) | |||||
{ ((LADSPAPluginGUI*)(o->parent()))->cb_PowerAmp_i(o,v);} | |||||
void LADSPAPluginGUI::cb_PowerAmp(Fl_Button* o, void* v) | |||||
{ | |||||
((LADSPAPluginGUI*)(o->parent()))->cb_PowerAmp_i(o,v); | |||||
} |
@@ -39,8 +39,8 @@ | |||||
#ifndef LADSPAGUI | #ifndef LADSPAGUI | ||||
#define LADSPAGUI | #define LADSPAGUI | ||||
#include <stdio.h> | |||||
#include <math.h> | |||||
#include <cstdio> | |||||
#include <cmath> | |||||
#include <dlfcn.h> | #include <dlfcn.h> | ||||
#include <vector> | #include <vector> | ||||
@@ -65,35 +65,35 @@ public: | |||||
string GetLabel() { return m_Label; } | string GetLabel() { return m_Label; } | ||||
void SetFilename(string s) { m_Filename=s; } | void SetFilename(string s) { m_Filename=s; } | ||||
void SetLabel(string s) { m_Label=s; } | void SetLabel(string s) { m_Label=s; } | ||||
private: | private: | ||||
LPluginInfo m_CurrentPlugin; | LPluginInfo m_CurrentPlugin; | ||||
Fl_Scroll *m_InputScroll; | |||||
Fl_Pack *m_InputPack; | |||||
Fl_Hold_Browser *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; | |||||
vector<Fl_Output*> m_PortOutput; | |||||
vector<Fl_Input*> m_PortMin; | |||||
vector<Fl_Input*> m_PortMax; | |||||
Fl_Scroll *m_InputScroll; | |||||
Fl_Pack *m_InputPack; | |||||
Fl_Hold_Browser *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; | |||||
vector<Fl_Output*> m_PortOutput; | |||||
vector<Fl_Input*> m_PortMin; | |||||
vector<Fl_Input*> m_PortMax; | |||||
vector<Fl_Check_Button*> m_PortClamp; | vector<Fl_Check_Button*> m_PortClamp; | ||||
vector<LPluginInfo> PluginList; | vector<LPluginInfo> PluginList; | ||||
// this is needed as fltk seems to crash if you delete | // this is needed as fltk seems to crash if you delete | ||||
// the pack, is won't delete the children properly??? | // the pack, is won't delete the children properly??? | ||||
vector<Fl_Group*> m_PackVec; | vector<Fl_Group*> m_PackVec; | ||||
int inited; | int inited; | ||||
string m_Filename; | string m_Filename; | ||||
string m_Label; | string m_Label; | ||||
inline void cb_Select_i(Fl_Hold_Browser* o); | inline void cb_Select_i(Fl_Hold_Browser* o); | ||||
static void cb_Select(Fl_Hold_Browser* o); | static void cb_Select(Fl_Hold_Browser* o); | ||||
inline void cb_Gain_i(Fl_Knob* o, void* v); | inline void cb_Gain_i(Fl_Knob* o, void* v); | ||||
@@ -103,6 +103,19 @@ private: | |||||
inline void cb_PowerAmp_i(Fl_Button* o, void* v); | inline void cb_PowerAmp_i(Fl_Button* o, void* v); | ||||
static void cb_PowerAmp(Fl_Button* o, void* v); | static void cb_PowerAmp(Fl_Button* o, void* v); | ||||
// This lot is for copying plugin info from the audio thread | |||||
// to the GUI thread, via ChannelHandler | |||||
char *m_NameString; // Plugin Name | |||||
char *m_MakerString; // Plugin Maker; | |||||
unsigned long m_InputPortCountMax; // Maximum number of input ports | |||||
// Corresponds to input port count of one | |||||
// (or more) plugins found | |||||
unsigned long m_InputPortCount; // Number of input ports in current plugin | |||||
float *m_InputPortMin; // Input port range minima | |||||
float *m_InputPortMax; // Input port range maxima | |||||
bool *m_InputPortClamp; // Input port clamp state | |||||
char *m_InputPortNames; // Input port names | |||||
}; | }; | ||||