From 55d7a5e9bc29e9c1c2f24943fc6ddf30af9e3624 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 25 Aug 2023 04:18:22 -0500 Subject: [PATCH] K007232: oscBuf was too fast --- src/engine/platform/k007232.cpp | 17 ++++++++++++----- src/engine/platform/k007232.h | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/engine/platform/k007232.cpp b/src/engine/platform/k007232.cpp index fb44a1a0d..c1e314f53 100644 --- a/src/engine/platform/k007232.cpp +++ b/src/engine/platform/k007232.cpp @@ -78,15 +78,21 @@ void DivPlatformK007232::acquire(short** buf, size_t len) { const signed int rout[2]={(k007232.output(0)*((vol1>>4)&0xf)),(k007232.output(1)*((vol2>>4)&0xf))}; buf[0][h]=(lout[0]+lout[1])<<4; buf[1][h]=(rout[0]+rout[1])<<4; - for (int i=0; i<2; i++) { - oscBuf[i]->data[oscBuf[i]->needle++]=(lout[i]+rout[i])<<3; + if (++oscDivider>=8) { + oscDivider=0; + for (int i=0; i<2; i++) { + oscBuf[i]->data[oscBuf[i]->needle++]=(lout[i]+rout[i])<<3; + } } } else { const unsigned char vol=regPool[0xc]; const signed int out[2]={(k007232.output(0)*(vol&0xf)),(k007232.output(1)*((vol>>4)&0xf))}; buf[0][h]=(out[0]+out[1])<<4; - for (int i=0; i<2; i++) { - oscBuf[i]->data[oscBuf[i]->needle++]=out[i]<<4; + if (++oscDivider>=8) { + oscDivider=0; + for (int i=0; i<2; i++) { + oscBuf[i]->data[oscBuf[i]->needle++]=out[i]<<4; + } } } } @@ -484,7 +490,7 @@ void DivPlatformK007232::setFlags(const DivConfig& flags) { stereo=flags.getBool("stereo",false); for (int i=0; i<2; i++) { chan[i].volumeChanged=true; - oscBuf[i]->rate=rate; + oscBuf[i]->rate=rate/8; } } @@ -575,6 +581,7 @@ int DivPlatformK007232::init(DivEngine* p, int channels, int sugRate, const DivC } sampleMem=new unsigned char[getSampleMemCapacity()]; sampleMemLen=0; + oscDivider=0; setFlags(flags); reset(); diff --git a/src/engine/platform/k007232.h b/src/engine/platform/k007232.h index c8ea8aea7..e3409b31f 100644 --- a/src/engine/platform/k007232.h +++ b/src/engine/platform/k007232.h @@ -68,7 +68,7 @@ class DivPlatformK007232: public DivDispatch, public k007232_intf { bool sampleLoaded[256]; int delay; - unsigned char lastLoop, lastVolume; + unsigned char lastLoop, lastVolume, oscDivider; bool stereo; unsigned char* sampleMem;