mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 15:54:57 +01:00
initial pass at session-renaming functionality
git-svn-id: svn://localhost/ardour2/branches/3.0@9876 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
2d83ffc45a
commit
a5efa9a500
13 changed files with 263 additions and 21 deletions
|
|
@ -623,7 +623,7 @@ Sequence<Time>::start_write()
|
|||
*/
|
||||
template<typename Time>
|
||||
void
|
||||
Sequence<Time>::end_write (bool delete_stuck)
|
||||
Sequence<Time>::end_write (Time when, bool delete_stuck, bool resolve)
|
||||
{
|
||||
WriteLock lock(write_lock());
|
||||
|
||||
|
|
@ -631,27 +631,40 @@ Sequence<Time>::end_write (bool delete_stuck)
|
|||
return;
|
||||
}
|
||||
|
||||
if (resolve) {
|
||||
assert (when != 0);
|
||||
assert (!delete_stuck);
|
||||
}
|
||||
|
||||
DEBUG_TRACE (DEBUG::Sequence, string_compose ("%1 : end_write (%2 notes)\n", this, _notes.size()));
|
||||
|
||||
if (!_percussive && delete_stuck) {
|
||||
if (!_percussive) {
|
||||
|
||||
for (typename Notes::iterator n = _notes.begin(); n != _notes.end() ;) {
|
||||
typename Notes::iterator next = n;
|
||||
++next;
|
||||
|
||||
if ((*n)->length() == 0) {
|
||||
cerr << "WARNING: Stuck note lost: " << (*n)->note() << endl;
|
||||
_notes.erase(n);
|
||||
}
|
||||
|
||||
if (delete_stuck) {
|
||||
cerr << "WARNING: Stuck note lost: " << (*n)->note() << endl;
|
||||
_notes.erase(n);
|
||||
} else if (resolve) {
|
||||
if (when <= (*n)->time()) {
|
||||
cerr << "WARNING: Stuck note resolution - end time @ "
|
||||
<< when << " is before note on: " << (**n) << endl;
|
||||
_notes.erase (*n);
|
||||
} else {
|
||||
(*n)->set_length (when - (*n)->time());
|
||||
cerr << "WARNING: resolved note-on with no note-off to generate " << (**n) << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
n = next;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
if (!_write_notes[i].empty()) {
|
||||
cerr << "WARNING: Sequence<Time>::end_write: Channel " << i << " has "
|
||||
<< _write_notes[i].size() << " stuck notes" << endl;
|
||||
}
|
||||
_write_notes[i].clear();
|
||||
}
|
||||
|
||||
|
|
@ -925,7 +938,7 @@ Sequence<Time>::append_note_off_unlocked (NotePtr note)
|
|||
nn->set_off_velocity (note->velocity());
|
||||
|
||||
_write_notes[note->channel()].erase(n);
|
||||
DEBUG_TRACE (DEBUG::Sequence, string_compose ("resolved note, length: %1\n", nn->length()));
|
||||
DEBUG_TRACE (DEBUG::Sequence, string_compose ("resolved note @ %2 length: %1\n", nn->length(), nn->time()));
|
||||
resolved = true;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue