diff options
author | Tim E. Real <termtech@rogers.com> | 2011-09-09 10:04:11 +0000 |
---|---|---|
committer | Tim E. Real <termtech@rogers.com> | 2011-09-09 10:04:11 +0000 |
commit | 2120ea4f083228dde0d7307203391a4ec8f57e2d (patch) | |
tree | 3f8b5c3aeb6691c962d42fb4e3a01bcf511f023f /muse2/muse/mididev.cpp | |
parent | ad72332d2cbd0d22e5d49d9fd60c985e563b17d0 (diff) |
Mostly engine fixes/corrections. Please see ChangeLog.
Diffstat (limited to 'muse2/muse/mididev.cpp')
-rw-r--r-- | muse2/muse/mididev.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/muse2/muse/mididev.cpp b/muse2/muse/mididev.cpp index a97ac1fb..a06303e1 100644 --- a/muse2/muse/mididev.cpp +++ b/muse2/muse/mididev.cpp @@ -4,6 +4,7 @@ // $Id: mididev.cpp,v 1.10.2.6 2009/11/05 03:14:35 terminator356 Exp $ // // (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +// (C) Copyright 2011 Tim E. Real (terminator356 on users dot sourceforge dot net) // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -596,6 +597,34 @@ bool MidiDevice::putEvent(const MidiPlayEvent& ev) } //--------------------------------------------------------- +// processStuckNotes +//--------------------------------------------------------- + +void MidiDevice::processStuckNotes() +{ + // Must be playing for valid nextTickPos, right? But wasn't checked in Audio::processMidi(). + // audio->isPlaying() might not be true during seek right now. + //if(audio->isPlaying()) + { + bool extsync = extSyncFlag.value(); + int frameOffset = audio->getFrameOffset(); + unsigned nextTick = audio->nextTick(); + iMPEvent k; + for (k = _stuckNotes.begin(); k != _stuckNotes.end(); ++k) { + if (k->time() >= nextTick) + break; + MidiPlayEvent ev(*k); + if(extsync) // p3.3.25 + ev.setTime(k->time()); + else + ev.setTime(tempomap.tick2frame(k->time()) + frameOffset); + _playEvents.add(ev); + } + _stuckNotes.erase(_stuckNotes.begin(), k); + } +} + +//--------------------------------------------------------- // handleStop //--------------------------------------------------------- |