MIDI control for Zoom MS pedals [still WIP]


#1

objects for controlling Zoom MultiStomp pedals (MS-50G, MS-60B, MS-70CDR) via MIDI.
there are two versions of objects — one takes takes MIDI CC messages and converts them to model-specific SysEx, another takes parameter value(s) from inlets and sends them to pedal as SysEx messages.

Zoom MS pedals are always on USB host port 1 when attached directly to Axoloti. if you change the port to something else, pedal won't respond.

1) this object controls a single parameter of Zoom MultiStomp pedal via MIDI.
cc2sysex_single.axo (7.7 KB)

parameters for outgoing messages:
model – MS-70CDR / MS-60B / MS-50G;
txdev – port to transmit SysEx messages to (you likely want to send them directly to pedal attached to USB host, but there are also other options);
fxnum – effect number (can be 1–6, but only first 3 effects in chain actually react to SysEx messages);
param – effect parameter to control;

parameters for incoming messages:
rxdev – port to receive incoming CC messages on;
rxchnl – MIDI channel for incoming CC messages;
rxcc – incoming CC message number.

that's all for parameters with values no more than 127 (7-bit resolution); if parameter range is beyond 0–127, then 14-bit resolution is required, and the folowing object parameters are related to this:
14bit – no/yes (default is "no");
cc2std (yes/no) – whether the number of second CC message for 14-bit value follows the standard convention (1st CC message number + 32); you likely want it to be "yes" unless you really know what you're doing;
cc2ovr – the non-standard second CC number (relevant only if the previous parameter is "no").


#2

Nice! Does this do parameter control on the ms70cdr?

Just yesterday I was thinking about seeing if I could do anything with that pedal and an axoloti sending sysex, looks like you're already there!


#3

exactly. i'm already there, and my objects will support at least MS-70CDR, MS-60B, and MS-50G.
hope to have them ready this weekend.


#4

actually, i already have an object for controlling arbitrary single parameter of arbitrary effect now.

but it's only a part of the plan, so i'll make the rest and release them all at once, it won't take long.


#5

sweet so you usb host the pedal and controll it with midi/sysex?


#6

basically, yes.
i USB host the pedal and use incominCC messages from any generic MIDI controller (or MIDI sequencer) to control it. my objects are taking those CC values and converting them to SysEx (actually, placing to appropriate SysEx bytes).
that's the point (especially for a DAWless rig), because CC messages are supported by virtually any gear, but very few gear can transmit SysEx.

EDIT: i also have another good idea.
will make inlet versions of these objects to make things even more interesting, so paramer values can be generated by Axoloti patch.
very handy for stuff like LFOs.


#7

Well this is really fun! Do we have a generic CC to sysex translator object? I thought so, but can't find it.

I've been converting CC to sysex using arduino and while my sketch and hardware works fine, I could do a lot more a lot quicker with an axo.

Good work @chaocrator


#8

no, we don't, and it's hardly possible.
reasons:
1) SysEx are hardware-specific
2) SysEx header is more or less uniform, but SysEx data can have any structure…
3) …and any length (which has to be specified explicitly too for current method of sending SysEx).

so, if we imagine a generic translator object, with some kind of „SysEx constructor“ — constructing a SysEx mesage this way would be even slower than taking some existing CC to SysEx translator, making it embedded and directly editing SysEx part of code.

the good news is that some hardware-specific CC to SysEx translator definitely exist, because i made some myself.

i asked for contributor access to community library, and when i get it, those my objects will be there, so anyone will be able to take them and modify, with no need to create them from scratch (which i faced when started my SysEx dive).

PS. right now i'm making some handy convertors for various kinds of input (integer positive, integer bipolar, fractional positive, fractional bipolar) to the values suitable for use in MIDI messages — either 7-bit and 14-bit MSB/LSB.

i also have some generic MIDI send objects for various kinds of messages (including RPN/NRPN and 14-bit CC) with adjustable MIDI thinning, mostly finished.


