SysEx Arguments
Hello,
Is anyone able to advise how to further develop this object to include further SysEx information? At the moment it is controlling a number and a parameter. I would like to add a third argument for parameter value, but am unsure how to do this. Also, I was wondering if there was a particular system for adding further arguments?
Thank you
you don't need to bother with sxformat,
a simple message and iter do the same.
add as many values as you need .

Hello,
Thank you very much.
Hello,
I'm not sure if this message will get through to you, but could I clarify something, please? The patch is not behaving in the way that I would expect. It is allowing control over the first two parameters, out of eight, but I am unable to control the other six. It doesn't seem to behave in the same way as the sxformat message. Sorry if I'm being slow.
Thanks
you have to post the patch.
I can't say anything without seeing it
there are no 6 parameters in that patch.
You have to explain exactly what you try to do.
Maybe you need different sysex string for other parameters ?
The picture I posted just shows how to add more values to some imaginary sysex string.
Actually you need to post sysex implementation of that device
otherwise I can't tell much about it.
What is sure - it does not matter at all if sysex is sent
using sxformat or message.
P.S.
I don't know why sxformat help file has inverted list
items $i2 first, followed by $i1 - makes no sense at all.
I hope you understand the meaning of that
$inn represents inlet number, or position of item in the list.

from the vendor string
0 32 60 it must be some Elektron Device
Hello,
Apologies for the confusion. I've realised that it is only two numbers that are variable. What I thought was a variable number in the SysexEx implementation is the set command. I'm really new to this, so please forgive the ignorance.
Thanks again
Hello,
Would it be OK to ask a couple questions, please? I was trying to find out how to put together SysEx information for a Roland JV2080 and came an exchange you had with someone else about this. You provided the code: sxformat 240 65 16 106 18 3 0 16 61 / is $i1 / is (128-checksum(5,9,1)%128)%128 / 247. This code works perfectly, but I was wondering if you'd be prepared to break down the: is (128-checksum(5,9,1)%128)%128, as I don't understand how this is working fully? Is it an example of a particular type of coding? Incorrectly, I thought the formatting of the SysEx information should correspond to to the data transmission format on page 187 of the manual, but this doesn't seem to be so. Does the generic form of the message appear anywhere in the manual, as I can't see the wood for the trees.
I completely understand if this is too time consuming to do, but I thought I'd ask.
Thank you
that JV 2080 checksum is explained on page 193 of user manual
in simple words, one adds parameter addresses and value(s)
together and runs it through expr (128 -$i1%128)%128 to keep it in 0 - 127 range.
Roland specified parameter adresses start at 5th position in the list and end at 8th.
(count from zero)
example sysex that you posted :
sxformat 240 65 16 106 18 3 0 16 61 / is $i1 / is (128-checksum(5,9,1)%128)%128 / 247
you add 3+0+16+61+ Value = 80 + Value
if there are 2 or more Values to be sent you extend second argument
of checksum.
In this case it is only one value so, (5,9,1) we sum items 5 6 7 8 9 of the list
if there 2 values, then it would be (5,10,1) we sum items 5 6 7 8 9 10 of the list
if there 4 values, then it would be (5,12,1) etc...
-----------
If you prefer not to use sxformat,
you can add addresses and values using zl sum, expr etc
Here I allready inserted parameter address sum (80) into expr :

Another example with some imaginary parameter adresses 11 22 33 44 and 2 Values

