summaryrefslogtreecommitdiff
path: root/soundlib/Load_mo3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'soundlib/Load_mo3.cpp')
-rw-r--r--soundlib/Load_mo3.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/soundlib/Load_mo3.cpp b/soundlib/Load_mo3.cpp
index 7b849b1..5233d50 100644
--- a/soundlib/Load_mo3.cpp
+++ b/soundlib/Load_mo3.cpp
@@ -194,22 +194,29 @@ struct MO3Instrument
panEnv.ConvertToMPT(mptIns.PanEnv, 0);
pitchEnv.ConvertToMPT(mptIns.PitchEnv, 5);
mptIns.nFadeOut = fadeOut;
+
if(midiChannel >= 128)
{
// Plugin
mptIns.nMixPlug = midiChannel - 127;
} else if(midiChannel < 17 && (flags & playOnMIDI))
{
- // XM / IT with recent encoder
+ // XM, or IT with recent encoder
mptIns.nMidiChannel = midiChannel + MidiFirstChannel;
} else if(midiChannel > 0 && midiChannel < 17)
{
// IT encoded with MO3 version prior to 2.4.1 (yes, channel 0 is represented the same way as "no channel")
mptIns.nMidiChannel = midiChannel + MidiFirstChannel;
}
- mptIns.wMidiBank = midiBank;
- mptIns.nMidiProgram = midiPatch;
- mptIns.midiPWD = midiBend;
+ if(mptIns.nMidiChannel != MidiNoChannel)
+ {
+ if(mptIns.wMidiBank < 128)
+ mptIns.wMidiBank = midiBank + 1;
+ if(mptIns.nMidiProgram < 128)
+ mptIns.nMidiProgram = midiPatch + 1;
+ mptIns.midiPWD = midiBend;
+ }
+
if(type == MOD_TYPE_IT)
mptIns.nGlobalVol = std::min<uint8>(globalVol, 128) / 2u;
if(panning <= 256)
@@ -1811,6 +1818,10 @@ bool CSoundFile::ReadMO3(FileReader &file, ModLoadingFlags loadFlags)
break;
}
break;
+ case MagicLE("PRHI"):
+ m_nDefaultRowsPerBeat = chunk.ReadUint8();
+ m_nDefaultRowsPerMeasure = chunk.ReadUint8();
+ break;
case MagicLE("MIDI"):
// Full MIDI config
chunk.ReadStruct<MIDIMacroConfigData>(m_MidiCfg);