hélas je n'abouti à rien qui compile..
le script doit modifier un flux midi : sélectionner la dernière note jouée (ou la plus élevée en cas de simultanéité), la garder "On" même après le dernier "note off", en attendant le "note On" suivante (donc un jeu légato et monodique), mais en arrêtant tout si l'on rejoue la dernière note.
Do, Ré, Mi, Mi en entrée donne Do--Ré--Mi--Stop
En pratique pour jouer des notes tenues sans avoir à garder la touche enfoncée.
Le script "Set Monophonic" me parait un bon point de départ, mais après ça se gate..
Code: Select all
//////////////////////////////////////////////////////////////
// Set monophonic
// transforms a polyphonic midi flow into a monophonic
/////////////////////////////////////////////////////////////
// parameters declaration
var input : Tparameter;
var output : Tparameter;
var active : Tparameter;
var i : integer;
// initialisation : create parameters
procedure init;
begin
Active := CreateParam('on',ptswitch,pioInput);
Input := CreateParam('midi in',ptMidi,pioInput);
Output := CreateParam('midi out',ptMidi,pioOutput);
Active.asFloat(1);
ModuleColor($FF3298DB);
end;
// Global variables
var nb1 : integer;
var Miditmp : TMidi;
var lastsend : integer;
var incr : integer;
//////////////////////////////
// main proc
//////////////////////////////
Procedure Process;
begin
nb1 := input.Length;
if Active.equal1
then begin
incr := 0;
if nb1 > 0
then begin
for i := 0 to nb1-1
do begin
MidiTmp := input.asMidi(i);
if MidiTmp.msg=144
then begin
Miditmp.msg := 128;
MidiTmp.data1 := lastSend;
incr := incr +1;
output.asMidi(i+incr-1,Miditmp); // set note off
MidiTmp := input.asMidi(i);
output.asMidi(i+incr,Miditmp);
LastSend := MidiTmp.data1;
end
else output.asMidi(i+incr,Miditmp);
end;
end;
output.Length(nb1+incr);
end
else
begin
for i := 0 to nb1-1
do begin
MidiTmp := input.asMidi(i);
output.asMidi(i,Miditmp);
end;
output.Length(nb1);
end;
end;
