if ((sb > sa) && (eb <= ea)) {
overlap = OverlapInternal;
- } else if ((eb >= sa) && (eb <= ea)) {
+ } else if ((eb > sa) && (eb <= ea)) {
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;
}
}
-/** 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
-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