diff options
author | Vitaly Novichkov <Wohlstand@users.noreply.github.com> | 2018-10-06 03:24:05 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-06 03:24:05 +0300 |
commit | 3d70e34b258b1042aeea9dca13480cbb61610999 (patch) | |
tree | 7972745dc36ca6c0fdfe2c05ba1173bb4d6bdca6 /src/adlmidi_sequencer.cpp | |
parent | 5e9be04e14cca96551cd19f5ee7597a11ad98a8a (diff) | |
parent | c542a7576de33ecc9c9744cf5a4df7d094af5c47 (diff) | |
download | libADLMIDI-3d70e34b258b1042aeea9dca13480cbb61610999.tar.gz libADLMIDI-3d70e34b258b1042aeea9dca13480cbb61610999.tar.bz2 libADLMIDI-3d70e34b258b1042aeea9dca13480cbb61610999.zip |
Merge pull request #184 from jpcima/reorganize
reorganize the OPL3 chip manager code
Diffstat (limited to 'src/adlmidi_sequencer.cpp')
-rw-r--r-- | src/adlmidi_sequencer.cpp | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/src/adlmidi_sequencer.cpp b/src/adlmidi_sequencer.cpp index 66b9b9a..a1fe5ab 100644 --- a/src/adlmidi_sequencer.cpp +++ b/src/adlmidi_sequencer.cpp @@ -28,6 +28,8 @@ // Inlucde MIDI sequencer class implementation #include "midi_sequencer_impl.hpp" +#include "adlmidi_midiplay.hpp" +#include "adlmidi_opl3.hpp" #include "adlmidi_private.hpp" /**************************************************** @@ -106,37 +108,42 @@ static size_t rtCurrentDevice(void *userdata, size_t track) void MIDIplay::initSequencerInterface() { - std::memset(&m_sequencerInterface, 0, sizeof(BW_MidiRtInterface)); + BW_MidiRtInterface *seq = new BW_MidiRtInterface; + m_sequencerInterface.reset(seq); - m_sequencerInterface.onDebugMessage = hooks.onDebugMessage; - m_sequencerInterface.onDebugMessage_userData = hooks.onDebugMessage_userData; + std::memset(seq, 0, sizeof(BW_MidiRtInterface)); + + seq->onDebugMessage = hooks.onDebugMessage; + seq->onDebugMessage_userData = hooks.onDebugMessage_userData; /* MIDI Real-Time calls */ - m_sequencerInterface.rtUserData = this; - m_sequencerInterface.rt_noteOn = rtNoteOn; - m_sequencerInterface.rt_noteOff = rtNoteOff; - m_sequencerInterface.rt_noteAfterTouch = rtNoteAfterTouch; - m_sequencerInterface.rt_channelAfterTouch = rtChannelAfterTouch; - m_sequencerInterface.rt_controllerChange = rtControllerChange; - m_sequencerInterface.rt_patchChange = rtPatchChange; - m_sequencerInterface.rt_pitchBend = rtPitchBend; - m_sequencerInterface.rt_systemExclusive = rtSysEx; + seq->rtUserData = this; + seq->rt_noteOn = rtNoteOn; + seq->rt_noteOff = rtNoteOff; + seq->rt_noteAfterTouch = rtNoteAfterTouch; + seq->rt_channelAfterTouch = rtChannelAfterTouch; + seq->rt_controllerChange = rtControllerChange; + seq->rt_patchChange = rtPatchChange; + seq->rt_pitchBend = rtPitchBend; + seq->rt_systemExclusive = rtSysEx; /* NonStandard calls */ - m_sequencerInterface.rt_rawOPL = rtRawOPL; - m_sequencerInterface.rt_deviceSwitch = rtDeviceSwitch; - m_sequencerInterface.rt_currentDevice = rtCurrentDevice; + seq->rt_rawOPL = rtRawOPL; + seq->rt_deviceSwitch = rtDeviceSwitch; + seq->rt_currentDevice = rtCurrentDevice; /* NonStandard calls End */ - m_sequencer.setInterface(&m_sequencerInterface); + m_sequencer->setInterface(seq); } double MIDIplay::Tick(double s, double granularity) { - double ret = m_sequencer.Tick(s, granularity); + MidiSequencer &seqr = *m_sequencer; + double ret = seqr.Tick(s, granularity); - s *= m_sequencer.getTempoMultiplier(); - for(uint16_t c = 0; c < m_synth.m_numChannels; ++c) + Synth &synth = *m_synth; + s *= seqr.getTempoMultiplier(); + for(uint16_t c = 0; c < synth.m_numChannels; ++c) m_chipChannels[c].addAge(static_cast<int64_t>(s * 1e6)); updateVibrato(s); |