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

@ -169,6 +169,10 @@ void DivPlatformYM2203::acquire_combo(short** buf, size_t len) {
thread_local int os;
thread_local short ignored[2];
for (int i=0; i<7; i++) {
oscBuf[i]->begin(len);
}
for (size_t h=0; h<len; h++) {
// AY -> OPN
ay->runDAC();
@ -236,13 +240,17 @@ void DivPlatformYM2203::acquire_combo(short** buf, size_t len) {
buf[0][h]=os;
for (int i=0; i<3; i++) {
oscBuf[i]->data[oscBuf[i]->needle++]=CLAMP(fm_nuked.ch_out[i]<<1,-32768,32767);
oscBuf[i]->putSample(h,CLAMP(fm_nuked.ch_out[i]<<1,-32768,32767));
}
for (int i=(3+isCSM); i<(6+isCSM); i++) {
oscBuf[i]->data[oscBuf[i]->needle++]=fmout.data[i-(2+isCSM)]<<1;
oscBuf[i]->putSample(h,fmout.data[i-(2+isCSM)]<<1);
}
}
for (int i=0; i<7; i++) {
oscBuf[i]->end(len);
}
}
void DivPlatformYM2203::acquire_ymfm(short** buf, size_t len) {
@ -255,6 +263,10 @@ void DivPlatformYM2203::acquire_ymfm(short** buf, size_t len) {
fmChan[i]=fme->debug_channel(i);
}
for (int i=0; i<7; i++) {
oscBuf[i]->begin(len);
}
for (size_t h=0; h<len; h++) {
// AY -> OPN
ay->runDAC();
@ -294,13 +306,17 @@ void DivPlatformYM2203::acquire_ymfm(short** buf, size_t len) {
for (int i=0; i<3; i++) {
int out=(fmChan[i]->debug_output(0)+fmChan[i]->debug_output(1))<<1;
oscBuf[i]->data[oscBuf[i]->needle++]=CLAMP(out,-32768,32767);
oscBuf[i]->putSample(h,CLAMP(out,-32768,32767));
}
for (int i=(3+isCSM); i<(6+isCSM); i++) {
oscBuf[i]->data[oscBuf[i]->needle++]=fmout.data[i-(2+isCSM)]<<1;
oscBuf[i]->putSample(h,fmout.data[i-(2+isCSM)]<<1);
}
}
for (int i=0; i<7; i++) {
oscBuf[i]->end(len);
}
}
static const unsigned char subCycleMap[6]={
@ -310,6 +326,10 @@ static const unsigned char subCycleMap[6]={
void DivPlatformYM2203::acquire_lle(short** buf, size_t len) {
thread_local int fmOut[6];
for (int i=0; i<7; i++) {
oscBuf[i]->begin(len);
}
for (size_t h=0; h<len; h++) {
bool have0=false;
bool have1=false;
@ -444,11 +464,11 @@ void DivPlatformYM2203::acquire_lle(short** buf, size_t len) {
for (int i=0; i<3; i++) {
if (fmOut[i]<-32768) fmOut[i]=-32768;
if (fmOut[i]>32767) fmOut[i]=32767;
oscBuf[i]->data[oscBuf[i]->needle++]=fmOut[i];
oscBuf[i]->putSample(h,fmOut[i]);
}
// SSG
for (int i=0; i<3; i++) {
oscBuf[i+3]->data[oscBuf[i+3]->needle++]=fm_lle.o_analog_ch[i]*32767;
oscBuf[i+3]->putSample(h,fm_lle.o_analog_ch[i]*32767);
}
// DAC
@ -461,6 +481,10 @@ void DivPlatformYM2203::acquire_lle(short** buf, size_t len) {
buf[0][h]=outL;
}
for (int i=0; i<7; i++) {
oscBuf[i]->end(len);
}
}
void DivPlatformYM2203::fillStream(std::vector<DivDelayedWrite>& stream, int sRate, size_t len) {
@ -1386,7 +1410,7 @@ void DivPlatformYM2203::setFlags(const DivConfig& flags) {
rate=fm->sample_rate(chipClock);
}
for (int i=0; i<7; i++) {
oscBuf[i]->rate=rate;
oscBuf[i]->setRate(rate);
}
immWrite(0x2d,0xff);
immWrite(prescale,0xff);