GUI: fix sample loop crossfade overflow

co-authored by Eknous
This commit is contained in:
tildearrow 2024-11-24 16:09:42 -05:00
parent 5d47b50032
commit 56f598cd41

View file

@ -1340,8 +1340,8 @@ void FurnaceGUI::drawSampleEdit() {
for (int i=0; i<sampleCrossFadeLoopLength; i++) { for (int i=0; i<sampleCrossFadeLoopLength; i++) {
double f1=pow(i*l,evar); double f1=pow(i*l,evar);
double f2=pow((sampleCrossFadeLoopLength-i)*l,evar); double f2=pow((sampleCrossFadeLoopLength-i)*l,evar);
signed char out=(signed char)(((double)sample->data8[crossFadeInput])*f1+((double)sample->data8[crossFadeOutput])*f2); double out=((double)sample->data8[crossFadeInput])*f1+((double)sample->data8[crossFadeOutput])*f2;
sample->data8[crossFadeOutput]=out; sample->data8[crossFadeOutput]=(signed char)CLAMP(out,-128,127);
crossFadeInput++; crossFadeInput++;
crossFadeOutput++; crossFadeOutput++;
} }
@ -1351,8 +1351,8 @@ void FurnaceGUI::drawSampleEdit() {
for (int i=0; i<sampleCrossFadeLoopLength; i++) { for (int i=0; i<sampleCrossFadeLoopLength; i++) {
double f1=std::pow(i*l,evar); double f1=std::pow(i*l,evar);
double f2=std::pow((sampleCrossFadeLoopLength-i)*l,evar); double f2=std::pow((sampleCrossFadeLoopLength-i)*l,evar);
short out=(short)(((double)sample->data16[crossFadeInput])*f1+((double)sample->data16[crossFadeOutput])*f2); double out=((double)sample->data16[crossFadeInput])*f1+((double)sample->data16[crossFadeOutput])*f2;
sample->data16[crossFadeOutput]=out; sample->data16[crossFadeOutput]=(short)CLAMP(out,-32768,32767);
crossFadeInput++; crossFadeInput++;
crossFadeOutput++; crossFadeOutput++;
} }