summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStepan Moskovchenko <stevenm@rockbox.org>2007-09-29 02:20:49 +0000
committerStepan Moskovchenko <stevenm@rockbox.org>2007-09-29 02:20:49 +0000
commitd1e306077ff111e148400a0202b548ce9ed3d7bc (patch)
tree33b48f84b9766c5c594377d202ebd94cf2817925
parent23a89b06ab7ecff2086fa7a3862f66c066fef752 (diff)
downloadrockbox-d1e306077ff111e148400a0202b548ce9ed3d7bc.zip
rockbox-d1e306077ff111e148400a0202b548ce9ed3d7bc.tar.gz
rockbox-d1e306077ff111e148400a0202b548ce9ed3d7bc.tar.bz2
rockbox-d1e306077ff111e148400a0202b548ce9ed3d7bc.tar.xz
MIDI: Fix two year old loop bug that caused distortion on some instruments. I been looking for this one
for at least 6 months. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14896 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/midi/synth.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/apps/plugins/midi/synth.c b/apps/plugins/midi/synth.c
index d053ebf..d6fda78 100644
--- a/apps/plugins/midi/synth.c
+++ b/apps/plugins/midi/synth.c
@@ -297,13 +297,13 @@ signed short int synthVoice(struct SynthObject * so)
{
if(wf->mode & LOOP_REVERSE)
{
- so->cp = (wf->endLoop)<<FRACTSIZE;
- cpShifted = wf->endLoop;
+ cpShifted = wf->endLoop-(wf->startLoop-cpShifted);
+ so->cp = (cpShifted)<<FRACTSIZE;
s2=getSample((cpShifted), wf);
}
else
{
- so->delta = -so->delta;
+ so->delta = -so->delta; /* At this point cpShifted is wrong. We need to take a step */
so->loopDir = LOOPDIR_FORWARD;
}
}
@@ -313,8 +313,8 @@ signed short int synthVoice(struct SynthObject * so)
so->loopState = STATE_LOOPING;
if((wf->mode & (24)) == 0)
{
- so->cp = (wf->startLoop)<<FRACTSIZE;
- cpShifted = wf->startLoop;
+ cpShifted = wf->startLoop + (cpShifted-wf->endLoop);
+ so->cp = (cpShifted)<<FRACTSIZE;
s2=getSample((cpShifted), wf);
}
else