From a530934671de0c60cbfca038edd8698bb4bc2250 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 15 Apr 2022 01:26:44 -0500 Subject: [PATCH] fix retrigger issue in sample instruments --- src/engine/platform/genesis.cpp | 6 ++++-- src/engine/platform/nes.cpp | 2 +- src/engine/platform/segapcm.cpp | 6 ++++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index e85bc768..f00a521b 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -493,8 +493,10 @@ int DivPlatformGenesis::dispatch(DivCommand c) { } dacPos=0; dacPeriod=0; - chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); - chan[c.chan].freqChanged=true; + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].baseFreq=NOTE_FREQUENCY(c.value); + chan[c.chan].freqChanged=true; + } chan[c.chan].furnaceDac=true; } else { // compatible mode if (c.value!=DIV_NOTE_NULL) { diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index 9f56e4e5..e99a3e29 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -274,8 +274,8 @@ int DivPlatformNES::dispatch(DivCommand c) { } dacPos=0; dacPeriod=0; - chan[c.chan].baseFreq=parent->song.tuning*pow(2.0f,((float)(c.value+3)/12.0f)); if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].baseFreq=parent->song.tuning*pow(2.0f,((float)(c.value+3)/12.0f)); chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; } diff --git a/src/engine/platform/segapcm.cpp b/src/engine/platform/segapcm.cpp index b87ee9a8..84ec00c3 100644 --- a/src/engine/platform/segapcm.cpp +++ b/src/engine/platform/segapcm.cpp @@ -142,8 +142,10 @@ int DivPlatformSegaPCM::dispatch(DivCommand c) { break; } chan[c.chan].pcm.pos=0; - chan[c.chan].baseFreq=(c.value<<6); - chan[c.chan].freqChanged=true; + if (c.value!=DIV_NOTE_NULL) { + chan[c.chan].baseFreq=(c.value<<6); + chan[c.chan].freqChanged=true; + } chan[c.chan].furnacePCM=true; if (dumpWrites) { // Sega PCM writes DivSample* s=parent->getSample(chan[c.chan].pcm.sample);