diff options
author | Tim E. Real <termtech@rogers.com> | 2011-02-09 22:37:27 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2011-02-09 22:37:27 +0000 |
commit | d7f4820023196bfc7d40ef5fa134bc46a6e55849 (patch) | |
tree | fa00ee04c060c2ece1122f9d3fee382b0d5f043c /muse2/muse/mididev.cpp | |
parent | e11f572d97bb761d848fad41991d0ed747bad111 (diff) |
Mini MIDI overhaul. Please see ChangeLog.
Diffstat (limited to 'muse2/muse/mididev.cpp')
-rw-r--r-- | muse2/muse/mididev.cpp | 27 |
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) |