aboutsummaryrefslogtreecommitdiff
path: root/src/midi_sequencer_impl.hpp
diff options
context:
space:
mode:
authorJP Cimalando <jpcima@users.noreply.github.com>2018-07-07 02:03:01 +0200
committerJP Cimalando <jpcima@users.noreply.github.com>2018-07-07 02:40:02 +0200
commit7cb0fe9dad9f7ef24d1142d866450305102bf3a9 (patch)
tree392c55537731346ec8dc65a9f93afb35fbe4f73d /src/midi_sequencer_impl.hpp
parent63f0c95a978902e0896513ca4c7e7e3907da7b9d (diff)
downloadlibADLMIDI-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.hpp30
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,