notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
spu: stop at 0 volume
[pcsx_rearmed.git]
/
plugins
/
dfsound
/
adsr.c
diff --git
a/plugins/dfsound/adsr.c
b/plugins/dfsound/adsr.c
index
e4873df
..
79f593c
100644
(file)
--- a/
plugins/dfsound/adsr.c
+++ b/
plugins/dfsound/adsr.c
@@
-46,6
+46,10
@@
void InitADSR(void) // INIT ADSR
\r
RateTableAdd[lcv] = ((7 - (lcv&3)) << 16) / denom;
\r
RateTableSub[lcv] = ((-8 + (lcv&3)) << 16) / denom;
\r
\r
RateTableAdd[lcv] = ((7 - (lcv&3)) << 16) / denom;
\r
RateTableSub[lcv] = ((-8 + (lcv&3)) << 16) / denom;
\r
+
\r
+ // XXX: this is wrong, we need more bits..
\r
+ if (RateTableAdd[lcv] == 0)
\r
+ RateTableAdd[lcv] = 1;
\r
}
\r
}
\r
\r
}
\r
}
\r
\r
@@
-67,12
+71,13
@@
static void MixADSR(int ch, int ns, int ns_to) // MIX ADSR
if (s_chan[ch].bStop) // should be stopped:
\r
{ // do release
\r
val = RateTableSub[s_chan[ch].ADSRX.ReleaseRate * 4];
\r
if (s_chan[ch].bStop) // should be stopped:
\r
{ // do release
\r
val = RateTableSub[s_chan[ch].ADSRX.ReleaseRate * 4];
\r
+
\r
if (s_chan[ch].ADSRX.ReleaseModeExp)
\r
{
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
if (s_chan[ch].ADSRX.ReleaseModeExp)
\r
{
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += ((long long)val * EnvelopeVol) >> (15+16);
\r
- if (EnvelopeVol < 0)
\r
+ if (EnvelopeVol <
=
0)
\r
break;
\r
\r
ChanBuf[ns] *= EnvelopeVol >> 21;
\r
break;
\r
\r
ChanBuf[ns] *= EnvelopeVol >> 21;
\r
@@
-84,7
+89,7
@@
static void MixADSR(int ch, int ns, int ns_to) // MIX ADSR
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
for (; ns < ns_to; ns++)
\r
{
\r
EnvelopeVol += val;
\r
- if (EnvelopeVol < 0)
\r
+ if (EnvelopeVol <
=
0)
\r
break;
\r
\r
ChanBuf[ns] *= EnvelopeVol >> 21;
\r
break;
\r
\r
ChanBuf[ns] *= EnvelopeVol >> 21;
\r
@@
-92,7
+97,7
@@
static void MixADSR(int ch, int ns, int ns_to) // MIX ADSR
}
\r
}
\r
\r
}
\r
}
\r
\r
- if (EnvelopeVol < 0)
\r
+ if (EnvelopeVol <
=
0)
\r
goto stop;
\r
\r
goto done;
\r
goto stop;
\r
\r
goto done;
\r