summaryrefslogtreecommitdiff
path: root/muse2/muse/functions.cpp
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2011-05-17 12:37:51 +0000
committerFlorian Jung <flo@windfisch.org>2011-05-17 12:37:51 +0000
commit231ee5b6243fd9ce02ffad93f99ec6055bc40fe0 (patch)
tree36aa7614e97dad6abd69b9a3ec3e710e4bc25efd /muse2/muse/functions.cpp
parent35d776fdb75f4e90954b402a883b1fce72de8239 (diff)
implemented change existing note's velocity
Diffstat (limited to 'muse2/muse/functions.cpp')
-rw-r--r--muse2/muse/functions.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp
index e14f32b8..55daee2c 100644
--- a/muse2/muse/functions.cpp
+++ b/muse2/muse/functions.cpp
@@ -197,6 +197,42 @@ void modify_velocity(const set<Part*>& parts, int range, int rate, int offset)
}
}
+void modify_off_velocity(const set<Part*>& parts, int range, int rate, int offset)
+{
+ map<Event*, Part*> events = get_events(parts, range);
+
+ if ( (!events.empty()) && ((rate!=100) || (offset!=0)) )
+ {
+ song->startUndo();
+
+ for (map<Event*, Part*>::iterator it=events.begin(); it!=events.end(); it++)
+ {
+ Event& event=*(it->first);
+ Part* part=it->second;
+
+ int velo = event.veloOff();
+
+ velo = (velo * rate) / 100;
+ velo += offset;
+
+ if (velo <= 0)
+ velo = 1;
+ else if (velo > 127)
+ velo = 127;
+
+ if (event.veloOff() != velo)
+ {
+ Event newEvent = event.clone();
+ newEvent.setVeloOff(velo);
+ // Indicate no undo, and do not do port controller values and clone parts.
+ audio->msgChangeEvent(event, newEvent, part, false, false, false);
+ }
+ }
+
+ song->endUndo(SC_EVENT_MODIFIED);
+ }
+}
+
void modify_notelen(const set<Part*>& parts, int range, int rate, int offset)
{
map<Event*, Part*> events = get_events(parts, range);