--- linuxsampler/trunk/src/engines/gig/Voice.h 2004/12/29 01:14:15 330 +++ linuxsampler/trunk/src/engines/gig/Voice.h 2005/01/23 21:24:16 348 @@ -163,11 +163,14 @@ void Synthesize(uint Samples, sample_t* pSrc, uint Skip); inline float CrossfadeAttenuation(uint8_t& CrossfadeControllerValue) { - return (CrossfadeControllerValue <= pDimRgn->Crossfade.in_start) ? 0.0f - : (CrossfadeControllerValue < pDimRgn->Crossfade.in_end) ? float(CrossfadeControllerValue - pDimRgn->Crossfade.in_start) / float(pDimRgn->Crossfade.in_end - pDimRgn->Crossfade.in_start) - : (CrossfadeControllerValue <= pDimRgn->Crossfade.out_start) ? 1.0f - : (CrossfadeControllerValue < pDimRgn->Crossfade.out_end) ? float(CrossfadeControllerValue - pDimRgn->Crossfade.out_start) / float(pDimRgn->Crossfade.out_end - pDimRgn->Crossfade.out_start) - : 0.0f; + float att = (!pDimRgn->Crossfade.out_end) ? CrossfadeControllerValue / 127.0f /* 0,0,0,0 means no crossfade defined */ + : (CrossfadeControllerValue < pDimRgn->Crossfade.in_end) ? + ((CrossfadeControllerValue <= pDimRgn->Crossfade.in_start) ? 0.0f + : float(CrossfadeControllerValue - pDimRgn->Crossfade.in_start) / float(pDimRgn->Crossfade.in_end - pDimRgn->Crossfade.in_start)) + : (CrossfadeControllerValue <= pDimRgn->Crossfade.out_start) ? 1.0f + : (CrossfadeControllerValue < pDimRgn->Crossfade.out_end) ? float(pDimRgn->Crossfade.out_end - CrossfadeControllerValue) / float(pDimRgn->Crossfade.out_end - pDimRgn->Crossfade.out_start) + : 0.0f; + return pDimRgn->InvertAttenuationController ? 1 - att : att; } inline float Constrain(float ValueToCheck, float Min, float Max) {