diff --git a/src/engine/platform/sound/su.cpp b/src/engine/platform/sound/su.cpp index 8d5373cef..505a0d48b 100644 --- a/src/engine/platform/sound/su.cpp +++ b/src/engine/platform/sound/su.cpp @@ -146,7 +146,8 @@ void SoundUnit::NextSample(short* l, short* r) { } } } - fns[i]=ns[i]*chan[i].vol*((chan[i].flags0&8)?4:2); + fns[i]=ns[i]*chan[i].vol; + if (!(chan[i].flags0&8)) fns[i]>>=1; if ((chan[i].flags0&0xe0)!=0) { int ff=chan[i].cutoff; nslow[i]=nslow[i]+(((ff)*nsband[i])>>16); @@ -259,12 +260,12 @@ void SoundUnit::NextSample(short* l, short* r) { // mix if (dsOut) { - tnsL=nsL[dsChannel]<<1; - tnsR=nsR[dsChannel]<<1; + tnsL=nsL[dsChannel]<<3; + tnsR=nsR[dsChannel]<<3; dsChannel=(dsChannel+1)&7; } else { - tnsL=(nsL[0]+nsL[1]+nsL[2]+nsL[3]+nsL[4]+nsL[5]+nsL[6]+nsL[7])>>2; - tnsR=(nsR[0]+nsR[1]+nsR[2]+nsR[3]+nsR[4]+nsR[5]+nsR[6]+nsR[7])>>2; + tnsL=(nsL[0]+nsL[1]+nsL[2]+nsL[3]+nsL[4]+nsL[5]+nsL[6]+nsL[7]); + tnsR=(nsR[0]+nsR[1]+nsR[2]+nsR[3]+nsR[4]+nsR[5]+nsR[6]+nsR[7]); IL1=minval(32767,maxval(-32767,tnsL))>>8; IL2=minval(32767,maxval(-32767,tnsR))>>8; diff --git a/src/engine/platform/sound/su.h b/src/engine/platform/sound/su.h index 8e8009568..091f7de73 100644 --- a/src/engine/platform/sound/su.h +++ b/src/engine/platform/sound/su.h @@ -33,12 +33,12 @@ class SoundUnit { int rcycle[8]; unsigned int lfsr[8]; signed char ns[8]; - int fns[8]; - int nsL[8]; - int nsR[8]; - int nslow[8]; - int nshigh[8]; - int nsband[8]; + short fns[8]; + short nsL[8]; + short nsR[8]; + short nslow[8]; + short nshigh[8]; + short nsband[8]; int tnsL, tnsR; unsigned char ilBufPeriod; unsigned short ilBufPos;