Nothing against sxformat, just wanted to show the calculation using expr.
This is all easy stuff, once you get the parameters, and get used to
convert HEX to INT on the fly.
Hello,
That's incredible. Thank you for being so generous with your time and knowledge. I owe you some beers. I was going to ask if any kind of complete standardisation of SysEx, regarding the difference between Elektron and Roland, for example, would defeat the whole point of it?
I did look at the information on page 193, but the value element was confusing me.
So, to clarify in the example above of 5,9,1. 5 is the amount of elements at the beginning of the string, 9 refers to value and 1 is the checksum.
Thanks again
No, 5 is the position of the first item in the list to start the summing, counting from zero
if string is:
240 101 102 103 104 105 106 107 108 / is $1 / is (128-checksum(5,9,1)%128)%128 / 247
and parameter adress is 105 106 097 108
then number 5 indicates it's position in the list.
the second number indicates LAST item in the list to sum.
in this case with only 1 Value it is number 9
(5,9,1) the 1 is checksum mode as explained in sxformat help file :
"The first argument is the starting byte index to compute the checksum. The second is the ending byte index (inclusive). The final argument is 1 for normal checksum, 2 for twos-complement."
---------
Not many midi devices use checksum.
Hello,
Perfect.
Thank you very much
Hello,
I'm sorry to bother you, again, but I was wondering if could ask for your help? I posted a question on the forum but didn't get any response. I followed your advice in terms of using an iter object to send SysEx information to a Machinedrum, and everything works well. I understand how to adapt it for different parameters. However, I'm trying to do the same for a Monomachine, but the format of the code seems to be different, and I'm unsure how to adapt it. Would you be able to advise?
Thank you
monomachine seems not to use sysex to directly modifiy anything, but to transfer
patterns, kits etc. you should better know abot it, as you have such unit.
At least that looks so at the first look at the midi implementation.
So you should use midi controllers to address parameters like lfo1 etc
instead.
Someone did m4live device allready for it.
It seems old and one should mod it probably for new max and live versions.
That should be no big deal i think, or ?
https://www.maxforlive.com/library/device/3464/
-----
I don't have any of that hardware, and can't give you any further help.
Hello,
That's great. Thank you for clarifying that.
I had a look at that amxd.
You need to replace lh-midi with midiout
I think today Live does not block sysex out any more, or ?
Then - midiin/midiparse routes CC#1 directly out,
and all other CC# numbers into pattrstorage.
That looks wrong to me because CC#1 and CC#2
are used for joystick Up/Down as stated in Midi Control Section of user manual.
Why should only 1 be rerouted differently ?
and directly out at all ?
You should check that, and maybe some other wrong things ?
Hello,
OK, thanks for the heads up. The only bit I'm unclear about is the section of the attached object T1::m. Is that Live code?
Thanks
that is formatting for the pattrstorage.
just leave it as is.
sprintf is standard max object
P.S. another thing I did not understand is that
monomachine uses 6 Midi Channels to address 6 Tracks, is that right ?
So one would need such device in separate Live tracks and assign midi out
channel to control dedicated track, right ?
Track number is taken together with Machine type or whatever that's called
to form sysex message, which I think is dump request.
But that track number is not used in that device to set midi channel out.
I guess one has to take care about it.
I don't know if in Live one can get midi channel assigned to track
by some calls to live api and use that to form sysex message.
just a thought.
Hello,
Sorry, I missed the last part of your message earlier. I don't use Live at the moment, I've been using Reaper. I'll try and get my head around your message. It was interesting to see the SysEx string in the unlocked M4L device you sent over.
Thanks
Hello,
I wanted to get back to you in order to let you know that I've tried the Monomachine device you sent over. It is possible to alter each of the six tracks on the Monomachine while transmitting on the same MIDI channel. The SysEx sends successfully. However, I can't seem to get the CC control to work. Could I ask, what is the reason of the routing objects on the left side of the patch? They seem like a random set of parameters, but also I don't understand the function of the object itself within the patch.
Thank you
From what I remember , that amxd device captured CC values from monomachine
via midi input and stored them into pattrstorage MM.
All that live dials get set according to captured values.
pattrstorage when output, must get rid of all but raw numbers,
CC number and value.
That is what all that route nn objects between atoi and itoa are doing there.
The thing is - I don't own that hardware and I don't use Live.
Kind of unfortunate combination to really help you.
All I know from having a look at midi specifications
is that monomachine reacts to CC# controls to change parameters.
That sysex string does recall some mode or I don't know what, you will probably know.
Then you send CC values as they are listed in midi spec. to change parameters.
So there is no mistery about it, only that in Manual it mentions separate midi channels
for different tracks.
Track 1 = base midi channel, Track 2 = base midi channel + 1, Track 3 = base midi channel + 2 etc.
From Max you simply select midi CC number and send values. That must work.
If your monomachine does not react to CC# controls, that could have any reason.
I would recommend to set simple Max interface and send CC# values directly and see what happens.
If you get that ok, then go on in Live.
--------------
Maybe that crappy Live software can't use 2 midiout object in same device ?
if you removed lh_midiout connect sysex output to same midiout as controllers

