Mercurial > hg > dmlib
diff jssmix.c @ 158:255da2a698fe
Improve loop handling in the mixer.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 06 Oct 2012 05:30:22 +0300 |
parents | 0c9438a2c72a |
children | fe0c7ae05776 |
line wrap: on
line diff
--- a/jssmix.c Sat Oct 06 05:19:29 2012 +0300 +++ b/jssmix.c Sat Oct 06 05:30:22 2012 +0300 @@ -252,8 +252,9 @@ // Bi-directional loop if (FP_GETH(chn->chPos) >= chn->chLoopE) { - FP_SETH(chn->chPos, chn->chLoopE - 1); - FP_SETL(chn->chPos, 0); + DMFixedPoint end; + FP_SETHL(end, chn->chLoopE + chn->chLoopE, 0); + FP_SUB_R(chn->chPos, end, chn->chPos); chn->chDirection = FALSE; } } @@ -262,8 +263,11 @@ // Normal forward loop if (FP_GETH(chn->chPos) >= chn->chLoopE) { - FP_SETH(chn->chPos, chn->chLoopS /* + (FP_GETH(chn->chPos) - chn->chLoopE) */); - FP_SETL(chn->chPos, 0); + DMFixedPoint diff, end; + FP_SETHL(end, chn->chLoopE, 0); + FP_SUB_R(diff, chn->chPos, end); + FP_SETHL(chn->chPos, chn->chLoopS, 0); + FP_ADD(chn->chPos, diff); } } } @@ -288,8 +292,9 @@ // Bi-directional loop if (FP_GETH(chn->chPos) <= chn->chLoopS) { - FP_SETH(chn->chPos, chn->chLoopS); - FP_SETL(chn->chPos, 0); + DMFixedPoint start; + FP_SETHL(start, chn->chLoopS + chn->chLoopS, 0); + FP_SUB_R(chn->chPos, start, chn->chPos); chn->chDirection = TRUE; } } @@ -298,8 +303,9 @@ // Normal forward loop if (FP_GETH(chn->chPos) <= chn->chLoopS) { - FP_SETH(chn->chPos, chn->chLoopE - 1); - FP_SETL(chn->chPos, 0); + DMFixedPoint diff; + FP_SETHL(diff, chn->chLoopE - chn->chLoopS, 0); + FP_ADD(chn->chPos, diff); } } }