From f0fffd9878e622a26d4eab926f19003ebe151c39 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 8 Sep 2024 18:11:22 -0500 Subject: [PATCH] MultiPCM: store flags dev221 --- papers/newIns.md | 5 +++++ src/engine/engine.h | 4 ++-- src/engine/instrument.cpp | 28 +++++++++++++++------------- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/papers/newIns.md b/papers/newIns.md index 7ca9c349e..96cb02755 100644 --- a/papers/newIns.md +++ b/papers/newIns.md @@ -582,6 +582,11 @@ size | description 1 | LFO rate 1 | vibrato depth 1 | AM depth + 1 | flags (>=221) + | - bit 0: damp + | - bit 1: pseudo-reverb + | - bit 2: LFO reset + | - bit 3: level direct ``` # Sound Unit data (SU) diff --git a/src/engine/engine.h b/src/engine/engine.h index 3dacd0730..8d83c272e 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -54,8 +54,8 @@ class DivWorkPool; #define DIV_UNSTABLE -#define DIV_VERSION "dev220" -#define DIV_ENGINE_VERSION 220 +#define DIV_VERSION "dev221" +#define DIV_ENGINE_VERSION 221 // for imports #define DIV_VERSION_MOD 0xff01 #define DIV_VERSION_FC 0xff02 diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index ed5894d65..6774202f1 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -896,12 +896,13 @@ void DivInstrument::writeFeatureMP(SafeWriter* w) { w->writeC(multipcm.vib); w->writeC(multipcm.am); - /* - w->writeC(multipcm.damp); - w->writeC(multipcm.pseudoReverb); - w->writeC(multipcm.lfoReset); - w->writeC(multipcm.levelDirect); - */ + unsigned char next=( + (multipcm.damp?1:0)& + (multipcm.pseudoReverb?2:0)& + (multipcm.lfoReset?4:0)& + (multipcm.levelDirect?8:0) + ); + w->writeC(next); FEATURE_END; } @@ -2229,12 +2230,13 @@ void DivInstrument::readFeatureMP(SafeReader& reader, short version) { multipcm.vib=reader.readC(); multipcm.am=reader.readC(); - /* - multipcm.damp=reader.readC(); - multipcm.pseudoReverb=reader.readC(); - multipcm.lfoReset=reader.readC(); - multipcm.levelDirect=reader.readC(); - */ + if (version>=221) { + unsigned char next=reader.readC(); + multipcm.damp=next&1; + multipcm.pseudoReverb=next&2; + multipcm.lfoReset=next&4; + multipcm.levelDirect=next&8; + } READ_FEAT_END; } @@ -3510,4 +3512,4 @@ DivInstrument& DivInstrument::operator=( const DivInstrument& ins ) { *(DivInstrumentPOD*)this=ins; name=ins.name; return *this; -} \ No newline at end of file +}