From 3bcaac365e914b82f80839e047ebedd6b81fc634 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Sun, 5 Nov 2017 21:01:37 +0300 Subject: Tri-state for deep-tremolo/vibrato/sm/adlib-percussion modes By default every flag will have "auto" type which means mode will be set in dependence on a bank. --- src/adlmidi.cpp | 6 +++--- src/adlmidi_load.cpp | 15 ++++----------- src/adlmidi_midiplay.cpp | 22 +++++++++++----------- src/adlmidi_private.hpp | 12 ++++++------ 4 files changed, 24 insertions(+), 31 deletions(-) (limited to 'src') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 8f07d72..9a0aaa4 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -525,9 +525,9 @@ ADLMIDI_EXPORT int adl_play(ADL_MIDIPlayer *device, int sampleCount, short *out) n_periodCountStereo = static_cast(setup.carry); setup.carry -= n_periodCountStereo; - if(setup.SkipForward > 0) - setup.SkipForward -= 1; - else + //if(setup.SkipForward > 0) + // setup.SkipForward -= 1; + //else { if((player->atEnd) && (setup.delay <= 0.0)) break;//Stop to fetch samples at reaching the song end with disabled loop diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp index 387ca12..6f68a11 100644 --- a/src/adlmidi_load.cpp +++ b/src/adlmidi_load.cpp @@ -361,19 +361,12 @@ bool MIDIplay::LoadMIDI(MIDIplay::fileReader &fr) } /**** Set all properties BEFORE starting of actial file reading! ****/ - m_setup.stored_samples = 0; m_setup.backup_samples_size = 0; - - /* - * TODO: Implement tri-state: "AUTO (use bank default setup), force On, force Off" - * for thuse four flags: - */ - opl.HighTremoloMode = m_setup.HighTremoloMode; - opl.HighVibratoMode = m_setup.HighVibratoMode; - opl.AdlPercussionMode = m_setup.AdlPercussionMode; - opl.ScaleModulators = m_setup.ScaleModulators; - + opl.HighTremoloMode = m_setup.HighTremoloMode == -1 ? adlbanksetup[m_setup.AdlBank].deepTremolo : (bool)m_setup.HighTremoloMode; + opl.HighVibratoMode = m_setup.HighVibratoMode == -1 ? adlbanksetup[m_setup.AdlBank].deepVibrato : (bool)m_setup.HighVibratoMode; + opl.AdlPercussionMode = m_setup.AdlPercussionMode == -1 ? adlbanksetup[m_setup.AdlBank].adLibPercussions : (bool)m_setup.AdlPercussionMode; + opl.ScaleModulators = m_setup.ScaleModulators == -1 ? adlbanksetup[m_setup.AdlBank].scaleModulators : (bool)m_setup.ScaleModulators; opl.LogarithmicVolumes = m_setup.LogarithmicVolumes; //opl.CartoonersVolumes = false; opl.m_musicMode = OPL3::MODE_MIDI; diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index 27ec8d4..fa95e32 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -639,13 +639,13 @@ MIDIplay::MIDIplay(): m_setup.AdlBank = 0; m_setup.NumFourOps = 7; m_setup.NumCards = 2; - m_setup.HighTremoloMode = false; - m_setup.HighVibratoMode = false; - m_setup.AdlPercussionMode = false; - m_setup.LogarithmicVolumes = false; - m_setup.SkipForward = 0; + m_setup.HighTremoloMode = -1; + m_setup.HighVibratoMode = -1; + m_setup.AdlPercussionMode = -1; + m_setup.LogarithmicVolumes = false; + //m_setup.SkipForward = 0; m_setup.loopingIsEnabled = false; - m_setup.ScaleModulators = false; + m_setup.ScaleModulators = -1; m_setup.delay = 0.0; m_setup.carry = 0.0; m_setup.stored_samples = 0; @@ -654,11 +654,11 @@ MIDIplay::MIDIplay(): opl.NumCards = m_setup.NumCards; opl.AdlBank = m_setup.AdlBank; opl.NumFourOps = m_setup.NumFourOps; - opl.LogarithmicVolumes = m_setup.LogarithmicVolumes; - opl.HighTremoloMode = m_setup.HighTremoloMode; - opl.HighVibratoMode = m_setup.HighVibratoMode; - opl.AdlPercussionMode = m_setup.AdlPercussionMode; - opl.ScaleModulators = m_setup.ScaleModulators; + opl.LogarithmicVolumes = m_setup.LogarithmicVolumes; + opl.HighTremoloMode = m_setup.HighTremoloMode == -1 ? adlbanksetup[m_setup.AdlBank].deepTremolo : (bool)m_setup.HighTremoloMode; + opl.HighVibratoMode = m_setup.HighVibratoMode == -1 ? adlbanksetup[m_setup.AdlBank].deepVibrato : (bool)m_setup.HighVibratoMode; + opl.AdlPercussionMode = m_setup.AdlPercussionMode == -1 ? adlbanksetup[m_setup.AdlBank].adLibPercussions : (bool)m_setup.AdlPercussionMode; + opl.ScaleModulators = m_setup.ScaleModulators == -1 ? adlbanksetup[m_setup.AdlBank].scaleModulators : (bool)m_setup.ScaleModulators; } uint64_t MIDIplay::ReadVarLen(uint8_t **ptr) diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp index a0f2a51..42e24e2 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -629,14 +629,14 @@ public: unsigned int AdlBank; unsigned int NumFourOps; unsigned int NumCards; - bool HighTremoloMode; - bool HighVibratoMode; - bool AdlPercussionMode; + int HighTremoloMode; + int HighVibratoMode; + int AdlPercussionMode; bool LogarithmicVolumes; int VolumeModel; - unsigned int SkipForward; - bool loopingIsEnabled; - bool ScaleModulators; + //unsigned int SkipForward; + bool loopingIsEnabled; + int ScaleModulators; double delay; double carry; -- cgit v1.2.3