Hi...
I am so delighted with my latest script I cannot stop myself from placing it at the disposal of everyone.
Made for REAPER DAW....and any MIDI keyboard.
It is a little part of my humble collection of scripts named JSFX Keyboardist collection. FGM using AI.
Risen from deep necessity, done in best of friendships,
be it day or night helpers never rejected advise,
enjoyed daily, hourly, immensely, true happiness, pure fun
and hoping they all do serve very well everyone meeting them,
so easy to find...
https://forum.cockos.com/showthread.php?t=279068
This one, FGM #ADD FIXED NOTES #FGM, allows adding up to 5 notes, each with its own velocity.
Works on any of the 16 MIDI channels.
First option uses a window that sets the keyboard to remain silent or do sound.
To add those notes a range of keys can be selected via two windows, going from a single key to the whole keyboard.
,
The display shows notes like Oct -1 0 C-1 8.2 Hz, meaning Octave number, name of note (A4 is midi 69) and the frequency assuming A4@440 Hz.
Once the range triggering other notes is selected, a lowest and highest velocity are also set to trigger them.
The selected range can also be adjusted to remain silent all the time, be sounding all the time or sound but go muted if any notes are triggered.
Then up to 5 notes can be set along MIDI to be triggered and use a given velocity.
The sliders for velocity go from -1 to 127. Use -1 to play real velocity, 0 if you want to silent that note. Double click to go back to 0.
I am so happyyy I cannot tell....
There we go.....
////START OF SCRIPT
//
desc: FGM #ADD FIXED NOTES #FGM
//
// Script by FGM using AI
//
// FGM #ADD FIXED NOTES #FGM
//
// SET A SILENT OR SOUNDING KEYBOARD
// SET LOWEST KEY TO TRIGGER OTHER NOTES
// SET HIGHEST KEY TO TRIGGER OTHER NOTES
// SET TRIGGERING RANGE TO EITHER 1- SILENT, 2- SOUND OR 3- GO MUTED IF TRIGGERING OTHER NOTES
// SET KEY VELOCITY RANGE TO TRIGGER OTHER NOTES
// SET VELOCITY OUT TO 0 FOR THOSE NOTES NOT NEEDED
// SET VELOCITY TO -1 TO USE REAL VELOCITY
//
// SET FIRST FIXED NOTE
// SET FIRST FIXED VELOCITY OUT
// SET SECOND FIXED NOTE
// SET SECOND FIXED VELOCITY OUT
// SET THIRD FIXED NOTE
// SET THIRD FIXED VELOCITY OUT
// SET FOURTH FIXED NOTE
// SET FOURTH FIXED VELOCITY OUT
// SET FIFTH FIXED NOTE
// SET FIFTH FIXED VELOCITY OUT
//
slider1:0====>
slider3: 60 ====>
slider4: 69 ====>
slider5:0====>
slider7:0Lowest Triggering Velocity
slider8:127Highest Triggering Velocity
slider10: 0====>
slider11:0Velocity OUT (-1 for Real)
slider20: 0====>
slider21:0Velocity OUT (-1 for Real)
slider30: 0====>
slider31:0Velocity OUT (-1 for Real)
slider40: 0====>
slider41:0Velocity OUT (-1 for Real)
slider50: 0====>
slider51:0Velocity OUT (-1 for Real)
@slider
lowest_trigger_key = slider3;
highest_trigger_key = slider4;
key_behavior = slider5;
lowest_velocity = slider7;
highest_velocity = slider8;
fixedNote1 = slider10;
fixedVelocity1 = slider11;
fixedNote2 = slider20;
fixedVelocity2 = slider21;
fixedNote3 = slider30;
fixedVelocity3 = slider31;
fixedNote4 = slider40;
fixedVelocity4 = slider41;
fixedNote5 = slider50;
fixedVelocity5 = slider51;
whole_keyboard_sound = slider1;
@block
while (midirecv(offset,msg1,msg2,msg3))
(
(msg1 >= $x80 && msg1 <= $x9F) ?
(
(msg2 >= lowest_trigger_key && msg2 <= highest_trigger_key) ? (
(!(key_behavior == 0 || (key_behavior == 2 && msg3 >= lowest_velocity && msg3 <= highest_velocity && (msg1 & $xF0) != $x80))) ? (
midisend(offset, msg1, msg2, msg3);
) : (0;);
((msg1 & $xF0) == $x90 && msg3 >= lowest_velocity && msg3 <= highest_velocity) ? (
(fixedNote1 >= 0) ? (
midisend(offset, msg1, fixedNote1, (fixedVelocity1 == -1) ? msg3 : fixedVelocity1);
) : (0;);
(fixedNote2 >= 0) ? (
midisend(offset, msg1, fixedNote2, (fixedVelocity2 == -1) ? msg3 : fixedVelocity2);
) : (0;);
(fixedNote3 >= 0) ? (
midisend(offset, msg1, fixedNote3, (fixedVelocity3 == -1) ? msg3 : fixedVelocity3);
) : (0;);
(fixedNote4 >= 0) ? (
midisend(offset, msg1, fixedNote4, (fixedVelocity4 == -1) ? msg3 : fixedVelocity4);
) : (0;);
(fixedNote5 >= 0) ? (
midisend(offset, msg1, fixedNote5, (fixedVelocity5 == -1) ? msg3 : fixedVelocity5);
) : (0;);
);
((msg1 & $xF0) == $x80 || ((msg1 & $xF0) == $x90 && msg3 == 0)) ? (
midisend(offset, $x80 | (msg1 & $x0F), fixedNote1, 0);
midisend(offset, $x80 | (msg1 & $x0F), fixedNote2, 0);
midisend(offset, $x80 | (msg1 & $x0F), fixedNote3, 0);
midisend(offset, $x80 | (msg1 & $x0F), fixedNote4, 0);
midisend(offset, $x80 | (msg1 & $x0F), fixedNote5, 0);
);
) : (
whole_keyboard_sound == 1 ? midisend(offset, msg1, msg2, msg3) : (0;);
);
);
);
//
////END OF SCRIPT
????
????
YUPIIII
????
????
Thanks for sharing even though I haven't figured out what it does in terms of "practical" applications.
Maybe the other forum you provided a link for already has good documentation. I admit I haven't looked there yet.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
[quotePost id=123558]Thanks for sharing even though I haven't figured out what it does in terms of "practical" applications.
Maybe the other forum you provided a link for already has good documentation. I admit I haven't looked there yet.[/quotePost]
// SET A SILENT OR SOUNDING KEYBOARD
// SET LOWEST KEY TO TRIGGER OTHER NOTES
// SET HIGHEST KEY TO TRIGGER OTHER NOTES
// SET TRIGGERING RANGE TO EITHER 1- SILENT, 2- SOUND OR 3- GO MUTED IF TRIGGERING OTHER NOTES
// SET KEY VELOCITY RANGE TO TRIGGER OTHER NOTES
// SET VELOCITY OUT TO 0 FOR THOSE NOTES NOT NEEDED
// SET VELOCITY TO -1 TO USE REAL VELOCITY
//
// SET FIRST FIXED NOTE
// SET FIRST FIXED VELOCITY OUT
I love using it to go changing articulations, variations, playing techniques
via those key switches often seen in many VSTs
by simply assigning the first note to be added
to that key switch, its velocity 1 or any higher.
Also, say you are using a drum kit.
When playing, key D5 calls for a gong.
You want a gong that is placed at D2.
When testing velocities you see 35 is the one that matches the sound.
So you want the sound placed at D2 with velocity 35 but triggered from D5 as per your fingering.
Since the VST offers many different other sounds an none are needed, set the slider 1 to Silent.
// SET A SILENT OR SOUNDING KEYBOARD
Slider 2 to D5.
// SET LOWEST KEY TO TRIGGER OTHER NOTES
Slider 3 to D5.
// SET HIGHEST KEY TO TRIGGER OTHER NOTES
Given the set range, just a single key will trigger the sound, being D5.
Set next slider to silent since the sound at D5 is of no interest.
// SET TRIGGERING RANGE TO EITHER 1- SILENT, 2- SOUND OR 3- GO MUTED IF TRIGGERING OTHER NOTES
Set now velocities, 0 to 127 if everytime you press D5 want the sound at D2 to be triggered.
// SET KEY VELOCITY RANGE TO TRIGGER OTHER NOTES
Or set velocities to 90 and 127 so that you can go over D5 with less
than velocity 90 without triggering the gong, finally
triggering ity when going at 90 or above.
// SET KEY VELOCITY RANGE TO TRIGGER OTHER NOTES
Now set any of the 5 sliders to trigger other notes to D2 and velocity 35.
// SET FIRST FIXED NOTE
// SET FIRST FIXED VELOCITY OUT
Done.
????
????
Thanks for the helpful details. I can follow your example.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R