fix low quality not working in acquireDirect
performance may be reduced
This commit is contained in:
parent
584305f1fa
commit
032ff82955
5
extern/blip_buf/blip_buf.c
vendored
5
extern/blip_buf/blip_buf.c
vendored
|
@ -299,7 +299,7 @@ possibly-wider fixed_t. On 32-bit platforms, this is likely more efficient.
|
||||||
And by having pre_shift 32, a 32-bit platform can easily do the shift by
|
And by having pre_shift 32, a 32-bit platform can easily do the shift by
|
||||||
simply ignoring the low half. */
|
simply ignoring the low half. */
|
||||||
|
|
||||||
void blip_add_delta( blip_t* m, unsigned time, int delta )
|
void blip_add_delta_slow( blip_t* m, unsigned time, int delta )
|
||||||
{
|
{
|
||||||
unsigned fixed = (unsigned) ((time * m->factor + m->offset) >> pre_shift);
|
unsigned fixed = (unsigned) ((time * m->factor + m->offset) >> pre_shift);
|
||||||
buf_t* out = SAMPLES( m ) + m->avail + (fixed >> frac_bits);
|
buf_t* out = SAMPLES( m ) + m->avail + (fixed >> frac_bits);
|
||||||
|
@ -350,3 +350,6 @@ void blip_add_delta_fast( blip_t* m, unsigned time, int delta )
|
||||||
out [7] += delta * delta_unit - delta2;
|
out [7] += delta * delta_unit - delta2;
|
||||||
out [8] += delta2;
|
out [8] += delta2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (tildearrow) ability to change blip_add_delta at runtime */
|
||||||
|
void (*blip_add_delta)( blip_t*, unsigned int, int )=blip_add_delta_slow;
|
5
extern/blip_buf/blip_buf.h
vendored
5
extern/blip_buf/blip_buf.h
vendored
|
@ -35,8 +35,11 @@ blip_max_ratio = 1 << 20 };
|
||||||
/** Clears entire buffer. Afterwards, blip_samples_avail() == 0. */
|
/** Clears entire buffer. Afterwards, blip_samples_avail() == 0. */
|
||||||
void blip_clear( blip_t* );
|
void blip_clear( blip_t* );
|
||||||
|
|
||||||
|
/** (tildearrow) ability to change blip_add_delta at runtime */
|
||||||
|
extern void (*blip_add_delta)( blip_t*, unsigned int, int );
|
||||||
|
|
||||||
/** Adds positive/negative delta into buffer at specified clock time. */
|
/** Adds positive/negative delta into buffer at specified clock time. */
|
||||||
void blip_add_delta( blip_t*, unsigned int clock_time, int delta );
|
void blip_add_delta_slow( blip_t*, unsigned int clock_time, int delta );
|
||||||
|
|
||||||
/** Same as blip_add_delta(), but uses faster, lower-quality synthesis. */
|
/** Same as blip_add_delta(), but uses faster, lower-quality synthesis. */
|
||||||
void blip_add_delta_fast( blip_t*, unsigned int clock_time, int delta );
|
void blip_add_delta_fast( blip_t*, unsigned int clock_time, int delta );
|
||||||
|
|
|
@ -194,18 +194,6 @@ void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (lowQuality) {
|
|
||||||
for (int i=0; i<outs; i++) {
|
|
||||||
if (bbIn[i]==NULL) continue;
|
|
||||||
if (bb[i]==NULL) continue;
|
|
||||||
for (size_t j=0; j<runtotal; j++) {
|
|
||||||
if (bbIn[i][j]==temp[i]) continue;
|
|
||||||
temp[i]=bbIn[i][j];
|
|
||||||
blip_add_delta_fast(bb[i],j,temp[i]-prevSample[i]);
|
|
||||||
prevSample[i]=temp[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int i=0; i<outs; i++) {
|
for (int i=0; i<outs; i++) {
|
||||||
if (bbIn[i]==NULL) continue;
|
if (bbIn[i]==NULL) continue;
|
||||||
if (bb[i]==NULL) continue;
|
if (bb[i]==NULL) continue;
|
||||||
|
@ -217,7 +205,6 @@ void DivDispatchContainer::fillBuf(size_t runtotal, size_t offset, size_t size)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=0; i<outs; i++) {
|
for (int i=0; i<outs; i++) {
|
||||||
if (bbOut[i]==NULL) continue;
|
if (bbOut[i]==NULL) continue;
|
||||||
|
|
|
@ -3763,6 +3763,12 @@ void DivEngine::initDispatch(bool isRender) {
|
||||||
lowQuality=getConfInt("audioQuality",0);
|
lowQuality=getConfInt("audioQuality",0);
|
||||||
dcHiPass=getConfInt("audioHiPass",1);
|
dcHiPass=getConfInt("audioHiPass",1);
|
||||||
|
|
||||||
|
if (lowQuality) {
|
||||||
|
blip_add_delta=blip_add_delta_fast;
|
||||||
|
} else {
|
||||||
|
blip_add_delta=blip_add_delta_slow;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i=0; i<song.systemLen; i++) {
|
for (int i=0; i<song.systemLen; i++) {
|
||||||
disCont[i].init(song.system[i],this,getChannelCount(song.system[i]),got.rate,song.systemFlags[i],isRender);
|
disCont[i].init(song.system[i],this,getChannelCount(song.system[i]),got.rate,song.systemFlags[i],isRender);
|
||||||
disCont[i].setRates(got.rate);
|
disCont[i].setRates(got.rate);
|
||||||
|
|
Loading…
Reference in a new issue