diff options
-rw-r--r-- | src/adlmidi.cpp | 12 | ||||
-rw-r--r-- | src/adlmidi_midiplay.cpp | 4 | ||||
-rw-r--r-- | src/adlmidi_private.hpp | 8 |
3 files changed, 14 insertions, 10 deletions
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index d0aa85f..12d0e68 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -23,14 +23,6 @@ #include "adlmidi_private.hpp" -#ifdef ADLMIDI_HW_OPL -#define MaxChips 1 -#define MaxChips_STR "1" //Why not just "#MaxCards" ? Watcom fails to pass this with "syntax error" :-P -#else -#define MaxChips 100 -#define MaxChips_STR "100" -#endif - /* Unify MIDI player casting and interface between ADLMIDI and OPNMIDI */ #define GET_MIDI_PLAYER(device) reinterpret_cast<MIDIplay *>((device)->adl_midiPlayer) typedef MIDIplay MidiPlayer; @@ -107,9 +99,9 @@ ADLMIDI_EXPORT int adl_setNumChips(ADL_MIDIPlayer *device, int numChips) #else play->m_setup.numChips = static_cast<unsigned int>(numChips); #endif - if(play->m_setup.numChips < 1 || play->m_setup.numChips > MaxChips) + if(play->m_setup.numChips < 1 || play->m_setup.numChips > ADL_MAX_CHIPS) { - play->setErrorString("number of chips may only be 1.." MaxChips_STR ".\n"); + play->setErrorString("number of chips may only be 1.." ADL_MAX_CHIPS_STR ".\n"); return -1; } diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index 673ec30..1e1da07 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -1465,6 +1465,8 @@ void MIDIplay::killOrEvacuate(size_t from_channel, AdlChannel::LocationData *j, MIDIplay::MIDIchannel::activenoteiterator i) { + uint32_t maxChannels = ADL_MAX_CHIPS * 18; + // Before killing the note, check if it can be // evacuated to another channel as an arpeggio // instrument. This helps if e.g. all channels @@ -1474,6 +1476,8 @@ void MIDIplay::killOrEvacuate(size_t from_channel, { uint16_t cs = static_cast<uint16_t>(c); + if(c >= maxChannels) + break; if(c == from_channel) continue; if(m_synth.m_channelCategory[c] != m_synth.m_channelCategory[from_channel]) diff --git a/src/adlmidi_private.hpp b/src/adlmidi_private.hpp index c3d65c0..59ba555 100644 --- a/src/adlmidi_private.hpp +++ b/src/adlmidi_private.hpp @@ -161,6 +161,14 @@ typedef BW_MidiSequencer MidiSequencer; #define OPL_PANNING_RIGHT 0x20 #define OPL_PANNING_BOTH 0x30 +#ifdef ADLMIDI_HW_OPL +#define ADL_MAX_CHIPS 1 +#define ADL_MAX_CHIPS_STR "1" //Why not just "#MaxCards" ? Watcom fails to pass this with "syntax error" :-P +#else +#define ADL_MAX_CHIPS 100 +#define ADL_MAX_CHIPS_STR "100" +#endif + extern std::string ADLMIDI_ErrorString; /* |