From f1c6cd50974e16f9144932e6bc89d97697d771e1 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 13 Apr 2023 18:11:10 -0500 Subject: [PATCH] blip_buf clockcenterRate; } if (rate<100) rate=100; + double rateOrig=rate; + sPreview.rateMul=1; + while (sPreview.rateMul<0x40000000 && rate=0)?sPreview.pBegin:0; + sPreview.posSub=0; sPreview.sample=sample; sPreview.wave=-1; sPreview.dir=false; @@ -2696,10 +2703,17 @@ void DivEngine::previewWaveNoLock(int wave, int note) { blip_clear(samp_bb); double rate=song.wave[wave]->len*((song.tuning*0.0625)*pow(2.0,(double)(note+3)/12.0)); if (rate<100) rate=100; + double rateOrig=rate; + sPreview.rateMul=1; + while (sPreview.rateMul<0x40000000 && ratedata16[sPreview.pos]; - if (sPreview.dir) { - sPreview.pos--; - } else { - sPreview.pos++; + if (--sPreview.posSub<=0) { + sPreview.posSub=sPreview.rateMul; + if (sPreview.dir) { + sPreview.pos--; + } else { + sPreview.pos++; + } } } blip_add_delta(samp_bb,i,samp_temp-samp_prevSample); @@ -1649,8 +1652,11 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi } else { samp_temp=((MIN(wave->data[sPreview.pos],wave->max)<<14)/wave->max)-8192; } - if (++sPreview.pos>=wave->len) { - sPreview.pos=0; + if (--sPreview.posSub<=0) { + sPreview.posSub=sPreview.rateMul; + if (++sPreview.pos>=wave->len) { + sPreview.pos=0; + } } blip_add_delta(samp_bb,i,samp_temp-samp_prevSample); samp_prevSample=samp_temp;