summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/sound/multipcm.c
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2008-03-11 02:54:27 +0000
committer R. Belmont <rb6502@users.noreply.github.com>2008-03-11 02:54:27 +0000
commit542b48970609fd378973bb20c47de527919b3997 (patch)
tree6dd9c6bf7b511da9108e6e14d653cbb169f3c555 /src/emu/sound/multipcm.c
parent5397db06151ae8a3473449f01038cdd99ffe80d3 (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.c14
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