#9

did not happen. i was distracted by making some other MIDI-related objects.
however, objects for MultisStomp pedals are on the way.


#10

Hmm... I've not looked at Axoloti objects yet, but "hardly possible" sounds discouraging. I'm no programmer, but I've done a few arduino sketches to accomplish just this. Is there some limitation in Axoloti that doesn't exist in Arduino?

1) yes sysex is hardware specific, but the design is general. Relevant portion of my Arduino sketch:

void sendK3Param(byte channel, byte paramOffset, byte paramValue7Bit)
{
const int sysexLen = 10;
static byte sysexData[sysexLen] = {
0xf0, // 0 Sysex start
0x40, // 1 Manufacturer ID: 40, Kawai
0x0c, // 2 Channel 13
0x10, // 3 Device ID: 03, K3
0x00, // 4
0x01, // 5
0x01, // 6 Parameter Offset number (which parameter we want to change)
0x00, // 7
0x00, // 8 Parameter value that changes with CC
0xf7 // 9 Sysex end
};

// paramValue7Bit is assumed to run from 0 to 127 in all cases,
paramValue7Bit &= 0x7f;

It can certainly be generalized. I think things like checksum could be tricky for sure.

2) Not sure I understand, but as I said, I'm an amateur. Ctrlr (ctrlr.org) is another project that has customization of sysex and CC to sysex conversion

3) In Ctrlr, you specify the length, enter the static sysex values, then indicate MS and LS. On my Peavey PC1600x (which both learns and sends sysex) it's the same, set length, enter static values and the parameter intended to be changed by the slider

Regardless of what's possible, I think your work advancing us forward is great. Thanks!


#11

i meant that SysEx can be, for instance, 120 bytes (which is just a random number, not a limit).
if we imagine some kind of „SysEx constructor“ object where each byte is configured via several parameters exposed to user, for 120-byte SysEx it would be an object with about 500 configurable parameters.
it's actually faster and easier to rewrite the code itself.

EDIT: and what i think could really help is some kind of SysEx tutorial.
not sure whether i'll have time to make it in the foreseeable future.


#12

so, the 1st object is ready.
see the 1st post for details (and for the object itself).


EDIT:
non-CC version is in progress.


#13

A stupid question for this great project!
you can have the delay, modulation and other timing effects of the zoom in sync with the other midi gears ex synthesizers?


#14

this is the right question!

unfortunately, these pedals don't have MIDI sync.
tempo in BPM can be set/changed only inside pedal patch.
i'm thinking on possible workarounds, but don't have any „solution candidates“ yet.


#15

i wish somebody can make a custom firmware for the MS-70CDR ( my favorite pedal for the price) to have the midi sync/start/stop function and many more!


#16

if alternate firmware could be possible, CC control could be probably implemented too.
but we have what we have.

anyway, CC-to-SysEx converting objects that i'm making are useful to have, because it's easy to take them and modify for talking to another gear. that's the main point of making and sharing them.

ps. inlet versions are delayed a bit, because i bought used Electribe MX and spent all my spare time with it :rofl:


#17

Cheers for doing this, haven't had a chance to try but looking forward to it.

Regarding the tempo thing - do you know if you can change the tempo setting, or the tap tempo with sysex or whatever? I've been playing around with a lot of sync stuff recently so might be able to sort something. But sounds like we can only control the fx parameters (which is awesome in itself).


#18

tempo is stored in the patch.
there's no no known setting for it (and no published MIDI implementation – what we have is reverse engineered).

on the other hand — tap tempo is there, so i would not mind to mod a pedal and let Axoloti do tap tempo for me.


#19

I did not even realize those had midi input on the usb, this changes everything! I will be monitoring this thread with interest.


#20

yes, they do, but as i mentioned above, there's no official published MIDI implementation, only reverse engineered unofficial one.