This commit is contained in:
tildearrow 2025-03-02 23:04:48 -05:00
parent 8dcbd0fe1c
commit 6f8da93714

View file

@ -424,13 +424,13 @@ struct DivSamplePos {
freq(0) {} freq(0) {}
}; };
constexpr uintmax_t OSCBUF_PREC=(sizeof(uintmax_t)>=8)?32:16; constexpr size_t OSCBUF_PREC=(sizeof(size_t)>=8)?32:16;
constexpr uintmax_t OSCBUF_MASK=(1UL<<OSCBUF_PREC)-1; constexpr size_t OSCBUF_MASK=(1UL<<OSCBUF_PREC)-1;
// the actual output of all DivDispatchOscBuffer instanced runs at 65536Hz. // the actual output of all DivDispatchOscBuffer instanced runs at 65536Hz.
struct DivDispatchOscBuffer { struct DivDispatchOscBuffer {
uintmax_t rate; size_t rate;
uintmax_t rateMul; size_t rateMul;
unsigned int needleSub; unsigned int needleSub;
unsigned short needle; unsigned short needle;
unsigned short readNeedle; unsigned short readNeedle;
@ -439,7 +439,7 @@ struct DivDispatchOscBuffer {
bool follow; bool follow;
short data[65536]; short data[65536];
inline void putSample(uintmax_t pos, short val) { inline void putSample(size_t pos, short val) {
unsigned short realPos=needle+((needleSub+pos*rateMul)>>OSCBUF_PREC); unsigned short realPos=needle+((needleSub+pos*rateMul)>>OSCBUF_PREC);
if (val==-1) { if (val==-1) {
data[realPos]=0xfffe; data[realPos]=0xfffe;
@ -449,7 +449,7 @@ struct DivDispatchOscBuffer {
data[realPos]=val; data[realPos]=val;
} }
inline void begin(unsigned short len) { inline void begin(unsigned short len) {
uintmax_t calc=(needleSub+len*rateMul)>>OSCBUF_PREC; size_t calc=(needleSub+len*rateMul)>>OSCBUF_PREC;
unsigned short start=needle; unsigned short start=needle;
unsigned short end=needle+calc; unsigned short end=needle+calc;
@ -466,7 +466,7 @@ struct DivDispatchOscBuffer {
data[needle]=lastSample; data[needle]=lastSample;
} }
inline void end(unsigned short len) { inline void end(unsigned short len) {
uintmax_t calc=len*rateMul; size_t calc=len*rateMul;
if (((calc&OSCBUF_MASK)+needleSub)>OSCBUF_MASK) { if (((calc&OSCBUF_MASK)+needleSub)>OSCBUF_MASK) {
calc+=UINTMAX_C(1)<<OSCBUF_PREC; calc+=UINTMAX_C(1)<<OSCBUF_PREC;
} }
@ -486,7 +486,7 @@ struct DivDispatchOscBuffer {
double rateMulD=65536.0/(double)r; double rateMulD=65536.0/(double)r;
rateMulD*=(double)(UINTMAX_C(1)<<OSCBUF_PREC); rateMulD*=(double)(UINTMAX_C(1)<<OSCBUF_PREC);
rate=r; rate=r;
rateMul=(uintmax_t)rateMulD; rateMul=(size_t)rateMulD;
} }
DivDispatchOscBuffer(): DivDispatchOscBuffer():
rate(65536), rate(65536),