summaryrefslogtreecommitdiff
path: root/muse2/muse/mididev.cpp
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2011-02-09 22:37:27 +0000
committerTim E. Real <termtech@rogers.com>2011-02-09 22:37:27 +0000
commitd7f4820023196bfc7d40ef5fa134bc46a6e55849 (patch)
treefa00ee04c060c2ece1122f9d3fee382b0d5f043c /muse2/muse/mididev.cpp
parente11f572d97bb761d848fad41991d0ed747bad111 (diff)
Mini MIDI overhaul. Please see ChangeLog.
Diffstat (limited to 'muse2/muse/mididev.cpp')
-rw-r--r--muse2/muse/mididev.cpp27
1 files changed, 26 insertions, 1 deletions
diff --git a/muse2/muse/mididev.cpp b/muse2/muse/mididev.cpp
index 0aab9a71..10be79ef 100644
--- a/muse2/muse/mididev.cpp
+++ b/muse2/muse/mididev.cpp
@@ -73,7 +73,7 @@ void MidiDevice::init()
_rwFlags = 3;
_openFlags = 3;
_port = -1;
- _nextPlayEvent = _playEvents.begin();
+ // _nextPlayEvent = _playEvents.begin(); // Removed p4.0.15 Tim.
}
//---------------------------------------------------------
@@ -443,9 +443,34 @@ bool MidiDevice::sendNullRPNParams(int chn, bool nrpn)
}
//---------------------------------------------------------
+// putEventWithRetry
+// return true if event cannot be delivered
+// This method will try to putEvent 'tries' times, waiting 'delayUs' microseconds between tries.
+// NOTE: Since it waits, it should not be used in RT or other time-sensitive threads. p4.0.15 Tim.
+//---------------------------------------------------------
+
+bool MidiDevice::putEventWithRetry(const MidiPlayEvent& ev, int tries, long delayUs)
+{
+ // TODO: Er, probably not the best way to do this.
+ // Maybe try to correlate with actual audio buffer size instead of blind time delay.
+ for( ; tries > 0; --tries)
+ {
+ if(!putEvent(ev)) // Returns true if event cannot be delivered.
+ return false;
+
+ bool sleepOk = -1;
+ while(sleepOk == -1)
+ sleepOk = usleep(delayUs); // FIXME: usleep is supposed to be depricated!
+ }
+ return true;
+}
+
+//---------------------------------------------------------
// putEvent
// return true if event cannot be delivered
// TODO: retry on controller putMidiEvent
+// (Note: Since putEvent is virtual and there are different versions,
+// a retry facility is now found in putEventWithRetry. p4.0.15 Tim)
//---------------------------------------------------------
bool MidiDevice::putEvent(const MidiPlayEvent& ev)