{"id":49,"date":"2011-09-07T00:56:32","date_gmt":"2011-09-07T00:56:32","guid":{"rendered":"http:\/\/francisfisher.me.uk\/problem\/?p=49"},"modified":"2012-07-19T18:54:49","modified_gmt":"2012-07-19T18:54:49","slug":"deciphering-tc-electronic-m350-sysex-format","status":"publish","type":"post","link":"https:\/\/francisfisher.me.uk\/problem\/2011\/deciphering-tc-electronic-m350-sysex-format\/","title":{"rendered":"Deciphering the TC Electronic M350 SysEx format"},"content":{"rendered":"<p>I recently acquired a <a href=\"http:\/\/www.tcelectronic.com\/m350.asp\">TC Electronic M350 effects unit<\/a>. 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.<\/p>\n<p>Unfortunately the <a href=\"http:\/\/www.tcelectronic.com\/m350software.asp\">librarian\/editing software<\/a> that TC electronic make available (called Vyzor but actually a customised version of a librian product called <a href=\"http:\/\/www.squest.com\/Windows\/UniQuest\/SoloQuest-About.html\">Uniquest<\/a>) doesn't work very well on Windows 7 64 bit.<\/p>\n<p>They barely mention their sysex support in <a href=\"http:\/\/www.tcelectronic.com\/m350manuals.asp\">the manual<\/a> 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).<\/p>\n<p>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 <a href=\"http:\/\/jsynthlib.org\">JSynthLib<\/a> which is a librarian\/editor that actually works on Windows 7 (and also Macs and Linux as it is cross-platform).<\/p>\n<p>I have made the following notes which I am leaving up here in case they are useful to anybody in the future.<\/p>\n<blockquote><p><strong>TC E<\/strong><strong>lectronic M350 system exclusive spec for firmware version 1.3:<\/strong><\/p>\n<p>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.<\/p>\n<p>The basic sysex format is:<\/p>\n<p>F0 00 20 1F 00 58 mm &lt;data&gt; F7<\/p>\n<p>mm is the message type and there seem to be the following message recognised:<\/p>\n<p>20: patch data (bi-directional)<br \/>\n22: value change (bi-directional)<br \/>\n45: request patch (to device only)<br \/>\n47: request parameter value (to device only)<\/p>\n<p><strong>message type 20 patch data<\/strong><\/p>\n<p>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<br \/>\npp = patch number, (00 = edit buffer)<br \/>\nuu: unknown always 00(maybe bank #? but unused as far as I can see)<br \/>\naa 20 chars patch name<br \/>\nbb bb 2 bytes - tap (milliseconds, LSB first)<br \/>\ncc input gain<br \/>\ndd mix ratio<br \/>\nee effect bal<br \/>\nff delay effects<br \/>\ngg delay\/timing<br \/>\nhh feedback\/depth<br \/>\nii reverb type<br \/>\npre delay<br \/>\njj decay time<br \/>\nkk colour filter<br \/>\nll checksum - this is calculated simply by summing all the data bytes (i.e. not the header bytes and not the checksum\/tail bytes)<\/p>\n<p><strong>message type 22 real time parameter changes sent by editor software or device (seems to be a duplicate of the normal midi controller messages)<\/strong><\/p>\n<p>f0 00 20 1F 00 58 22 01 xx yy yy F7<\/p>\n<p>yy = value (second yy is 0 apart form for 0d tap in ms)<br \/>\nxx = parameter number:<br \/>\n00 = input gain<br \/>\n01 = mix ratio<br \/>\n02 = effect bal<br \/>\n03 = delay effects ( yy = 00 - 0f )<br \/>\n04 = delay timing<br \/>\n05 = feedback depth<br \/>\n06 = reverb type (yy = 00 - 0f)<br \/>\n07 = predelay<br \/>\n08 = delay time<br \/>\n09 = colour filter<br \/>\n0a = bypass toggle (yy = 00 \/ 7f)<br \/>\n0b = dual input mode toggle ??????? pure guess<br \/>\n0c = digital input toggle (yy = 00 \/ 7f)<br \/>\n0d = tap in ms ( 2 bytes, LSB first )<br \/>\n0f = toggles front panel lock - 40+ makes it remote controlled, less than that makes it editable<br \/>\n10 = delay effects on\/off toggle?<br \/>\n11 = reverb effects on\/off toggle?<\/p>\n<p>Note that parameters 0a\/0b\/0c\/0f\/10\/11 can be controlled via the software, but are not sent or stored in the patches.<\/p>\n<p><strong>message type 45 request patch<\/strong><br \/>\nF0 00 20 1F 00 58 45 pp bb F7<\/p>\n<p>pp is patch number<\/p>\n<p>bb is always 00 but I speculate this could be bank number, possibly in future versions of this device.<br \/>\n<strong>message type 47 request parameter value<\/strong><br \/>\nF0 00 20 1F 00 58 47 xx F7<br \/>\nxx = parameter number as listed for message 22<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/posts\/49"}],"collection":[{"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/comments?post=49"}],"version-history":[{"count":8,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/posts\/49\/revisions"}],"predecessor-version":[{"id":51,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/posts\/49\/revisions\/51"}],"wp:attachment":[{"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/media?parent=49"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/categories?post=49"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/francisfisher.me.uk\/problem\/wp-json\/wp\/v2\/tags?post=49"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}