diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAInfo.C b/SpiralSound/Plugins/LADSPAPlugin/LADSPAInfo.C index 747b358..40034c0 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAInfo.C +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAInfo.C @@ -115,7 +115,6 @@ LADSPAInfo::RescanPlugins(void) stringstream s; s << n; i->Name = name + " (" + s.str() + ")"; - cerr << " " << n << endl; n++; i++; } diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C index 93ef58a..97a84b4 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C @@ -52,7 +52,7 @@ LADSPAPlugin::LADSPAPlugin() ClearPlugin(); - m_Version=5; + m_Version=6; m_PluginInfo.Name="LADSPA"; m_PluginInfo.Width=500; @@ -76,15 +76,21 @@ LADSPAPlugin::LADSPAPlugin() m_OutData.InputPortNames = (char *)malloc(256 * m_MaxInputPortCount); m_OutData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_MaxInputPortCount); m_OutData.InputPortValues = (PortValues *)calloc(m_MaxInputPortCount, sizeof(PortValues)); - m_InData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_MaxInputPortCount); + m_OutData.InputPortDefaults = (float *)calloc(m_MaxInputPortCount, sizeof(float)); + m_InData.InputPortSettings = (PortSettings *)calloc(m_MaxInputPortCount, sizeof(PortSettings)); + m_InData.InputPortDefaults = (float *)calloc(m_MaxInputPortCount, sizeof(float)); if (m_OutData.InputPortNames && + m_OutData.InputPortDefaults && m_OutData.InputPortSettings && - m_InData.InputPortSettings) { + m_InData.InputPortSettings && + m_InData.InputPortDefaults) { 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(PortValues) * m_MaxInputPortCount); + m_AudioCH->RegisterData("GetInputPortDefaults", ChannelHandler::OUTPUT, m_OutData.InputPortDefaults, sizeof(float) * m_MaxInputPortCount); m_AudioCH->RegisterData("SetInputPortSettings", ChannelHandler::INPUT, m_InData.InputPortSettings, sizeof(PortSettings) * m_MaxInputPortCount); + m_AudioCH->RegisterData("SetInputPortDefaults", ChannelHandler::INPUT, m_InData.InputPortDefaults, sizeof(float) * m_MaxInputPortCount); } else { cerr<<"Memory allocation error"<BUFSIZE; i++) { m_LADSPABufVec[n][i]=m_PortDefault[n]; } - m_OutData.InputPortValues[n].Connected = false; + if (m_OutData.InputPortValues[n].Connected) { + m_OutData.InputPortValues[n].Connected = false; + m_PortDefault[n] = m_OutData.InputPortValues[n].Value; + } } // Copy values into OutData value buffer for display in GUI m_OutData.InputPortValues[n].Value = m_LADSPABufVec[n][0]; + // Ditto for default, which may have been set to value + m_OutData.InputPortDefaults[n] = m_PortDefault[n]; } // run plugin @@ -386,6 +398,7 @@ void LADSPAPlugin::StreamIn(istream &s) ClearPlugin(); } } + break; case 5: { ClearPlugin(); @@ -714,6 +727,7 @@ void LADSPAPlugin::ClearPlugin(void) PlugDesc = NULL; } + m_UniqueID = 0; m_PluginIndex = 0; m_InputPortCount = 0; strncpy(m_Name, "None\0", 5); @@ -881,7 +895,7 @@ void LADSPAPlugin::SetGUIExports(void) m_OutData.InputPortSettings[n].Min = m_PortMin[n]; m_OutData.InputPortSettings[n].Max = m_PortMax[n]; m_OutData.InputPortSettings[n].Clamp = m_PortClamp[n]; - m_OutData.InputPortSettings[n].Default = m_PortDefault[n]; + m_OutData.InputPortDefaults[n] = m_PortDefault[n]; } } @@ -891,6 +905,6 @@ void LADSPAPlugin::SetPortSettings(void) m_PortMin[n] = m_InData.InputPortSettings[n].Min; m_PortMax[n] = m_InData.InputPortSettings[n].Max; m_PortClamp[n] = m_InData.InputPortSettings[n].Clamp; - m_PortDefault[n] = m_InData.InputPortSettings[n].Default; + m_PortDefault[n] = m_InData.InputPortDefaults[n]; } } diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h index 46c4568..a2c5091 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.h @@ -32,7 +32,6 @@ struct PortSettings float Min; float Max; bool Clamp; - float Default; }; struct PortValues { @@ -66,9 +65,12 @@ public: settings.Min = m_PortMin[p]; settings.Max = m_PortMax[p]; settings.Clamp = m_PortClamp[p]; - settings.Default = m_PortDefault[p]; return settings; } + float GetPortDefault(unsigned long p) + { + return m_PortDefault[p]; + } enum GUICommands{NONE,SETPORTSETTINGS,SELECTPLUGIN,CLEARPLUGIN}; @@ -113,6 +115,7 @@ private: char *InputPortNames; PortSettings *InputPortSettings; PortValues *InputPortValues; + float *InputPortDefaults; }; // Data received from GUI @@ -120,6 +123,7 @@ private: { unsigned long PluginIndex; PortSettings *InputPortSettings; + float *InputPortDefaults; }; OutputChannelData m_OutData; diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C index 24a8192..2dcf798 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C @@ -51,8 +51,10 @@ SpiralPluginGUI(w,h,o,ch) m_InData.InputPortNames = (char *)malloc(256 * m_InData.MaxInputPortCount); m_InData.InputPortSettings = (PortSettings *)malloc(sizeof(PortSettings) * m_InData.MaxInputPortCount); m_InData.InputPortValues = (PortValues *)calloc(m_InData.MaxInputPortCount, sizeof(PortValues)); + m_InData.InputPortDefaults = (float *)calloc(m_InData.MaxInputPortCount, sizeof(float)); - if (!(m_InData.InputPortNames && m_InData.InputPortSettings)) { + if (!(m_InData.InputPortNames && m_InData.InputPortSettings && + m_InData.InputPortValues && m_InData.InputPortDefaults)) { cerr<<"Memory allocation error\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",pv.Value); - m_PortOutput[n]->value(temp); -} - void LADSPAPluginGUI::SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt) { char temp[256]; @@ -257,6 +238,40 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info) m_InputScroll->redraw(); } +void LADSPAPluginGUI::UpdatePortDisplay(int n, PortValues pv, float defolt) +{ + char temp[256]; + +// Need to show that a connection is present +// regardless of Refresh being set + if (!(pv.Connected && m_PortDefault[n]->readonly())) { + if (pv.Connected) { + // Disable + m_PortDefault[n]->readonly(1); + m_PortDefault[n]->color(FL_BACKGROUND_COLOR); + + sprintf(temp,"%.4f",defolt); + m_PortDefault[n]->value(temp); + } 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; + + sprintf(temp,"%.4f",pv.Value); + m_PortOutput[n]->value(temp); + + if (pv.Connected) { + sprintf(temp,"%.4f",defolt); + m_PortDefault[n]->value(temp); + } +} + void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) { LADSPAPlugin* Plugin = (LADSPAPlugin*)o; @@ -266,12 +281,14 @@ void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o) unsigned long n = Plugin->GetInputPortCount(); const char *name; PortSettings settings; + float defolt; for (unsigned long p = 0; p < n; p++) { name = Plugin->GetPortName(p); settings = Plugin->GetPortSettings(p); + defolt = Plugin->GetPortDefault(p); AddPortInfo(name); - SetPortSettings(p, settings.Min, settings.Max, settings.Clamp, settings.Default); + SetPortSettings(p, settings.Min, settings.Max, settings.Clamp, defolt); } } @@ -280,11 +297,12 @@ void LADSPAPluginGUI::Update(void) m_GUICH->GetData("GetPluginIndex", &(m_InData.PluginIndex)); m_GUICH->GetData("GetInputPortCount", &(m_InData.InputPortCount)); m_GUICH->GetData("GetInputPortValues", m_InData.InputPortValues); + m_GUICH->GetData("GetInputPortDefaults", m_InData.InputPortDefaults); m_Browser->value(m_InData.PluginIndex); for (unsigned long n=0; n < m_InData.InputPortCount; n++) { - UpdatePortDisplay(n, m_InData.InputPortValues[n]); + UpdatePortDisplay(n, m_InData.InputPortValues[n], m_InData.InputPortDefaults[n]); } } @@ -308,6 +326,7 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o) m_GUICH->GetData("GetInputPortCount", &(m_InData.InputPortCount)); m_GUICH->GetData("GetInputPortNames", m_InData.InputPortNames); m_GUICH->GetData("GetInputPortSettings", m_InData.InputPortSettings); + m_GUICH->GetData("GetInputPortDefaults", m_InData.InputPortDefaults); SetName((const char *)m_InData.Name); SetMaker((const char *)m_InData.Maker); @@ -320,7 +339,7 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o) SetPortSettings(n, m_InData.InputPortSettings[n].Min, m_InData.InputPortSettings[n].Max, m_InData.InputPortSettings[n].Clamp, - m_InData.InputPortSettings[n].Default); + m_InData.InputPortDefaults[n]); } redraw(); @@ -357,11 +376,12 @@ inline void LADSPAPluginGUI::cb_PortSettings_i(Fl_Button* o, void* v) for (vector::iterator i=m_PortDefault.begin(); i!=m_PortDefault.end(); i++) { - m_InData.InputPortSettings[n].Default = atof((*i)->value()); + m_InData.InputPortDefaults[n] = atof((*i)->value()); n++; } m_GUICH->SetData("SetInputPortSettings", m_InData.InputPortSettings); + m_GUICH->SetData("SetInputPortDefaults", m_InData.InputPortDefaults); m_GUICH->SetCommand(LADSPAPlugin::SETPORTSETTINGS); } void LADSPAPluginGUI::cb_PortSettings(Fl_Button* o, void* v) diff --git a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h index 3189960..035b36e 100644 --- a/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h +++ b/SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h @@ -61,7 +61,7 @@ public: void ClearPortInfo(); void AddPortInfo(const char *Info); - void UpdatePortDisplay(int n, PortValues pv); + void UpdatePortDisplay(int n, PortValues pv, float defolt); void SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt); private: @@ -105,6 +105,7 @@ private: char *InputPortNames; PortSettings *InputPortSettings; PortValues *InputPortValues; + float *InputPortDefaults; }; InChannelData m_InData;