Deciphering the TC Electronic M350 SysEx format

I recently acquired a TC Electronic M350 effects unit. One if its features is midi connectivity, which allows you to backup or edit the presets on a PC - although the interface exposes every setting so there's not much reason to edit them on the PC.

Unfortunately the librarian/editing software that TC electronic make available (called Vyzor but actually a customised version of a librian product called Uniquest) doesn't work very well on Windows 7 64 bit.

They barely mention their sysex support in the manual and in fact what little they do mention, they get wrong! (The correct procedure to manually initiate a bulk preset dump is to hold the preset on/off key down for approximately 2.5 seconds, scroll up until the display says bd for bulk dump mode, and then press the preset on/off button again).

Anyway I could find no information on the internet concerning the sysex specification of the device so it was clear I needed to reverse engineer the M350's sysex messages and implement a driver for it in JSynthLib which is a librarian/editor that actually works on Windows 7 (and also Macs and Linux as it is cross-platform).

I have made the following notes which I am leaving up here in case they are useful to anybody in the future.

TC Electronic M350 system exclusive spec for firmware version 1.3:

Device Inquiry f0 7E 7F 06 01 F7 elicits a reponse F0 7E 7F 06 02 00 20 1F 58 00 00 00 00 00 01 03 F7. Note that prior to upgrading the firmware, it responded to the Device Inquiry thusly: F0 7E 7F 06 02 00 20 1F 57 00 00 00 00 00 01 01 F7. Note that not only does the software version increase form 1.1 to 1.3, the "device number" changes from 57 to 58, perhaps indicating that the sysex implementation has changed somewhat between versions.

The basic sysex format is:

F0 00 20 1F 00 58 mm <data> F7

mm is the message type and there seem to be the following message recognised:

20: patch data (bi-directional)
22: value change (bi-directional)
45: request patch (to device only)
47: request parameter value (to device only)

message type 20 patch data

