new chan osc, part 7

i am done
This commit is contained in:
tildearrow 2025-03-02 16:14:49 -05:00
parent 6265d2cd39
commit 49a8693dcb
35 changed files with 606 additions and 217 deletions

View file

@ -74,6 +74,10 @@ void DivPlatformPOKEY::acquire(short** buf, size_t len) {
}
void DivPlatformPOKEY::acquireMZ(short* buf, size_t len) {
for (int i=0; i<4; i++) {
oscBuf[i]->begin(len);
}
for (size_t h=0; h<len; h++) {
while (!writes.empty()) {
QueuedWrite w=writes.front();
@ -86,29 +90,47 @@ void DivPlatformPOKEY::acquireMZ(short* buf, size_t len) {
if (++oscBufDelay>=14) {
oscBufDelay=0;
oscBuf[0]->data[oscBuf[0]->needle++]=pokey.outvol_0<<10;
oscBuf[1]->data[oscBuf[1]->needle++]=pokey.outvol_1<<10;
oscBuf[2]->data[oscBuf[2]->needle++]=pokey.outvol_2<<10;
oscBuf[3]->data[oscBuf[3]->needle++]=pokey.outvol_3<<10;
oscBuf[0]->putSample(h,pokey.outvol_0<<10);
oscBuf[1]->putSample(h,pokey.outvol_1<<10);
oscBuf[2]->putSample(h,pokey.outvol_2<<10);
oscBuf[3]->putSample(h,pokey.outvol_3<<10);
}
}
for (int i=0; i<4; i++) {
oscBuf[i]->end(len);
}
}
void DivPlatformPOKEY::acquireASAP(short* buf, size_t len) {
thread_local short oscB[4];
while (!writes.empty()) {
QueuedWrite w=writes.front();
altASAP.write(w.addr, w.val);
writes.pop();
}
for (int i=0; i<4; i++) {
oscBuf[i]->begin(len);
}
for (size_t h=0; h<len; h++) {
if (++oscBufDelay>=2) {
oscBufDelay=0;
buf[h]=altASAP.sampleAudio(oscBuf);
buf[h]=altASAP.sampleAudio(oscB);
for (int i=0; i<4; i++) {
oscBuf[i]->putSample(h,oscB[i]);
}
} else {
buf[h]=altASAP.sampleAudio();
}
}
for (int i=0; i<4; i++) {
oscBuf[i]->end(len);
}
}
void DivPlatformPOKEY::tick(bool sysTick) {
@ -488,14 +510,14 @@ void DivPlatformPOKEY::setFlags(const DivConfig& flags) {
if (useAltASAP) {
rate=chipClock/7;
for (int i=0; i<4; i++) {
oscBuf[i]->rate=rate/2;
oscBuf[i]->setRate(rate);
}
altASAP.init(chipClock,rate);
altASAP.reset();
} else {
rate=chipClock;
for (int i=0; i<4; i++) {
oscBuf[i]->rate=rate/14;
oscBuf[i]->setRate(rate);
}
}
}