Welcome to %s forums

BrainModular Users Forum

Login Register

Midi out from script looks good, but doesn't show up on cable

I need help on a Patch
Post Reply
woodslanding
Member
Posts: 1327
Contact:

Midi out from script looks good, but doesn't show up on cable

Post by woodslanding » 28 May 2025, 21:49

The midi seems well-formed enough to display correctly in the inspector for the script, but nothing comes out the midi output cables.

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;
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify

woodslanding
Member
Posts: 1327
Contact:

Post by woodslanding » 29 May 2025, 23:12

fixed:

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) - 1]  of Tparameter;

// Global variables
var i,m            : integer;
var midiInCount    : integer;
var midiOutCounts    : array [0..length(MIDI_TAGS) - 1] 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;
                        SetLength(ccMidiOUTs[i],midiOutCounts[i]);   //FIX
            end;
        end;

    end
    else 
    for i := 0 to length(MIDI_TAGS) - 1 do
    begin
        SetLength(ccMidiOUTs[i],0); 
    end;
end;
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify

Post Reply

Who is online

Users browsing this forum: No registered users and 20 guests