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.cpp32
1 files changed, 28 insertions, 4 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp
index dacb2b1..2470903 100644
--- a/src/adlmidi_midiplay.cpp
+++ b/src/adlmidi_midiplay.cpp
@@ -717,14 +717,30 @@ MIDIplay::MIDIplay():
m_setup.carry = 0.0;
m_setup.tick_skip_samples_delay = 0;
- opl.NumCards = m_setup.NumCards;
- opl.AdlBank = m_setup.AdlBank;
- opl.NumFourOps = m_setup.NumFourOps;
- opl.LogarithmicVolumes = m_setup.LogarithmicVolumes;
+ applySetup();
+}
+
+void MIDIplay::applySetup()
+{
+ m_setup.tick_skip_samples_delay = 0;
opl.HighTremoloMode = m_setup.HighTremoloMode == -1 ? adlbanksetup[m_setup.AdlBank].deepTremolo : (bool)m_setup.HighTremoloMode;
opl.HighVibratoMode = m_setup.HighVibratoMode == -1 ? adlbanksetup[m_setup.AdlBank].deepVibrato : (bool)m_setup.HighVibratoMode;
opl.AdlPercussionMode = m_setup.AdlPercussionMode == -1 ? adlbanksetup[m_setup.AdlBank].adLibPercussions : (bool)m_setup.AdlPercussionMode;
opl.ScaleModulators = m_setup.ScaleModulators == -1 ? adlbanksetup[m_setup.AdlBank].scaleModulators : (bool)m_setup.ScaleModulators;
+ opl.LogarithmicVolumes = m_setup.LogarithmicVolumes;
+ //opl.CartoonersVolumes = false;
+ opl.m_musicMode = OPL3::MODE_MIDI;
+ opl.ChangeVolumeRangesModel(static_cast<ADLMIDI_VolumeModels>(m_setup.VolumeModel));
+ if(m_setup.VolumeModel == ADLMIDI_VolumeModel_AUTO)//Use bank default volume model
+ opl.m_volumeScale = (OPL3::VolumesScale)adlbanksetup[m_setup.AdlBank].volumeModel;
+
+ opl.NumCards = m_setup.NumCards;
+ opl.NumFourOps = m_setup.NumFourOps;
+ cmf_percussion_mode = false;
+
+ opl.Reset(m_setup.PCM_RATE);
+ ch.clear();
+ ch.resize(opl.NumChannels);
}
uint64_t MIDIplay::ReadVarLen(uint8_t **ptr)
@@ -795,6 +811,14 @@ double MIDIplay::Tick(double s, double granularity)
return CurrentPositionNew.wait;
}
+void MIDIplay::TickIteratos(double s)
+{
+ for(uint16_t c = 0; c < opl.NumChannels; ++c)
+ ch[c].AddAge(static_cast<int64_t>(s * 1000.0));
+ UpdateVibrato(s);
+ UpdateArpeggio(s);
+}
+
void MIDIplay::seek(double seconds)
{
if(seconds < 0.0)