aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_load.cpp
diff options
context:
space:
mode:
authorVitaly Novichkov <admin@wohlnet.ru>2018-09-30 04:57:56 +0300
committerVitaly Novichkov <admin@wohlnet.ru>2018-09-30 04:57:56 +0300
commitc971992278519b29768be349dd3962bbd93dbb22 (patch)
treeee1ece6c4c28a7784c02cc2d9a8aaecc4808fd29 /src/adlmidi_load.cpp
parent4cf3a53ed36e56985753a9d0ec5ba564d6043460 (diff)
downloadlibADLMIDI-c971992278519b29768be349dd3962bbd93dbb22.tar.gz
libADLMIDI-c971992278519b29768be349dd3962bbd93dbb22.tar.bz2
libADLMIDI-c971992278519b29768be349dd3962bbd93dbb22.zip
Lock settings for CMF and IMF playing to don't destroy them
For now, all settings are in safe, except of custom bank that getting be dropped away by CMF file that does passing of own custom instruments.
Diffstat (limited to 'src/adlmidi_load.cpp')
-rw-r--r--src/adlmidi_load.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/adlmidi_load.cpp b/src/adlmidi_load.cpp
index e86f23e..07ad875 100644
--- a/src/adlmidi_load.cpp
+++ b/src/adlmidi_load.cpp
@@ -1,4 +1,4 @@
-/*
+/*
* libADLMIDI is a free MIDI to WAV conversion library with OPL3 emulation
*
* Original ADLMIDI code: Copyright (c) 2010-2014 Joel Yliluoma <bisqwit@iki.fi>
@@ -214,20 +214,36 @@ bool MIDIplay::LoadMIDI_post()
m_synth.m_rhythmMode = true;
m_synth.m_musicMode = OPL3::MODE_CMF;
m_synth.m_volumeScale = OPL3::VOLUME_NATIVE;
+
+ m_synth.m_numChips = 1;
+ m_synth.m_numFourOps = 0;
}
else if(format == MidiSequencer::Format_RSXX)
{
//opl.CartoonersVolumes = true;
m_synth.m_musicMode = OPL3::MODE_RSXX;
m_synth.m_volumeScale = OPL3::VOLUME_NATIVE;
+
+ m_synth.m_numChips = 1;
+ m_synth.m_numFourOps = 0;
}
else if(format == MidiSequencer::Format_IMF)
{
//std::fprintf(stderr, "Done reading IMF file\n");
m_synth.m_numFourOps = 0; //Don't use 4-operator channels for IMF playing!
m_synth.m_musicMode = OPL3::MODE_IMF;
+
+ m_synth.m_numChips = 1;
+ m_synth.m_numFourOps = 0;
+ }
+ else
+ {
+ m_synth.m_numChips = m_setup.numChips;
+ if(m_setup.numFourOps < 0)
+ adlCalculateFourOpChannels(this, true);
}
+ m_setup.tick_skip_samples_delay = 0;
m_synth.reset(m_setup.emulator, m_setup.PCM_RATE, this); // Reset OPL3 chip
//opl.Reset(); // ...twice (just in case someone misprogrammed OPL3 previously)
m_chipChannels.clear();