diff options
author | 2008-03-11 02:54:27 +0000 | |
---|---|---|
committer | 2008-03-11 02:54:27 +0000 | |
commit | 542b48970609fd378973bb20c47de527919b3997 (patch) | |
tree | 6dd9c6bf7b511da9108e6e14d653cbb169f3c555 /src/emu/sound/multipcm.c | |
parent | 5397db06151ae8a3473449f01038cdd99ffe80d3 (diff) |
[MultiPCM] Saturate on clip and fix envelope discontinuity. (ElSemi)
Diffstat (limited to 'src/emu/sound/multipcm.c')
-rw-r--r-- | src/emu/sound/multipcm.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/emu/sound/multipcm.c b/src/emu/sound/multipcm.c index 6055837e677..456d9c156f7 100644 --- a/src/emu/sound/multipcm.c +++ b/src/emu/sound/multipcm.c @@ -34,6 +34,7 @@ #define MULTIPCM_CLOCKDIV (360.0) #define MULTIPCM_ONE (18) +#define ICLIP16(x) (x<-32768)?-32768:((x>32767)?32767:x) static const int ctbl[] = { @@ -186,7 +187,14 @@ static void MultiPCM_update(void *param, stream_sample_t **inputs, stream_sample break; } - decTemp = 1.0f - (relcount * invrelamt); + if(relamt!=0) + { + decTemp = 1.0f - (relcount * invrelamt); + } + else + { + decTemp=0; + } lvol = mlvol * decTemp; rvol = mrvol * decTemp; @@ -194,8 +202,8 @@ static void MultiPCM_update(void *param, stream_sample_t **inputs, stream_sample ptsum += ptdelta; - datap[0][i] += ((pSamp[ptoffset] * lvol)>>2); - datap[1][i] += ((pSamp[ptoffset] * rvol)>>2); + datap[0][i] += ICLIP16((pSamp[ptoffset] * lvol)>>2); + datap[1][i] += ICLIP16((pSamp[ptoffset] * rvol)>>2); } // copy back the working values we need to keep |