projects
/
ardour.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
set sidechain port pretty name
[ardour.git]
/
libs
/
ardour
/
midi_model.cc
diff --git
a/libs/ardour/midi_model.cc
b/libs/ardour/midi_model.cc
index fd08428a68d0a06b8bb1a72303d7943df0c26a58..1950fbeb190d2a6e519be494557ebc5c5d1a6f67 100644
(file)
--- a/
libs/ardour/midi_model.cc
+++ b/
libs/ardour/midi_model.cc
@@
-1665,9
+1665,9
@@
MidiModel::resolve_overlaps_unlocked (const NotePtr note, void* arg)
if ((sb > sa) && (eb <= ea)) {
overlap = OverlapInternal;
if ((sb > sa) && (eb <= ea)) {
overlap = OverlapInternal;
- } else if ((eb >
=
sa) && (eb <= ea)) {
+ } else if ((eb > sa) && (eb <= ea)) {
overlap = OverlapStart;
overlap = OverlapStart;
- } else if ((sb > sa) && (sb <
=
ea)) {
+ } else if ((sb > sa) && (sb < ea)) {
overlap = OverlapEnd;
} else if ((sa >= sb) && (sa <= eb) && (ea <= eb)) {
overlap = OverlapExternal;
overlap = OverlapEnd;
} else if ((sa >= sb) && (sa <= eb) && (ea <= eb)) {
overlap = OverlapExternal;
@@
-1983,44
+1983,18
@@
MidiModel::insert_silence_at_start (TimeType t)
}
}
}
}
-/** Transpose notes in a time range by a given number of semitones. Notes
- * will be clamped at 0 and 127 if the transposition would make them exceed
- * that range.
- *
- * @param from Start time.
- * @param end End time.
- * @param semitones Number of semitones to transpose by (+ve is higher, -ve is lower).
- */
void
void
-MidiModel::transpose (
TimeType from, TimeType to
, int semitones)
+MidiModel::transpose (
NoteDiffCommand* c, const NotePtr note_ptr
, int semitones)
{
{
- boost::shared_ptr<const MidiSource> s = midi_source ();
-
- NoteDiffCommand* c = new_note_diff_command (_("transpose"));
-
- for (Notes::iterator i = notes().begin(); i != notes().end(); ++i) {
-
- if ((*i)->time() >= to) {
-
- /* finished */
- break;
+ int new_note = note_ptr->note() + semitones;
- } else if ((*i)->time() >= from) {
-
- int new_note = (*i)->note() + semitones;
-
- if (new_note < 0) {
- new_note = 0;
- } else if (new_note > 127) {
- new_note = 127;
- }
-
- c->change (*i, NoteDiffCommand::NoteNumber, (uint8_t) new_note);
-
- }
+ if (new_note < 0) {
+ new_note = 0;
+ } else if (new_note > 127) {
+ new_note = 127;
}
}
-
apply_command (s->session (), c
);
+
c->change (note_ptr, NoteDiffCommand::NoteNumber, (uint8_t) new_note
);
}
void
}
void