diff options
author | Vitaly Novichkov <Wohlstand@users.noreply.github.com> | 2018-07-07 19:52:57 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-07 19:52:57 +0300 |
commit | 2d32dd44f7069c88a8b29a67d07e54912e20f024 (patch) | |
tree | 878bcd47a22b32e0216b20d4ced9f580165c262f /src/midi_sequencer_impl.hpp | |
parent | c8dc7434d1d07ffb441e2d4621eea6aa71dc6b63 (diff) | |
parent | e8367d5048b6df7d16ec62a35161d846c41d8358 (diff) | |
download | libADLMIDI-2d32dd44f7069c88a8b29a67d07e54912e20f024.tar.gz libADLMIDI-2d32dd44f7069c88a8b29a67d07e54912e20f024.tar.bz2 libADLMIDI-2d32dd44f7069c88a8b29a67d07e54912e20f024.zip |
Merge pull request #129 from jpcima/track-options-2
SMF track 0 on solo/off mode
Diffstat (limited to 'src/midi_sequencer_impl.hpp')
-rw-r--r-- | src/midi_sequencer_impl.hpp | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/midi_sequencer_impl.hpp b/src/midi_sequencer_impl.hpp index d8edbfb..a0830f0 100644 --- a/src/midi_sequencer_impl.hpp +++ b/src/midi_sequencer_impl.hpp @@ -262,6 +262,7 @@ void BW_MidiSequencer::MidiTrackRow::sortEvents(bool *noteStates) BW_MidiSequencer::BW_MidiSequencer() : m_interface(NULL), m_format(Format_MIDI), + m_smfFormat(0), m_loopEnabled(false), m_fullSongTimeLength(0.0), m_postSongWaitDelay(1.0), @@ -1145,10 +1146,19 @@ BW_MidiSequencer::MidiEvent BW_MidiSequencer::parseEvent(const uint8_t **pptr, c void BW_MidiSequencer::handleEvent(size_t track, const BW_MidiSequencer::MidiEvent &evt, int32_t &status) { - if(m_trackSolo != ~(size_t)0 && track != m_trackSolo) - return; - if(m_trackDisable[track]) - return; + if(track == 0 && m_smfFormat < 2 && evt.type == MidiEvent::T_SPECIAL && + (evt.subtype == MidiEvent::ST_TEMPOCHANGE || evt.subtype == MidiEvent::ST_TIMESIGNATURE)) + { + /* never reject track 0 timing events on SMF format != 2 + note: multi-track XMI convert to format 2 SMF */ + } + else + { + if(m_trackSolo != ~(size_t)0 && track != m_trackSolo) + return; + if(m_trackDisable[track]) + return; + } if(m_interface->onEvent) { @@ -1513,6 +1523,7 @@ bool BW_MidiSequencer::loadMIDI(FileAndMemReader &fr) const size_t headerSize = 4 + 4 + 2 + 2 + 2; // 14 char headerBuf[headerSize] = ""; size_t DeltaTicks = 192, TrackCount = 1; + unsigned Fmt = 0; riffskip: fsize = fr.read(headerBuf, 1, headerSize); @@ -1741,9 +1752,12 @@ riffskip: return false; } - /*size_t Fmt = ReadBEint(HeaderBuf + 8, 2);*/ + Fmt = (unsigned)readBEint(headerBuf + 8, 2); TrackCount = (size_t)readBEint(headerBuf + 10, 2); DeltaTicks = (size_t)readBEint(headerBuf + 12, 2); + + if(Fmt > 2) + Fmt = 1; } } @@ -1861,5 +1875,7 @@ riffskip: return false; } + m_smfFormat = Fmt; + return true; } |