diff --git a/src/engine/platform/zxbeeperquadtone.cpp b/src/engine/platform/zxbeeperquadtone.cpp index 93698a017..66e1ee007 100644 --- a/src/engine/platform/zxbeeperquadtone.cpp +++ b/src/engine/platform/zxbeeperquadtone.cpp @@ -50,13 +50,13 @@ void DivPlatformZXBeeperQuadTone::acquire(short** buf, size_t len) { } if (sampleActive) { buf[0][h]=chan[4].out?32767:0; - if ((outputClock&3)==0) { + if (outputClock==0) { oscBuf[0]->data[oscBuf[0]->needle++]=0; oscBuf[1]->data[oscBuf[1]->needle++]=0; oscBuf[2]->data[oscBuf[2]->needle++]=0; oscBuf[3]->data[oscBuf[3]->needle++]=0; - oscBuf[4]->data[oscBuf[4]->needle++]=buf[0][h]; } + oscBuf[4]->data[oscBuf[4]->needle++]=buf[0][h]; } else { int ch=outputClock/2; int b=ch*4; @@ -65,18 +65,15 @@ void DivPlatformZXBeeperQuadTone::acquire(short** buf, size_t len) { short oscOut; chan[ch].sPosition+=(regPool[1+b]<<8)|regPool[0+b]; chan[ch].out=regPool[3+b]+((((chan[ch].sPosition>>8)&0xff)data[oscBuf[ch]->needle++]=oscOut; } - if ((outputClock&3)==0) { - oscBuf[4]->data[oscBuf[4]->needle++]=0; - } if (!isMuted[ch]) o=chan[ch].out&0x10; if (noHiss) { deHisser[outputClock]=o; @@ -88,6 +85,7 @@ void DivPlatformZXBeeperQuadTone::acquire(short** buf, size_t len) { buf[0][h]=o?32767:0; } chan[ch].out<<=1; + oscBuf[4]->data[oscBuf[4]->needle++]=0; } outputClock=(outputClock+1)&7; } @@ -387,9 +385,10 @@ void DivPlatformZXBeeperQuadTone::setFlags(const DivConfig& flags) { CHECK_CUSTOM_CLOCK; rate=chipClock/40; noHiss=flags.getBool("noHiss",false); - for (int i=0; i<5; i++) { - oscBuf[i]->rate=rate/4; + for (int i=0; i<4; i++) { + oscBuf[i]->rate=rate/8; } + oscBuf[4]->rate=rate; } void DivPlatformZXBeeperQuadTone::poke(unsigned int addr, unsigned short val) {