aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_midiplay.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r--src/adlmidi_midiplay.cpp23
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;
}