From eb27d61197f80d735ee0f0f1508da94ed7d843a8 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 21 May 2024 17:43:10 -0500 Subject: [PATCH] macroInt: fix rounding error when bottom>top issue #1891 --- src/engine/macroInt.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/engine/macroInt.cpp b/src/engine/macroInt.cpp index 621eab424..97865cc93 100644 --- a/src/engine/macroInt.cpp +++ b/src/engine/macroInt.cpp @@ -143,7 +143,11 @@ void DivMacroStruct::doMacro(DivInstrumentMacro& source, bool released, bool tic if (!linger) has=false; break; } - val=ADSR_LOW+((pos+(ADSR_HIGH-ADSR_LOW)*pos)>>8); + if (ADSR_HIGH>ADSR_LOW) { + val=ADSR_LOW+((pos+(ADSR_HIGH-ADSR_LOW)*pos)>>8); + } else { + val=ADSR_LOW+(((ADSR_HIGH-ADSR_LOW)*pos-pos)>>8); + } } if (type==2) { // LFO lfoPos+=LFO_SPEED; @@ -161,7 +165,11 @@ void DivMacroStruct::doMacro(DivInstrumentMacro& source, bool released, bool tic lfoOut=(lfoPos&512)?255:0; break; } - val=ADSR_LOW+((lfoOut+(ADSR_HIGH-ADSR_LOW)*lfoOut)>>8); + if (ADSR_HIGH>ADSR_LOW) { + val=ADSR_LOW+((lfoOut+(ADSR_HIGH-ADSR_LOW)*lfoOut)>>8); + } else { + val=ADSR_LOW+(((ADSR_HIGH-ADSR_LOW)*lfoOut-lfoOut)>>8); + } } } }