//////////////////////////
// transpose midi with optional auto-wrap
// Window defined by Root and Root+12
/////////////////////////
var input : Tparameter;
var output : Tparameter;
var transpo : TParameter;
var active : TParameter;
var root : TParameter;
procedure init;
begin
Input := CreateParam('midi in', ptMidi, pioInput);
Output := CreateParam('midi out', ptMidi, pioOutput);
transpo := CreateParam('transpo', ptDataFader, pioInput);
transpo.Format('%.0f');
transpo.Min(-24);
transpo.Max(24);
root := CreateParam('root note', ptDataFader, pioInput);
root.Format('%.0f');
root.Min(0);
root.Max(115);
// On ne met pas de .Value() ici pour éviter l'erreur
active := CreateParam('wrap active', ptSwitch, pioInput);
SetModuleColor($FF3298DB);
end;
procedure Process;
var i : integer;
var nbOfMidi : integer;
var ReceivedMidi : TMidi;
var TranspoVal : integer;
var RootVal : integer;
var HighLimit : integer;
begin
nbOfMidi := input.Length;
output.length(nbOfMidi);
if (nbOfMidi > 0) then
begin
TranspoVal := transpo.asInteger;
RootVal := root.asInteger;
HighLimit := RootVal + 12;
for i := 0 to nbOfMidi-1 do
begin
ReceivedMidi := input.asMidi(i);
ReceivedMidi.data1 := ReceivedMidi.data1 + TranspoVal;
if (active.asInteger > 0) then
begin
while (ReceivedMidi.data1 > HighLimit) do
begin
ReceivedMidi.data1 := ReceivedMidi.data1 - 12;
end;
while (ReceivedMidi.data1 < RootVal) do
begin
ReceivedMidi.data1 := ReceivedMidi.data1 + 12;
end;
end;
output.asMidi(i, ReceivedMidi);
end;
end;
end;
Statistics: Posted by joffo78 — 30 Jan 2026, 09:44
//////////////////////////
// transpose midi with optional auto-wrap
// Window defined by Root and Root+12
/////////////////////////
var input : Tparameter;
var output : Tparameter;
var transpo : TParameter;
var active : TParameter;
var root : TParameter;
procedure init;
begin
Input := CreateParam('midi in', ptMidi, pioInput);
Output := CreateParam('midi out', ptMidi, pioOutput);
transpo := CreateParam('transpo', ptDataFader, pioInput);
transpo.Format('%.0f');
transpo.Min(-24);
transpo.Max(24);
root := CreateParam('root note', ptDataFader, pioInput);
root.Format('%.0f');
root.Min(0);
root.Max(115);
// On ne met pas de .Value() ici pour éviter l'erreur
active := CreateParam('wrap active', ptSwitch, pioInput);
SetModuleColor($FF3298DB);
end;
procedure Process;
var i : integer;
var nbOfMidi : integer;
var ReceivedMidi : TMidi;
var TranspoVal : integer;
var RootVal : integer;
var HighLimit : integer;
begin
nbOfMidi := input.Length;
output.length(nbOfMidi);
if (nbOfMidi > 0) then
begin
TranspoVal := transpo.asInteger;
RootVal := root.asInteger;
HighLimit := RootVal + 12;
for i := 0 to nbOfMidi-1 do
begin
ReceivedMidi := input.asMidi(i);
ReceivedMidi.data1 := ReceivedMidi.data1 + TranspoVal;
if (active.asInteger > 0) then
begin
while (ReceivedMidi.data1 > HighLimit) do
begin
ReceivedMidi.data1 := ReceivedMidi.data1 - 12;
end;
while (ReceivedMidi.data1 < RootVal) do
begin
ReceivedMidi.data1 := ReceivedMidi.data1 + 12;
end;
end;
output.asMidi(i, ReceivedMidi);
end;
end;
end;
Statistics: Posted by joffo78 — 30 Jan 2026, 09:44