The data outs work fine....
I feel like maybe an array isn't initialized somewhere? But I can't spot anything.
THANKS!
-e
Code: Select all
const MIDI_TAGS = ['fs1-leslie','fs2-tapRec','fs3-sustain','fs4','mod','vol','ped2','exp'];
const MIDI_CCS_IN = [28,27,26,25,1,7,11,12];
const MIDI_CCS_OUT = [28,27,64,25,1,7,11,12];
var midiIN : Tparameter;
var ccMidiOUTs,ccValOUTs,ccINs : array [0..length(MIDI_TAGS)] of Tparameter;
// Global variables
var i,m : integer;
var midiInCount : integer;
var midiOutCounts : array [0..length(MIDI_TAGS)] of integer;
var midi : TMidi;
var ccTarget : integer;
var ccNum : integer;
var ccVal : single;
var invert : boolean;
// initialisation : create parameters
procedure init;
begin
midiIN := CreateParam('midi in',ptMidi,pioInput);
for i := 0 to (length(MIDI_TAGS) - 1) do
ccMidiOUTs[i]:= CreateParam(MIDI_TAGS[i] + ' cc ' + intToStr(MIDI_CCS_IN[i]),ptMidi,pioOutput);
for i := 0 to (length(MIDI_TAGS) - 1) do ccValOUTs[i]:= CreateParam(MIDI_TAGS[i],ptDataField,pioOutput);
end;
//////////////////////////////
// main proc
//////////////////////////////
procedure process;
begin
midiInCount := GetLength(midiIN);
if midiInCount > 0 then
begin
for i := 0 to length(MIDI_TAGS) - 1 do midiOutCounts[i] := 0;
for m := 0 to midiInCount-1 do
begin
midi := midiIN.asMidi(m);
ccNum := round(midi.data1);
for i := 0 to length(MIDI_TAGS) - 1 do
begin
ccTarget := MIDI_CCS_IN[i];
if ccNum = ccTarget then
begin
midi.data1 := MIDI_CCS_OUT[i];
ccMidiOUTs[i].asMidi(midiOutCounts[i],midi);
midiOutCounts[i] := midiOutCounts[i] + 1;
ccVal := (midi.data2)/127;
ccValOUTs[i].asFloat(ccVal);
end;
end;
end;
SetLength(ccMidiOUTs[i],midiOutCounts[i]);
end
else
for i := 0 to length(MIDI_TAGS) - 1 do
begin
SetLength(ccMidiOUTs[i],0);
end;
end;