Synth Forum

Notifications
Clear all

Own script, AI assisted, for Montage-MODX and REAPER DAW.

4 Posts
2 Users
0 Reactions
509 Views
Posts: 207
Reputable Member
Topic starter
 

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

????
????

 
Posted : 07/10/2023 5:32 pm
Jason
Posts: 8238
Illustrious Member
 

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

 
Posted : 07/10/2023 7:15 pm
Posts: 207
Reputable Member
Topic starter
 

[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.

????
????

 
Posted : 07/10/2023 7:43 pm
Jason
Posts: 8238
Illustrious Member
 

Thanks for the helpful details. I can follow your example.

Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R

 
Posted : 07/10/2023 9:51 pm
Share:

© 2024 Yamaha Corporation of America and Yamaha Corporation. All rights reserved.    Terms of Use | Privacy Policy | Contact Us