diff options
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r-- | src/adlmidi_midiplay.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index 414427c..358e284 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -200,11 +200,32 @@ void MIDIplay::resetMIDI() m_midiChannels.clear(); m_midiChannels.resize(16, MIDIchannel()); + resetMIDIDefaults(); + caugh_missing_instruments.clear(); caugh_missing_banks_melodic.clear(); caugh_missing_banks_percussion.clear(); } +void MIDIplay::resetMIDIDefaults(int offset) +{ + Synth &synth = *m_synth; + + for(size_t c = offset, n = m_midiChannels.size(); c < n; ++c) + { + MIDIchannel &ch = m_midiChannels[c]; + if(synth.m_musicMode == Synth::MODE_XMIDI) + { + ch.def_volume = 127; + ch.def_bendsense_lsb = 0; + ch.def_bendsense_msb = 12; + } + else + if(synth.m_musicMode == Synth::MODE_RSXX) + ch.def_volume = 127; + } +} + void MIDIplay::TickIterators(double s) { Synth &synth = *m_synth; @@ -257,7 +278,6 @@ void MIDIplay::realTime_ResetState() { MIDIchannel &chan = m_midiChannels[ch]; chan.resetAllControllers(); - chan.volume = (synth.m_musicMode == Synth::MODE_RSXX) ? 127 : 100; chan.vibpos = 0.0; chan.lastlrpn = 0; chan.lastmrpn = 0; @@ -1698,6 +1718,7 @@ size_t MIDIplay::chooseDevice(const std::string &name) size_t n = m_midiDevices.size() * 16; m_midiDevices.insert(std::make_pair(name, n)); m_midiChannels.resize(n + 16); + resetMIDIDefaults(n); return n; } |