/* default.c Free software by Richard W.E. Furse. Do with as you will. No warranty. */ /*****************************************************************************/ #include /*****************************************************************************/ #include "ladspa.h" #include "utils.h" /*****************************************************************************/ int getLADSPADefault(const LADSPA_PortRangeHint * psPortRangeHint, const unsigned long lSampleRate, LADSPA_Data * pfResult) { int iHintDescriptor; iHintDescriptor = psPortRangeHint->HintDescriptor & LADSPA_HINT_DEFAULT_MASK; switch (iHintDescriptor & LADSPA_HINT_DEFAULT_MASK) { case LADSPA_HINT_DEFAULT_NONE: return -1; case LADSPA_HINT_DEFAULT_MINIMUM: *pfResult = psPortRangeHint->LowerBound; if (LADSPA_IS_HINT_SAMPLE_RATE(psPortRangeHint->HintDescriptor)) *pfResult *= lSampleRate; return 0; case LADSPA_HINT_DEFAULT_LOW: if (LADSPA_IS_HINT_LOGARITHMIC(iHintDescriptor)) { *pfResult = exp(log(psPortRangeHint->LowerBound) * 0.75 + log(psPortRangeHint->UpperBound) * 0.25); } else { *pfResult = (psPortRangeHint->LowerBound * 0.75 + psPortRangeHint->UpperBound * 0.25); } if (LADSPA_IS_HINT_SAMPLE_RATE(psPortRangeHint->HintDescriptor)) *pfResult *= lSampleRate; return 0; case LADSPA_HINT_DEFAULT_MIDDLE: if (LADSPA_IS_HINT_LOGARITHMIC(iHintDescriptor)) { *pfResult = sqrt(psPortRangeHint->LowerBound * psPortRangeHint->UpperBound); } else { *pfResult = 0.5 * (psPortRangeHint->LowerBound + psPortRangeHint->UpperBound); } if (LADSPA_IS_HINT_SAMPLE_RATE(psPortRangeHint->HintDescriptor)) *pfResult *= lSampleRate; return 0; case LADSPA_HINT_DEFAULT_HIGH: if (LADSPA_IS_HINT_LOGARITHMIC(iHintDescriptor)) { *pfResult = exp(log(psPortRangeHint->LowerBound) * 0.25 + log(psPortRangeHint->UpperBound) * 0.75); } else { *pfResult = (psPortRangeHint->LowerBound * 0.25 + psPortRangeHint->UpperBound * 0.75); } if (LADSPA_IS_HINT_SAMPLE_RATE(psPortRangeHint->HintDescriptor)) *pfResult *= lSampleRate; return 0; case LADSPA_HINT_DEFAULT_MAXIMUM: *pfResult = psPortRangeHint->UpperBound; if (LADSPA_IS_HINT_SAMPLE_RATE(psPortRangeHint->HintDescriptor)) *pfResult *= lSampleRate; return 0; case LADSPA_HINT_DEFAULT_0: *pfResult = 0; return 0; case LADSPA_HINT_DEFAULT_1: *pfResult = 1; return 0; case LADSPA_HINT_DEFAULT_100: *pfResult = 100; return 0; case LADSPA_HINT_DEFAULT_440: *pfResult = 440; return 0; } /* We don't recognise this default flag. It's probably from a more recent version of LADSPA. */ return -1; } /*****************************************************************************/ /* EOF */