F0 00 20 1F 00 58 20 pp uu aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa bb bb cc dd ee ff gg hh ii jj kk ll F7
pp = patch number, (00 = edit buffer)
uu: unknown always 00(maybe bank #? but unused as far as I can see)
aa 20 chars patch name
bb bb 2 bytes - tap (milliseconds, LSB first)
cc input gain
dd mix ratio
ee effect bal
ff delay effects
gg delay/timing
hh feedback/depth
ii reverb type
pre delay
jj decay time
kk colour filter
ll checksum - this is calculated simply by summing all the data bytes (i.e. not the header bytes and not the checksum/tail bytes)

message type 22 real time parameter changes sent by editor software or device (seems to be a duplicate of the normal midi controller messages)

f0 00 20 1F 00 58 22 01 xx yy yy F7

yy = value (second yy is 0 apart form for 0d tap in ms)
xx = parameter number:
00 = input gain
01 = mix ratio
02 = effect bal
03 = delay effects ( yy = 00 - 0f )
04 = delay timing
05 = feedback depth
06 = reverb type (yy = 00 - 0f)
07 = predelay
08 = delay time
09 = colour filter
0a = bypass toggle (yy = 00 / 7f)
0b = dual input mode toggle ??????? pure guess
0c = digital input toggle (yy = 00 / 7f)
0d = tap in ms ( 2 bytes, LSB first )
0f = toggles front panel lock - 40+ makes it remote controlled, less than that makes it editable
10 = delay effects on/off toggle?
11 = reverb effects on/off toggle?

Note that parameters 0a/0b/0c/0f/10/11 can be controlled via the software, but are not sent or stored in the patches.

message type 45 request patch
F0 00 20 1F 00 58 45 pp bb F7

pp is patch number

bb is always 00 but I speculate this could be bank number, possibly in future versions of this device.
message type 47 request parameter value
F0 00 20 1F 00 58 47 xx F7
xx = parameter number as listed for message 22

This entry was posted in Music. Bookmark the permalink.

15 Responses to Deciphering the TC Electronic M350 SysEx format

  1. rich says:

    Hi, just read your article on the UniQuest m350 software. I too am on a win 7 64bit pc using Ableton. Can I ask if you had to do anything out of the ordinary for the software to be recognised as a VST? - stand alone it works.

    Any pointers would be greatly appreciated.

    Many Thanks

    Rich

  2. Jonas says:

    Hi, I am developing an editor for my TC G-Sharp guitar multi fx. The editor from TC is only for Windows and Mac PPC, so I wanted to make a platform independent editor and Java seems to be a good choice with its native support for MIDI in its SDK.

    I read your post after i did the reverse enginering of the MIDI messages myself, and noticed some minor errors in my code - thanks. If you didn't know already the the basic sysex format is composed by:

    F0: SysEx start
    00 20 1F: 3 byte manufacturer ID (TC Electronic)
    00: SysEx ID
    57: Model ID (TC G-Sharp)
    22: TC message type (command)
    01 00 00 00: (data)
    F7: MIDI System Exclusive message terminator

    • frankster says:

      Thanks for the additional info. One thing I would mention about Java's midi support is that some older versions of MacOS (Lion?) seem to have issues with SysEx support (this seems to be a current issue for some users with JSynthLib).

      • Jonas says:

        Damn, I didn't noticed at all - it say so at the bottom of JSynthLib website. Hmm, make sence that I cannot make it work. Do you know of any workaround in Java or (in worst case) alternatives for MIDI libs on OSX (I prefer Java, C#, C++ and Python)?

        • frankster says:

          Well as I understand the history of Java MIDI on OSX it goes something like this:

          * First few versions of OSX didn't handle sysex. So you could use a custom midi provider, for examples of midi providers see section "Java MIDI Bugs under various MacOS versions" at the bottom of this page http://www.ucapps.de/jsynthlib.html

          * Around Lion, those custom midi providers stopped working, and OSX Java still had issues with sysex.

          * Eventually the Java sysex issues were fixed and in recent versions of OSX it works fine.

          Are you using Lion by any chance?

  3. Roland says:

    Hi. I also have the M350. I have been trying to upgrade it. I have windows 7 64bit and connect that to a saffire pro 40 then midi out to the M350's midi in. When i press the upgrade button, the lights on the M350 flash faster and then the last light on gain stays on, but it does not reboot nor does tap button light up.
    Also, I cannot find the vyzor serial key. It seems that all those pages are not found.
    Can anybody tell me whats going on?

    • frankster says:

      Alas its been a while since I upgraded it so I can't remember the details of the procedure.

    • Robert A. says:

      Hi Roland!
      Just contact Psicraft through their website contact form at "http://www.psicraft.com/contact-us" or write a message to "support@psicraft.com" and tell them you need the key for your M350 with Ser.No.: ????????? (find this at the bottom of your device). You'll receive an answer with the key for your Vyzor within 34 hours! Worked perfect for me last time in February 2016 🙂
      Greets, Robert

  4. Nanosongs says:

    I cannot find the vyzor serial number. Support has not answered. Does this mean I can no longer use my M350 as a plug in? It should not be so difficult.

    The software, the process to use it, should not be so difficult. Thumbs down TC Helicon. This has happened twice for me...with the M350 and the Voice Live 2. They discontinue software support, which seems unnecessary and stupid.

    • frankster says:

      I remember having some difficulty getting hold of it...but it was a while ago and I can't remember the details - sorry!

  5. Joe Porter says:

    This post was very helpful to me! I had to write some drivers for this using RTP-MIDI on an embedded controller. I did have some problems with TAP DELAY and PRESET saving. I contacted T.C. Electronics and after enough patience I was able to get a reply from a real engineer with some info on the format. This might be normal in the MIDI world, but any parameter with more than a single byte is only utilizing 7 bits. Perhaps to not interfere with SOX and EOX. So the Tap Delay MS parameter is a 14 bit number with a min/max of 0/16383 and each byte order is LSB/MSB with 7bits each.

    The patch save check sum is a 7bit value of the sum of each 7bits of parameters Patch Name through Parameter Color.

    • Joe Porter says:

      Oh and also, parameter 0x0E is MIDI channel (1-6), parameter 0x12 is ALL parameters (for status request).

    • frankster says:

      Good to see its been useful to someone. As it happens Midi is a 7-bit data format which explains what you've been seeing! Thanks for sharing the extra info you've found out.

      Are you working on any exciting hardware?

      • Joe Porter says:

        My pleasure!
        This was for a Crestron control processor and an iConnectivity iConnectMIDI4+. The iConnect is an ethernet interface using AppleMIDI/RTP-MIDI. There are four M350 units in a dance floor karaoke system with iPad control for everything.

Leave a Reply

Your email address will not be published. Required fields are marked *