script pour transformer du MIDI en temps réel ?
- 4 réponses
- 2 participants
- 609 vues
- 2 followers
cslevine
738
Posteur·euse AFfolé·e
Membre depuis 19 ans
Sujet de la discussion Posté le 25/02/2020 à 12:00:12script pour transformer du MIDI en temps réel ?
Bonjour
j'ai l'impression que les scripts dans Reaper ne peuvent s'appliquer qu'à du traitement en temps différé.
Des scripts des plus intéressants en MIDI, mais y'a t'il la possibilité, dans Reaper, de faire l'équivalant du LOGICAL EDIT ou LOGICAL TRANSFORMER de CUBASE,
qui permet d'opérer des transformations EN TEMPS REEL sur du jeu MIDI.
Par exemple, je peux avec CUBASE, transformer des MIDI NOTE en Program Change, et ainsi me faire une gamme de sons d'étoiles à partir du clavier MIDI directement. Je ne vois aucun autre logiciel qui le fasse.
Aussi, je peux transformer un controleur Expression #11 en controlleur Modulation #1 tout en inversant la plage des valeurs, etc. etc. et cela en temps réel directement en entrrée MIDI IN ou bien, mieux, en ressortie de piste MIDI qui aura enregistré les datas d'origine.
Je ne sais pas si c'est faisable dans Reaper.
j'ai l'impression que les scripts dans Reaper ne peuvent s'appliquer qu'à du traitement en temps différé.
Des scripts des plus intéressants en MIDI, mais y'a t'il la possibilité, dans Reaper, de faire l'équivalant du LOGICAL EDIT ou LOGICAL TRANSFORMER de CUBASE,
qui permet d'opérer des transformations EN TEMPS REEL sur du jeu MIDI.
Par exemple, je peux avec CUBASE, transformer des MIDI NOTE en Program Change, et ainsi me faire une gamme de sons d'étoiles à partir du clavier MIDI directement. Je ne vois aucun autre logiciel qui le fasse.
Aussi, je peux transformer un controleur Expression #11 en controlleur Modulation #1 tout en inversant la plage des valeurs, etc. etc. et cela en temps réel directement en entrrée MIDI IN ou bien, mieux, en ressortie de piste MIDI qui aura enregistré les datas d'origine.
Je ne sais pas si c'est faisable dans Reaper.
Turangalîla Symphonie d'Olivier Messiaen, version Cubase : http://www.cslevine.com/2012/Turangalila.htm
utilisant Synful Orchestra, Pianoteq, Wivi Band, et Kontakt 2
Zorks
1197
AFicionado·a
Membre depuis 9 ans
2 Posté le 25/02/2020 à 13:06:02
Le MIDI est traite en temps réel par les effets sur la piste, donc tu insère le script dans les effets (JS si tu as besoin d'un script custom, ou en lua, ou en python, selon tes préférences).
Tu le mets dans les effets de la piste, ou sur le traitement de l'input, si tu veux juste taiter les donnees en entrée pour enregistrer le résultat final.
Exemple : "JS: MIDI CC Mapper" pour mapper les CC comme tu le décris. Tu peux en chaîner autant que tu veux.
Si tu ne trouves pas de plugin JS correspondant a ton besoin spécifique, regarde par exemple JS:MIDI Note to Channel, assez facile a transposer en "Note to CC",
ou les autres "JS: MIDI ..." pour des exmples un peu plus complexes.
J’espère que je réponds a la question
Hors sujet bonus
Tu le mets dans les effets de la piste, ou sur le traitement de l'input, si tu veux juste taiter les donnees en entrée pour enregistrer le résultat final.
Exemple : "JS: MIDI CC Mapper" pour mapper les CC comme tu le décris. Tu peux en chaîner autant que tu veux.
Si tu ne trouves pas de plugin JS correspondant a ton besoin spécifique, regarde par exemple JS:MIDI Note to Channel, assez facile a transposer en "Note to CC",
....
while (
midirecv(ts, msg1, msg23) ? (
m = msg1&240;
n = msg23&127;
((m == NOTE_ON*16 || m == NOTE_OFF*16) && n == note) ? (
msg1 = m+channel;
);
midisend(ts, msg1, msg23);
);
);
....
ou les autres "JS: MIDI ..." pour des exmples un peu plus complexes.
J’espère que je réponds a la question
Hors sujet bonus
[ Dernière édition du message le 25/02/2020 à 13:08:36 ]
cslevine
738
Posteur·euse AFfolé·e
Membre depuis 19 ans
3 Posté le 25/02/2020 à 20:02:17
Et bien, Merci ! C'est génial !!
Ca y répond.
Ben quelle puissance alors.
( et en + un jeu de plateforme)
Ca y répond.
Ben quelle puissance alors.
( et en + un jeu de plateforme)
Turangalîla Symphonie d'Olivier Messiaen, version Cubase : http://www.cslevine.com/2012/Turangalila.htm
utilisant Synful Orchestra, Pianoteq, Wivi Band, et Kontakt 2
cslevine
738
Posteur·euse AFfolé·e
Membre depuis 19 ans
4 Posté le 28/02/2020 à 10:39:28
j'ai regardé de plus près le script.
Et bien pour s'y retrouver, je comprends pourquoi on ne dit plus "programmation", mais "codage".
Rien n'est aussi puissant que le Logical Edit de CUBASE, pour une simple et bonne raison :
un NOTE On, un controlleur MIDI, etc. c'est clairement nommé,
les conditions booléennes sont également clairement nommées.
Tandis qu'avec ça ...
En fait la philosophe :
Reaper, c'est un DAW conçu par un informaticien.
Cubase, a dès le départ été conçu par des musiciens.
La voilà, la différence.
Et bien pour s'y retrouver, je comprends pourquoi on ne dit plus "programmation", mais "codage".
Rien n'est aussi puissant que le Logical Edit de CUBASE, pour une simple et bonne raison :
un NOTE On, un controlleur MIDI, etc. c'est clairement nommé,
les conditions booléennes sont également clairement nommées.
Tandis qu'avec ça ...
En fait la philosophe :
Reaper, c'est un DAW conçu par un informaticien.
Cubase, a dès le départ été conçu par des musiciens.
La voilà, la différence.
Citation :
while (
midirecv(ts, msg1, msg23) ? (
m = msg1&240;
n = msg23&127;
((m == NOTE_ON*16 || m == NOTE_OFF*16) && n == note) ? (
msg1 = m+channel;
);
midisend(ts, msg1, msg23);
);
);
Turangalîla Symphonie d'Olivier Messiaen, version Cubase : http://www.cslevine.com/2012/Turangalila.htm
utilisant Synful Orchestra, Pianoteq, Wivi Band, et Kontakt 2
Zorks
1197
AFicionado·a
Membre depuis 9 ans
5 Posté le 28/02/2020 à 11:59:16
Pas de panique, la communaute est la ! :
Google "Reaper note to CC", le premier résultat c'est https://forum.cockos.com/showthread.php?t=21199
Avec ce script (telecharger dans le lien ci dessus, ou bien coller dans un fichier le texte ci dessous et sauvegarder dans le répertoire des plugins)
Je suppose que c'est un changement de paradigme :
avec Reaper, sont fournis quelques scripts de base, a partir d'outils elementaires et universels. Libre a chacun d'ajuster a ses besoins, et de partager.
Avec un "DAW fait par des musiciens", et bien, ce sont ces musiciens, avec leur savoir-faire, qui décident de quels outils on a besoin pour faire de la musique.
Google "Reaper note to CC", le premier résultat c'est https://forum.cockos.com/showthread.php?t=21199
Avec ce script (telecharger dans le lien ci dessus, ou bien coller dans un fichier le texte ci dessous et sauvegarder dans le répertoire des plugins)
Spoiler - Cliquer ici pour lire la suite
// MIDI_Note_to_CC_v1.0, Xackley 5-10-2008
desc:MIDI Note To CC
slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Output MIDI Channel
slider2:10<0,127,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
slider3:60<1,127,1>Center(=64) Note In
slider4:1<1,127,1>Minimum Note In
slider5:127<1,127,1>Maximum Note In
slider6:1<.25,64,.25>Multiply Output Value
slider7:0<0,1,1{No,Yes}>Invert Output Value
slider8:8<0,10,1{0,1/512,1/256,1/128,1/64,1/32,1/16,1/8,1/4,1/2,1,1.5,2,3,4,5,6,7,8,9}>Hold Held Notes For
slider9:0<0,10,1{0,1/512,1/256,1/128,1/64,1/32,1/16,1/8,1/4,1/2,1}>Auto Update At Beat
slider10:127<1,127,1>|__Auto Step Size
slider11:0<0,1,1{On,Off}>Output Generated Value
slider12:1<0,1,1{When not used to create CC,Play all Notes,Block All Notes}>Output Original Message
slider14:64<1,127,1>Current Value Out
////////////////////////////////////////////////////////////////////
@slider
channel = slider1;
CC = slider2;
cent = (64-slider3)*mult;
fix = (mult-1)*64 -cent;
btm = slider4;
top = slider5;
mult = slider6 ;
inv = slider7;
bars = up[slider8]*4;
auto = up[slider9]*4;
smooth = slider10;
out = 1-slider11;
original= 1-slider12;
/////////////////////////////////////////////////////////////////////
@init
ext_noinit = 1 ;
up[0] = 0;
up[1] = 1/512;
up[2] = 1/256;
up[3] = 1/128;
up[4] = 1/64;
up[5] = 1/32;
up[6] = 1/16;
up[7] = 1/8;
up[8] = 1/4;
up[9] = 1/2;
up[10] = 1;
up[11] = 1.5;
up[12] = 2;
up[13] = 3;
up[14] = 4;
up[15] = 5;
up[16] = 6;
up[17] = 7;
up[18] = 8;
up[19] = 9;
channel = slider1;
CC = slider2;
cent = (64-slider3)*mult;
fix = (mult-1)*64 -cent;
btm = slider4;
top = slider5;
mult = slider6 ;
inv = slider7;
bars = up[slider8]*4;
auto = up[slider9]*4;
smooth = slider10;
out = 1-slider11;
original= 1-slider12;
Value = slider14;
//////////////////////////////////////////////////////////////////////
@sample
slider14 != value ? (
value = savevalueSent = savevalueTarget = slider14;
midisend(ts,11*16 + channel,cc|(value*256));
);
play != play_state%2 ? (
midisend(ts,11*16 + channel,cc|(value*256));
);
play = play_state%2;
beat_position < savebeat2 ? (
value = savevalueSent = savevalueTarget = slider14;
savebeat2 = beat_position;
);
out ? (
while ( midirecv(ts,msg1,msg23) ? (
m=msg1&240;
vel = (msg23/256)|0;
note=msg23&127;
inRange = (note >= btm && note <= top);
slider12==0 && inRange==0 ? midisend(ts,msg1,msg23);
slider12==1 || m !=144 ? midisend(ts,msg1,msg23);
beat_position > (savebeat +bars) ? (
savebeat = beat_position;
current = 0;
);
vel == 0 && m == 144 && current == note && value > 0 ? ( // Note OFF //
midisend(ts,11*16 + channel,cc|(value*256));
current = 0;
);
vel > 0 && m == 144 && current == 0 && inRange ? ( // Note ON //
savebeat = beat_position;
value = current = note;
value = ceil((value*mult) - fix);
inv > 0 ? (value = 128-value);
value < 1 ? (value = 1);
value > 127 ? (value = 127);
savevalueTarget = value;
savevaluesent == 0 ? (value = savevaluesent = savevalueTarget);
auto > 0 && (value > savevaluesent + smooth) && play > 0 ? (value = savevaluesent + smooth);
auto > 0 && (value < savevalueSent - smooth) && play > 0 ? (value = savevalueSent - smooth);
savevalueSent = value;
midisend(ts,11*16 + channel,cc|(value*256));
);
);
);
(beat_position >= savebeat2 + auto) && auto > 0 ? (
value = savevalueTarget;
(value > savevalueSent + smooth) ? (value = saveValueSent + smooth);
(value < savevalueSent - smooth) ? (value = savevalueSent - smooth);
savevalueSent = value;
midisend(ts,11*16 + channel,cc|(value*256));
savebeat2 = beat_position;
);
slider14 = value;
m == 128 ? ( // Note OFF //
midisend(ts,msg1,msg23);
);
);
Je suppose que c'est un changement de paradigme :
avec Reaper, sont fournis quelques scripts de base, a partir d'outils elementaires et universels. Libre a chacun d'ajuster a ses besoins, et de partager.
Avec un "DAW fait par des musiciens", et bien, ce sont ces musiciens, avec leur savoir-faire, qui décident de quels outils on a besoin pour faire de la musique.
x
Hors sujet :Je reconnais que parfois c'est plus immediat d'avoir un gros bon plugin "Mastering" bien efficace avec une liste de presets et un seul knob, que de devoir construire sa chaîne EQ+multiComp+Exciter+StereoWidener+... (enfin, ca c'est la mienne, d'autres choix sont possibles)
- < Liste des sujets
- Charte