diff options
author | JP Cimalando <jpcima@users.noreply.github.com> | 2018-07-07 02:03:01 +0200 |
---|---|---|
committer | JP Cimalando <jpcima@users.noreply.github.com> | 2018-07-07 02:40:02 +0200 |
commit | 7cb0fe9dad9f7ef24d1142d866450305102bf3a9 (patch) | |
tree | 392c55537731346ec8dc65a9f93afb35fbe4f73d /src/midi_sequencer_impl.hpp | |
parent | 63f0c95a978902e0896513ca4c7e7e3907da7b9d (diff) | |
download | libADLMIDI-7cb0fe9dad9f7ef24d1142d866450305102bf3a9.tar.gz libADLMIDI-7cb0fe9dad9f7ef24d1142d866450305102bf3a9.tar.bz2 libADLMIDI-7cb0fe9dad9f7ef24d1142d866450305102bf3a9.zip |
sequencer API to turn tracks on/off/solo
Diffstat (limited to 'src/midi_sequencer_impl.hpp')
-rw-r--r-- | src/midi_sequencer_impl.hpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/midi_sequencer_impl.hpp b/src/midi_sequencer_impl.hpp index ce70c3e..d8edbfb 100644 --- a/src/midi_sequencer_impl.hpp +++ b/src/midi_sequencer_impl.hpp @@ -271,7 +271,8 @@ BW_MidiSequencer::BW_MidiSequencer() : m_atEnd(false), m_loopStart(false), m_loopEnd(false), - m_invalidLoop(false) + m_invalidLoop(false), + m_trackSolo(~(size_t)0) {} BW_MidiSequencer::~BW_MidiSequencer() @@ -307,6 +308,25 @@ BW_MidiSequencer::FileFormat BW_MidiSequencer::getFormat() return m_format; } +size_t BW_MidiSequencer::getTrackCount() const +{ + return m_trackData.size(); +} + +bool BW_MidiSequencer::setTrackEnabled(size_t track, bool enable) +{ + size_t trackCount = m_trackData.size(); + if(track >= trackCount) + return false; + m_trackDisable[track] = !enable; + return true; +} + +void BW_MidiSequencer::setSoloTrack(size_t track) +{ + m_trackSolo = track; +} + const std::vector<BW_MidiSequencer::CmfInstrument> BW_MidiSequencer::getRawCmfInstruments() { return m_cmfInstruments; @@ -362,6 +382,8 @@ bool BW_MidiSequencer::buildTrackData(const std::vector<std::vector<uint8_t> > & m_fullSongTimeLength = 0.0; m_loopStartTime = -1.0; m_loopEndTime = -1.0; + m_trackDisable.clear(); + m_trackSolo = ~(size_t)0; m_musTitle.clear(); m_musCopyright.clear(); m_musTrackTitles.clear(); @@ -369,6 +391,7 @@ bool BW_MidiSequencer::buildTrackData(const std::vector<std::vector<uint8_t> > & m_trackData.clear(); const size_t trackCount = trackData.size(); m_trackData.resize(trackCount, MidiTrackQueue()); + m_trackDisable.resize(trackCount); m_invalidLoop = false; bool gotLoopStart = false, gotLoopEnd = false, gotLoopEventInThisRow = false; @@ -1122,6 +1145,11 @@ 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(m_interface->onEvent) { m_interface->onEvent(m_interface->onEvent_userData, |