General
MIDI Learn
Started by Mr_X on .
Sign in or create an account to join the conversation.
I'm planning on building a design with Lemur that uses a lot of Sysex. It seems like Lemur doesn't have a MIDI learn function natively, so is there a script or any workaround to allow me to have Lemur "learn" the sysex strings? I would like to have my design learn the sysex and then edit them to add the value variable (x) as needed.
Not from my understanding.
Your midi listen scripts have to be supplied with hard, non dynamic values for channel and note/cc value (ie, they cannot be variables, I would love if they could).
There might be a snowballs chance in hell that you could run a giant catch all midi listen script (channels 1-16, CC 0-127... channels 1-16, notes 0-127)... and then store these inputs in an array of arrays (yo dawg...) that keep track of their target object/function, whether or not they have been mapped etc... However, this would have to be some highly iterative logic and would likley introduce a ton of latency as Lemur would have to sort out where the midi input was mapped to prior to actually sending/receiving the midi signal.
My thoughts, this would be awesome if it worked but probably too resource heavy thus not worth the time in development.
Your midi listen scripts have to be supplied with hard, non dynamic values for channel and note/cc value (ie, they cannot be variables, I would love if they could).
There might be a snowballs chance in hell that you could run a giant catch all midi listen script (channels 1-16, CC 0-127... channels 1-16, notes 0-127)... and then store these inputs in an array of arrays (yo dawg...) that keep track of their target object/function, whether or not they have been mapped etc... However, this would have to be some highly iterative logic and would likley introduce a ton of latency as Lemur would have to sort out where the midi input was mapped to prior to actually sending/receiving the midi signal.
My thoughts, this would be awesome if it worked but probably too resource heavy thus not worth the time in development.
Thank you for your reply.
Only interested in Sysex at this point, not notes or cc stuff. MidiDesigner can learn any MIDI message, it's a shame Lemur has fallen behind.
I'm really surprised nobody else is asking for this functionality.
Only interested in Sysex at this point, not notes or cc stuff. MidiDesigner can learn any MIDI message, it's a shame Lemur has fallen behind.
I'm really surprised nobody else is asking for this functionality.
ah sorry I mis read your OP... sounded like you wanted a dynamically re mappable template?
There is a ton of room to improve, but there is no way it has fallen behind. Despite it's short comings as a language, I'll still take Lemurs scripting capabilities all day long.Mr_X wrote:MidiDesigner can learn any MIDI message, it's a shame Lemur has fallen behind.
MIDI learn of CCs and notes is easily achievable, I posted an example ages ago ...
MIDIAARGS learn of Sysex does not really make sense though...
Sysex message is different outgoing compared to incoming, can cover numerous parameters etc
Why are you particularly wanting to use sysex? And how where you thinking of doing it? What device?
MIDIAARGS learn of Sysex does not really make sense though...
Sysex message is different outgoing compared to incoming, can cover numerous parameters etc
Why are you particularly wanting to use sysex? And how where you thinking of doing it? What device?
off topic, but where? did you run a catch all midi listen script or some other magic?Macciza wrote:MIDI learn of CCs and notes is easily achievable, I posted an example ages ago ...
in a script executed on MIDI input you can already filter the incoming MIDI message. You surely know this already. Then you can receive (and save) incoming MIDI data with MIDI_ARGS.
MIDI_ARGS[0] is CC number or note number.
MIDI_ARGS[1] is CC value or note velocity.
MIDI_ARGS[2] is MIDI channel.
MIDI_ARGS[0] is CC number or note number.
MIDI_ARGS[1] is CC value or note velocity.
MIDI_ARGS[2] is MIDI channel.
Thank you for your reply.
There is a fixed structure to their sysex messages.
In a perfect world, I would be able to press a button below a fader or control on the Lemur design, the design would "listen" for the incoming sysex message, and when received, it would store it as the message for that fader or control. Then, when the control is moved, the same sysex message would be sent back, with the fader/control value inserted at a specific spot in the sysex message.
I have done years of this sort of MIDI programming with PCs in the .NET language but am interested in building a design using the iPad, but have no programming experience on iOS.
Before Lemur, I was trying MIDIDesigner, which has a learn function (when editing a design only) which worked fine, but there are limitations to how it handles sysex messages and the way some controls operate. I was hoping that with Lemur I would have more control, but now I'm not sure what I want to do will even be possible.
The sysex messages I'm planning to work with are for the Yamaha digital mixing consoles. Every parameter on their mixing consoles sends out a specific sysex message, and if that same message is sent to the console, it will change that parameter.Macciza wrote:MIDIAARGS learn of Sysex does not really make sense though...
Sysex message is different outgoing compared to incoming, can cover numerous parameters etc
Why are you particularly wanting to use sysex? And how where you thinking of doing it? What device?
There is a fixed structure to their sysex messages.
In a perfect world, I would be able to press a button below a fader or control on the Lemur design, the design would "listen" for the incoming sysex message, and when received, it would store it as the message for that fader or control. Then, when the control is moved, the same sysex message would be sent back, with the fader/control value inserted at a specific spot in the sysex message.
I have done years of this sort of MIDI programming with PCs in the .NET language but am interested in building a design using the iPad, but have no programming experience on iOS.
Before Lemur, I was trying MIDIDesigner, which has a learn function (when editing a design only) which worked fine, but there are limitations to how it handles sysex messages and the way some controls operate. I was hoping that with Lemur I would have more control, but now I'm not sure what I want to do will even be possible.
Traxus - LeLearn https://forum.liine.net/viewtopic.php?f=34&t=4089&p=16331&hilit=LeLearn#p16331
MrX - Ok, so Realtime Sysex, thats a bit different . . .
From memory you could also set Yamaha mixers to send CCs for controls, might be easier . . .
Without researching too much if the sighs stuff is standard then very little data is changing between various controls, so a script could be used to do most of the work but you would have to set appropriate data for all your objects by hand . . .
Might have a bit of a look and see what might be possible for 'learning' . . .
MrX - Ok, so Realtime Sysex, thats a bit different . . .
From memory you could also set Yamaha mixers to send CCs for controls, might be easier . . .
Without researching too much if the sighs stuff is standard then very little data is changing between various controls, so a script could be used to do most of the work but you would have to set appropriate data for all your objects by hand . . .
Might have a bit of a look and see what might be possible for 'learning' . . .
Cc isn't suitable in this case, I could go into the explanation if you're interested, but suffice to say that sysex is what I'll be using however I end up solving this.Macciza wrote:Traxus - LeLearn https://forum.liine.net/viewtopic.php?f=34&t=4089&p=16331&hilit=LeLearn#p16331
MrX - Ok, so Realtime Sysex, thats a bit different . . .
From memory you could also set Yamaha mixers to send CCs for controls, might be easier . . .
Without researching too much if the sighs stuff is standard then very little data is changing between various controls, so a script could be used to do most of the work but you would have to set appropriate data for all your objects by hand . . .
Might have a bit of a look and see what might be possible for 'learning' . . .
It would be very much appreciated if you are able to point me towards any sample code or tutorials that would help me figure out how to do what I'm trying to do.
No worries,
Have a look at the LeLearn stuff above, it shows one way to do it ...
Pretty sure this can be modified to deal with sysex ...
Though ultimately wouldn't you only need to do it once?
It may be easier to just capture the data once and then code it as needed...
Have a look at the LeLearn stuff above, it shows one way to do it ...
Pretty sure this can be modified to deal with sysex ...
Though ultimately wouldn't you only need to do it once?
It may be easier to just capture the data once and then code it as needed...
Maybe something along this line, adjusted as needed as per other objects...
test.jzml
Note: The data length and variable position will need to be set up to match your device
cheers
test.jzml
Note: The data length and variable position will need to be set up to match your device
cheers
Ah cool, same thing i had in mind but without the abstraction; i was thinking just one midi listen and assignment script rather than putting on on each object might be cheaper to on a larger project but managing the 4 vectors (object pointer, channel, cc, val) seemed latency prone...Macciza wrote:Traxus - LeLearn https://forum.liine.net/viewtopic.php?f=34&t=4089&p=16331&hilit=LeLearn#p16331
Thank you very much.Macciza wrote:Maybe something along this line, adjusted as needed as per other objects...
test.jzml
Note: The data length and variable position will need to be set up to match your device
cheers
I'll give this a try.
Will the captured data persist after Lemur is closed?
you would simply need to save the project (to a new file perhaps) on your Lemur first before closing ...
Sounds good. Thank you.
Working hard to understand how this design works. Looks very slick.
I must learn more about and practice some Lemur programming.
Working hard to understand how this design works. Looks very slick.
I must learn more about and practice some Lemur programming.