blip_buf clock<rate bug workaround, part 1
issue #1055 now I gotta think of a strategy for dispatch
This commit is contained in:
parent
5b154c2ddf
commit
f1c6cd5097
|
@ -2668,10 +2668,17 @@ void DivEngine::previewSampleNoLock(int sample, int note, int pStart, int pEnd)
|
|||
if (rate<=0) rate=song.sample[sample]->centerRate;
|
||||
}
|
||||
if (rate<100) rate=100;
|
||||
double rateOrig=rate;
|
||||
sPreview.rateMul=1;
|
||||
while (sPreview.rateMul<0x40000000 && rate<got.rate) {
|
||||
sPreview.rateMul<<=1;
|
||||
rate*=2.0;
|
||||
}
|
||||
blip_set_rates(samp_bb,rate,got.rate);
|
||||
samp_prevSample=0;
|
||||
sPreview.rate=rate;
|
||||
sPreview.rate=rateOrig;
|
||||
sPreview.pos=(sPreview.pBegin>=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 && rate<got.rate) {
|
||||
sPreview.rateMul<<=1;
|
||||
rate*=2.0;
|
||||
}
|
||||
blip_set_rates(samp_bb,rate,got.rate);
|
||||
samp_prevSample=0;
|
||||
sPreview.rate=rate;
|
||||
sPreview.rate=rateOrig;
|
||||
sPreview.pos=0;
|
||||
sPreview.posSub=0;
|
||||
sPreview.sample=-1;
|
||||
sPreview.wave=wave;
|
||||
sPreview.dir=false;
|
||||
|
|
|
@ -414,6 +414,7 @@ class DivEngine {
|
|||
int wave;
|
||||
int pos;
|
||||
int pBegin, pEnd;
|
||||
int rateMul, posSub;
|
||||
bool dir;
|
||||
SamplePreview():
|
||||
rate(0.0),
|
||||
|
@ -422,6 +423,8 @@ class DivEngine {
|
|||
pos(0),
|
||||
pBegin(-1),
|
||||
pEnd(-1),
|
||||
rateMul(1),
|
||||
posSub(0),
|
||||
dir(false) {}
|
||||
} sPreview;
|
||||
|
||||
|
|
|
@ -1541,12 +1541,15 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi
|
|||
samp_temp=0;
|
||||
} else {
|
||||
samp_temp=s->data16[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);
|
||||
samp_prevSample=samp_temp;
|
||||
|
||||
|
@ -1649,9 +1652,12 @@ 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.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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue