diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/adlmidi_load.cpp | 8 | ||||
-rw-r--r-- | src/adlmidi_midiplay.cpp | 14 | ||||
-rw-r--r-- | src/adlmidi_opl3.cpp | 5 | ||||
-rw-r--r-- | src/adlmidi_private.hpp | 11 |
4 files changed, 26 insertions, 12 deletions
diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp index d7a0b82..387ca12 100644 --- a/src/adlmidi_load.cpp +++ b/src/adlmidi_load.cpp @@ -375,7 +375,8 @@ bool MIDIplay::LoadMIDI(MIDIplay::fileReader &fr) opl.ScaleModulators = m_setup.ScaleModulators; opl.LogarithmicVolumes = m_setup.LogarithmicVolumes; - opl.CartoonersVolumes = false; + //opl.CartoonersVolumes = false; + opl.m_musicMode = OPL3::MODE_MIDI; opl.ChangeVolumeRangesModel(static_cast<ADLMIDI_VolumeModels>(m_setup.VolumeModel)); if(m_setup.VolumeModel == ADLMIDI_VolumeModel_AUTO)//Use bank default volume model opl.m_volumeScale = (OPL3::VolumesScale)adlbanksetup[m_setup.AdlBank].volumeModel; @@ -551,6 +552,7 @@ riffskip: //std::printf("CMF deltas %u ticks %u, basictempo = %u\n", deltas, ticks, basictempo); opl.LogarithmicVolumes = true; opl.AdlPercussionMode = true; + opl.m_musicMode = OPL3::MODE_CMF; opl.m_volumeScale = OPL3::VOLUME_CMF; } else @@ -567,7 +569,8 @@ riffskip: TrackCount = 1; DeltaTicks = 60; opl.LogarithmicVolumes = true; - opl.CartoonersVolumes = true; + //opl.CartoonersVolumes = true; + opl.m_musicMode = OPL3::MODE_RSXX; opl.m_volumeScale = OPL3::VOLUME_CMF; } } @@ -685,6 +688,7 @@ riffskip: //CurrentPosition.began = true; //std::fprintf(stderr, "Done reading IMF file\n"); opl.NumFourOps = 0; //Don't use 4-operator channels for IMF playing! + opl.m_musicMode = OPL3::MODE_IMF; } else { diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index 2a67590..27ec8d4 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -277,9 +277,10 @@ bool MIDIplay::buildTrackData() //Time delay that follows the first event in the track { MidiTrackRow evtPos; - if(!opl.CartoonersVolumes) + if(opl.m_musicMode == OPL3::MODE_RSXX) + ok = true; + else evtPos.delay = ReadVarLenEx(&trackPtr, end, ok); - else ok = true; if(!ok) { int len = std::snprintf(error, 150, "buildTrackData: Can't read variable-length value at begin of track %d.\n", (int)tk); @@ -526,10 +527,11 @@ bool MIDIplay::buildTrackData() //move too short percussion note-offs far far away as possible /********************************************************************************/ #if 1 //Use this to record WAVEs for comparison before/after implementing of this + if(opl.m_musicMode == OPL3::MODE_MIDI)//Percussion fix is needed for MIDI only, not for IMF/RSXX or CMF { - //! Minimal real time in seconds +//! Minimal real time in seconds #define DRUM_NOTE_MIN_TIME 0.03 - //! Minimal ticks count +//! Minimal ticks count #define DRUM_NOTE_MIN_TICKS 15 struct NoteState { @@ -822,7 +824,7 @@ void MIDIplay::realTime_ResetState() for(size_t ch = 0; ch < Ch.size(); ch++) { MIDIchannel &chan = Ch[ch]; - chan.volume = opl.CartoonersVolumes ? 127 : 100; + chan.volume = (opl.m_musicMode == OPL3::MODE_RSXX) ? 127 : 100; chan.expression = 127; chan.panning = 0x30; chan.vibrato = 0; @@ -842,7 +844,7 @@ void MIDIplay::realTime_ResetState() bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) { - if((opl.CartoonersVolumes) && (velocity != 0)) + if((opl.m_musicMode == OPL3::MODE_RSXX) && (velocity != 0)) { // Check if this is just a note after-touch MIDIchannel::activenoteiterator i = Ch[channel].activenotes.find(note); diff --git a/src/adlmidi_opl3.cpp b/src/adlmidi_opl3.cpp index ef3d3c3..ed005b1 100644 --- a/src/adlmidi_opl3.cpp +++ b/src/adlmidi_opl3.cpp @@ -144,7 +144,8 @@ OPL3::OPL3() : HighVibratoMode(false), AdlPercussionMode(false), LogarithmicVolumes(false), - CartoonersVolumes(false), + //CartoonersVolumes(false), + m_musicMode(MODE_MIDI), m_volumeScale(VOLUME_Generic) {} @@ -264,7 +265,7 @@ void OPL3::Touch_Real(unsigned c, unsigned volume) { true, true } /* 4 op AM-AM ops 3&4 */ }; - if(CartoonersVolumes) + if(m_musicMode == MODE_RSXX) { Poke(card, 0x40 + o1, x); if(o2 != 0xFFF) diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp index 3749129..a0f2a51 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -156,8 +156,15 @@ public: bool ScaleModulators; //! Required to play CMF files. Can be turned on by using of "CMF" volume model bool LogarithmicVolumes; - //! Required to play EA-MUS files - bool CartoonersVolumes; + // ! Required to play EA-MUS files [REPLACED WITH "m_musicMode", DEPRECATED!!!] + //bool CartoonersVolumes; + enum MusicMode + { + MODE_MIDI, + MODE_IMF, + MODE_CMF, + MODE_RSXX + } m_musicMode; //! Just a padding. Reserved. char ___padding2[3]; //! Volume models enum |