Browse Source

Now uses LADSPA default hints if specified

master
waxfrenzy 22 years ago
parent
commit
7e990e8a5a
1 changed files with 51 additions and 3 deletions
  1. +51
    -3
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C

+ 51
- 3
SpiralSound/Plugins/LADSPAPlugin/LADSPAPlugin.C View File

@@ -18,6 +18,7 @@
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>

#include "SpiralIcon.xpm"
#include "LADSPAPlugin.h"
@@ -545,7 +546,7 @@ bool LADSPAPlugin::UpdatePlugin(unsigned long UniqueID, bool PortClampReset)

for (int n=0; n<m_PluginInfo.NumInputs; n++)
{
float Max=1.0f, Min=-1.0f, defolt=0.0f;
float Max=1.0f, Min=-1.0f, Default=0.0f;
int Port=m_PortID[n];

// Get the bounding hints for the port
@@ -569,8 +570,55 @@ bool LADSPAPlugin::UpdatePlugin(unsigned long UniqueID, bool PortClampReset)

#ifdef LADSPA_VERSION
// We've got a version of the header that supports port defaults

if (LADSPA_IS_HINT_HAS_DEFAULT(HintDesc)) {
// LADSPA_HINT_DEFAULT_0 is assumed anyway, so we don't check for it
if (LADSPA_IS_HINT_DEFAULT_1(HintDesc)) {
Default = 1.0f;
} else if (LADSPA_IS_HINT_DEFAULT_100(HintDesc)) {
Default = 100.0f;
} else if (LADSPA_IS_HINT_DEFAULT_440(HintDesc)) {
Default = 440.0f;
} else {
// These hints may be affected by SAMPLERATE, LOGARITHMIC and INTEGER
if (LADSPA_IS_HINT_DEFAULT_MINIMUM(HintDesc) &&
LADSPA_IS_HINT_BOUNDED_BELOW(HintDesc)) {
Default=PlugDesc->PortRangeHints[Port].LowerBound;
} else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(HintDesc) &&
LADSPA_IS_HINT_BOUNDED_ABOVE(HintDesc)) {
Default=PlugDesc->PortRangeHints[Port].LowerBound;
} else if (LADSPA_IS_HINT_BOUNDED_BELOW(HintDesc) &&
LADSPA_IS_HINT_BOUNDED_ABOVE(HintDesc)) {
// These hints require both upper and lower bounds
float lp = 0.0f, up = 0.0f;
float min = PlugDesc->PortRangeHints[Port].LowerBound;
float max = PlugDesc->PortRangeHints[Port].UpperBound;
if (LADSPA_IS_HINT_DEFAULT_LOW(HintDesc)) {
lp = 0.75f;
up = 0.25f;
} else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(HintDesc)) {
lp = 0.5f;
up = 0.5f;
} else if (LADSPA_IS_HINT_DEFAULT_HIGH(HintDesc)) {
lp = 0.25f;
up = 0.75f;
}

if (LADSPA_IS_HINT_LOGARITHMIC(HintDesc)) {
Default = exp(log(min) * lp + log(max) * up);
} else {
Default = min * lp + max * up;
}
}
if (LADSPA_IS_HINT_SAMPLE_RATE(HintDesc)) {
Default *= m_HostInfo->SAMPLERATE;
}
if (LADSPA_IS_HINT_INTEGER(HintDesc)) {
Default = floorf(Default);
}
}
}
#else
// No LADSPA_VERSION - implies no defaults
#warning ************************************
#warning Your LADSPA header is out of date!
#warning Please get the latest sdk from
@@ -582,7 +630,7 @@ bool LADSPAPlugin::UpdatePlugin(unsigned long UniqueID, bool PortClampReset)
m_PortMin.push_back(Min);
m_PortMax.push_back(Max);
m_PortClamp.push_back(true);
m_PortDefault.push_back(defolt);
m_PortDefault.push_back(Default);
}
}



Loading…
Cancel
Save