Hello,
Yes, the SysEx controls 'machine' allocation on each track. Devices for creating or manipulating sound. Also, yes, my next step was to simplify, alter, CC control. The Monomachine does successfully respond to CC changes. I don't use Live either, so I'm not sure if I'm making a fundamental mistake by trying to use a Live interface in MAX. Anyway, I can't seem to get it to respond to input. I was unclear why some CCs are passed, some routed, and why these particular CCs. Anyway, thanks a lot for the help.
I don't understand at all what the problem is.
What do you mean you can't get respond to input ?
What input ?
and who should respond ?
You don't use Live, do you use Max ?
or send all this from other software ?
if you send CC# 48 to monomachine which is synth parameter 1 , does it make any change ?
or CC# 61 which is AMP Volume ?
Hello,
Yes, sending CC information from MAX to the Monomachine is fine, parameters behave as expected. Previously I have also been able to use MIDIIN from devices to control UIs within MAX, and was unsure whether the MIDIIN within the patch would also enable me to control this patch, but it doesn't enable me to do so. But like I say I am unsure of whether the device is intended to be used in this way, anyhow. It is the first time I have used a Live device within MAX, and I wasn't sure about compatibility.
Ok, so you don't get any input from monomachine into Max via midi in ?
Is that the problem ?
And that way you don't receive current CC# values from monomachine
when whatever you name that thing which gets called using sysex ?
That would make it difficult to use this kind of control.
You would have to manually match all 56 controllers,
to start modifying them.
You see difference between midi in Live to Max, is that
live is not allowing multiple midi channels in or out of devices.
ALL GET PISSED DOWN TO MIDI CHANNEL 1.
Max takes it all as it is.
--------
Now let's forget Live and talk plain Max and midi.
When you send that sysex to recall machine xy on track 1 - 6
should you receive some sort of dump ?
Hello,
As far as I can work out, and please forgive my ignorance here, but assign machine is not a dump, whereas pattern, song and global settings are.
Well, from looking at that amxd device one would expect that
CC#s get dumped from monomachine, otherwise how would one
edit all that parameters.
One has to take care not to create a midi feeback, when routing midi in to midi out in Max.
I am really sorry not to be of better help, but it is difficult without having
that device and running the tests.
I made that patch a bit more max friendly
Is there a way to request all current CC# values ?
Hello,
That's great. Thank you for doing that. Using this device when selecting a machine in SysEx there is no accompanying information about parameters, it's a blank machine each time. It goes back to my earlier question about not understanding the SysEx string, because the way this machine works seems to be quite different to the Machinedrum which has SysEx control for almost everything.
Having said that in the SysEx reference there seems to be a third argument not included in the Live device of initiating data pages. Could this possibly be it?
Thank you
This is sysex to select machine, user manual page 148

last item before 247 (F7 hex) is init parameter.
In that amxd device it is set to 0 = no init.
If you cange it to 1 or 2 , that would act as seen above

Hello,
Yes, sorry, that's what I meant. Thank you for all your help. It really is invaluable.
Hello,
I'm sorry to bother you, and I'm not sure you're about, but could I ask something, please? I've been doing more work with the advice you gave me, but I can't figure something out. I had to adapt the sxformat object slightly, but I've also had to put +18 into the expr
object in order to generate the correct numbers. These numbers don't sum to 128, but work successfully. I was just wondering what was going on?
Thank you
1 allways limit numbers used for midi to 0 -127 to start with.
Then it is clear why you need to add 18
because positions 5 - 9 in your sysex
are
240 65 16 106 18 3 0 0 15 $1 $2 247
3 + 15 = 18 add $1 value to that to form $2 = checksum
-------
And numbers SHOULD NOT sum to 128 , range is 0-127 7bit
Hello,
Great. Thank you very much. I was getting confused with the checksum number.