diff options
author | Florian Jung <flo@windfisch.org> | 2011-05-17 12:37:51 +0000 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2011-05-17 12:37:51 +0000 |
commit | 231ee5b6243fd9ce02ffad93f99ec6055bc40fe0 (patch) | |
tree | 36aa7614e97dad6abd69b9a3ec3e710e4bc25efd /muse2/muse/functions.cpp | |
parent | 35d776fdb75f4e90954b402a883b1fce72de8239 (diff) |
implemented change existing note's velocity
Diffstat (limited to 'muse2/muse/functions.cpp')
-rw-r--r-- | muse2/muse/functions.cpp | 36 |
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); |