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