From ca7b63e378feba4614ccfcbbbc23de85fea6c6c4 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 13 Jan 2026 14:54:47 -0500 Subject: [PATCH] YM2612: don't send VGM stream commands if muted issue #2752 muted channels not being written in export is the actual issue --- src/engine/platform/genesis.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index a0fd760c0..71bf1cb7d 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -928,7 +928,7 @@ void DivPlatformGenesis::tick(bool sysTick) { chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,2,chan[i].pitch2,1,1); chan[i].dacRate=chan[i].freq*off; if (chan[i].dacRate<1) chan[i].dacRate=1; - if (dumpWrites) addWrite(0xffff0001,chan[i].dacRate); + if (dumpWrites && !isMuted[i]) addWrite(0xffff0001,chan[i].dacRate); } chan[i].freqChanged=false; } @@ -1071,11 +1071,11 @@ int DivPlatformGenesis::dispatch(DivCommand c) { } if (chan[c.chan].dacSample<0 || chan[c.chan].dacSample>=parent->song.sampleLen) { chan[c.chan].dacSample=-1; - if (dumpWrites) addWrite(0xffff0002,0); + if (dumpWrites && !isMuted[c.chan]) addWrite(0xffff0002,0); break; } else { rWrite(0x2b,1<<7); - if (dumpWrites) { + if (dumpWrites && !isMuted[c.chan]) { addWrite(0xffff0000,chan[c.chan].dacSample); addWrite(0xffff0003,chan[c.chan].dacDirection); } @@ -1126,7 +1126,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { case DIV_CMD_NOTE_OFF: if (c.chan>=5 && c.chansong.compatFlags.brokenDACMode) { rWrite(0x2b,0); if (chan[c.chan].dacMode) break; @@ -1139,7 +1139,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { case DIV_CMD_NOTE_OFF_ENV: if (c.chan>=5) { chan[c.chan].dacSample=-1; - if (dumpWrites) addWrite(0xffff0002,0); + if (dumpWrites && !isMuted[c.chan]) addWrite(0xffff0002,0); } chan[c.chan].keyOff=true; chan[c.chan].keyOn=false; @@ -1277,14 +1277,14 @@ int DivPlatformGenesis::dispatch(DivCommand c) { case DIV_CMD_SAMPLE_DIR: { if (c.chan<5) c.chan=5; chan[c.chan].dacDirection=c.value; - if (dumpWrites) addWrite(0xffff0003,chan[c.chan].dacDirection); + if (dumpWrites && !isMuted[c.chan]) addWrite(0xffff0003,chan[c.chan].dacDirection); break; } case DIV_CMD_SAMPLE_POS: if (c.chan<5) c.chan=5; chan[c.chan].dacPos=c.value; chan[c.chan].setPos=true; - if (dumpWrites) addWrite(0xffff0005,chan[c.chan].dacPos); + if (dumpWrites && !isMuted[c.chan]) addWrite(0xffff0005,chan[c.chan].dacPos); break; case DIV_CMD_LEGATO: { if (c.chan==csmChan) {