From 295b72b8f05c2c617a62d78baab88e53074df611 Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Wed, 29 Jan 2025 17:27:00 +0100 Subject: [PATCH] Release Note On Velocity Tool v1.0 (#401) --- MIDI/mschnell_Note On Velocity Tool.jsfx | 82 ++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 MIDI/mschnell_Note On Velocity Tool.jsfx diff --git a/MIDI/mschnell_Note On Velocity Tool.jsfx b/MIDI/mschnell_Note On Velocity Tool.jsfx new file mode 100644 index 0000000..c82d797 --- /dev/null +++ b/MIDI/mschnell_Note On Velocity Tool.jsfx @@ -0,0 +1,82 @@ +desc: Note On Velocity Tool +author: Michael Schnell (mschnell@bschnell.de) +version: 1.0 +changelog: initial release +about: + # Note On Velocity Tool + modulates the Note-On velocity of the notes passing through, according to two parameters and a random amount. One of the two parameters can be controlled by Midi CC messages. + + It can be used to humanize recorded loops. E.g. feeding the first parameter by an envelope, the second by a random-walk fluctuation plugin (such as MIDI CC fluctuation), and adding some individual randomness to any note. Randomness for chords results in a multiple-player-alike feeling. + + Parameters: + + "Input Channel" selects the Midi channel for the notes and the CC messages (or "Any" for all channels) + + "Controller for Offset 2" selects the (low resolution) CC message that is used to modulate the second offset (or "-" for no modulation by CC) + + "Controller Factor" sets the factor to be used when modulating Offset2 by CC messages + + "Velocity Offset 1" addition to the velocity + + "Velocity Offset 2" addition to the velocity + + "Velocity Factor" factor imposed on the input velocity after addition + + "Random Factor" amount of additional random velocity to the resulting velocity + + "Random Value" displays the additional random velocity + + +slider1:0<0,16,1{Any,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel +slider2:0<0,128,1{-,0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>Controller for Offset 2 +slider3:1<0,8,0,0.1>Controller Factor +slider4:0<-127,127,1>Velocity Offset 1 +slider5:0<-127,127,1>Velocity Offset 2 +slider6:1<0.5,2,0.01>Velocity factor +slider7:0<0,1,.01>Random Factor +slider10:0<-127,127,1>Random Value + +//////////////////////////////////////////////////////////////////////////////// +@init + statNoteOn = $x90; + statNoteOff = $x80; + statCC = 0xB0; + + +//////////////////////////////////////////////////////////////////////////////// +@slider + inChannel = slider1 - 1; + modCC=slider2-1; + +//////////////////////////////////////////////////////////////////////////////// +@block + while (midirecv(offset, msg1, note, vel)) ( + // Extract message type and channel + status = msg1 & $xF0; + channel = msg1 & $x0F; + // Is it on our channel? + channel == inChannel || inChannel == -1 ? ( + // Is it a note event? + status == statNoteOn ? ( + vel += slider4; + vel += slider5; + vel *= slider6; + r = rand(127+127); + r -=127; + r *= slider7; + slider10 = r; + vel += r; + vel |= 0; + vel <1 ? vel =1 : ( + vel >= 127 ? vel = 127; + ) + ) : status == statCC ? ( + note == modCC ? ( + slider5 = (vel-63.5) * slider3; + ); +// ) : status == statNoteOff ? ( + ); + ); + midisend(offset, msg1 ,note, vel); + +);