Tc 2290 preset creation process

A few folks said it might be interesting to see how a preset is developed from scratch. So, my plan is to use this thread to document how I go about creating a preset from the MIDI system exclusive documentation + a piece of hardware. This is not going to be a daily blog kind of thing. My free time is extremely limited, so likely there will be bursts and then lulls. Since a lot of it is a work in progress, it doesn’t make sense to put up publicly available presets on the site, so all the work in progress will be attached to posts here as zip files.

The first step in this case is to grab some tools -
I have a Mac in the music area and a Windows 10 machine upstairs. Here’s some of the common tools I use on the platforms.

Windows -
MIDI-Ox for sending, receiving, and looking at MIDI,
an EMU-XMIDI 1x1 USB to DIN cable to connect gear directly to computer,
HexWorkshop hex editor in case I need to look at raw dumps; also good for calculating checksums,
Windows calculator to help with decimal/hex/binary

Mac -
Sysex Librarian and MIDI Monitor for sending,receiving, and looking at MIDI data,
an EMU-XMIDI 1x1 USB to DIN cable to connect gear directly to computer,
command-line hexdump (hexdump -C ) for looking at raw sysex files,
calculator with programmer mode to see decimal/hex/binary data


The first thing I do is manually test out some of the sysex to see if it matches the document.
In this case, the tc 2290 sysex is fairly simple to understand and I’m going to try to create parallel presets - one using LUA extensively and the second using as much pure JSON with sysex controls as possible.

Initial sysex test dumps are attached. The other thing to do is to start a ‘notes and corrections’ file documenting basic stuff about the machine and the published sysex specs.

So far, using MIDI-Ox, I was able to request a patch, request the Specials list, and request a full front panel dump. I tend to convert the raw sysex into ASCII so I can look at it in a text file and make notes as I go.

Looking at the patch file, it appears to map cleanly to the published spec with no real surprises. The Specials data dump shows more specials numbers mapped than what is listed, which makes sense since the documentation is for a slightly older OS. The front panel dump also matches with the slight surprise that the display numbers are coded in decimal and not hex.

Looking over the docs, it appears that I need to send parameter changes back to the 2290 as a series of keycodes in small sysex messages.

At this point, I still have not hooked the Electra One hardware into the loop; just manually keying in messages and seeing the results.

Attached are the initial docs and sysex dumps in case you want to play along at home.

tc (2.2 KB)


ok, first cut at sending a patch request and parsing the data coming back.
Note that all info is showing up as print statements in the console log, no on-screen controls yet.

My personal convention is to put the patch request controls on page 12 since it’s really easy to use one hand to push the lower right button and select the 12th knob.

tc (1.6 KB)

1 Like

Will look at these two this week and try to hook up the tc2290 to sysex lib midi mon etc. What’s a good text editor to use for documenting hex decimal binary on Mac?

Umm, you could use sysex librarian to capture the dump and then open up a terminal window and use hexdump -C to read the raw binary and pipe that to a text file.

Yeah, I know - that’s a lot of geek.

The beauty of MIDI-OX is it does a lot for you. You can’t just type in a sysex string into Sysex Librarian.

MIDI Monitor might be enough. You can click on the sysex message and select Events, Show Detailed Data and save that as a text file.

The trick is sending the dump request. That’s why I also use a PC. Some things are just easier on one format or the other. On the Mac, I can run both the Electra console and the web editor app and I can’t do that on the PC.

You should be able to, using loopbe as a virtual midi cable intermediate, because it is multi client capable.
Or using a multi client capable midi interface.

I had some moments to read through the LoopBe site and I’m quite impressed. I’ll try pulling down a copy and see what I can see. I know you mentioned it in the past, so thanks again for the reminder.

1 Like
  • screwing around a little w MIDI Monitor, a text editor
    -cracked open the tc2290 manual, not clear to me what which methods exist for making a dump request, thought it might be possible from the front panel, doesn’t sound like it from what you wrote…

can’t do it from the front panel. Need to send the sysex string from something. The EPR file I included lets you select a patch and then requests the dump, so if you are monitoring the tc 2290 output you will see/capture the sysex dump.

Load up the EPR file, go into the web app editor, click on “edit LUA script”, paste in the contents form my LUA file and it should work (assuming you have the 2290 set up for MIDI/sysex dumping)

OK - wish me luck…

Btw: it was 2 epr-files that came, named identically in the web editor (tx 2290 V2), one is 582, the other 853 bytes.

Yeah, that was my haste. One is a “pretty-print” version of the other and should have been named with a .txt instead of .epr.

Although, since it’s a very small file, both will load into the web app when you do Import.

In the future, I’ll keep the compact form as epr and the human-readable version as txt

1 Like

Have you seen 2290 - Special Numbers, quite a lot there, including a few manual details I don’t have in my original manual in a TC binder. My manual goes up to Special Numbers 90-98, while the site list shows Numbers up to 120. The manual I have (and got with the 2290 ten years or so ago) ends at 98, but my 22290 accepts the 110 Number with no problem (it was already at 0).

The Special Numbers is the 2nd or 3rd dump I would try to handle. I was successful dumping it, but it’s going to take research to fully map out the values to the positions to the text describing what it does.

Focus initially on the main patch dump, because even that sysex has errors (or unclear mapping).
Attached is a 3rd iteration that now displays the values for the first few displays. However, the Delay Mod Speed is not mapping correctly to the documentation.

But you can see some more of what is happening inside the LUA code. I have things broken out into many simple functions because I do not know if I’m going to need to do more things in the future. I can always consolidate code later.

tc (2.3 KB)

Overall, once this gets tweaked a bit more, the next step will be to figure out how to implement changing the values. Then after that, handle the Special Numbers dump, then map out every parameter to a control. Dumping and parsing the full display panel might be useful to set some values and colors and such.

I dl’d the 3rd iteration, imported the epr to My Presets, pasted the Lua script you sent into that field, sent the epr to E1. Enabled the MIDI button on 2290 (right?). Sent the changed epr to E1. Hit the Patch Request button, “Request Patch” shows in lower left corner on E1, which thereafter does nothing that I can see, and is unresponsive. Power-cycled E1. Tried hitting the 4 buttons in the Preset. FEEDBACK is lit, touching it dims it. Same w the other three. Re-hit the Patch Request button, same REQUEST PATCH message in left lower corner, still unresponsive.

So, maybe something happened but I need to cable this up so I get some feedback as to what the 2290 is possibly returning on hitting that Patch request button (#6). Was thinking merge box etc, but what I have now is 2 MIDI cables between the E1 MIDI 2 ports and 2290. Since the E1 is powered from the mioXL, connected to same computer as the Console, the Console tells me plenty about what happens, though I cannot tell if anything actually passed from 2290 to E1, doesn’t look like it to me.

Was wondering why the LUA script you sent in the zip (the script I pasted into the LUA script field in the epr in the web editor, before sending to the E1) wasn’t already “mounted” in the epr file - is that not possible? But whatever else might have transpired, E1 becomes unresponsive, while showing the four buttons (FEEDBACK etc) and the message in the lower left corner.

You read the notes in the tc 2290 docs about setting Special numbers 2 and 3 to 0 and special number 116 to 0 as well as pushing the MIDI enable button on the panel?

You have to do that every power up of the 2290. (I believe so, unless my battery is dead - need to verify)

For whatever reason when you save the epr from the web app, the LUA does not come with it. If you grab it from the public listing inside the web app, it’s there.

This is why this whole thread is done with zip files and a work in progress. There is some expectation that what I include will work, but it’s mostly a learning tool to document as it progresses.

There’s a 100 ways to program a solution and all can be valid. Some are more robust, more complete, or whatever, but in programming, all the steps/information matters for any solution.

Hi, I’m acquainted with MIDI but not with Lua or Json. So a little push from your side would help. I’ll work on a Korg KingKorg to exchange sysex with.

can you share your preset with us in the state it is in, so I can understand how you set things up to request the patch?
What do I need to do to get the sysex reply visible somewhere?

The ZIP files I attached to the various posts have both the EPR file (JSON) and the LUA file you need to see/edit the preset so far. The ideas in there can be used to do something similar with another synth like the KingKorg, but because so much depends on the specific nature of the sysex messages, a lot has to be done from scratch.

Martin is working on a more structured approach to editing and parsing sysex messages, so when that is published your life might get a bit easier.

In general, my approach to the problem is this:

  • use external tools to first send a patch dump request and capture the sysex patch data returned.
  • study the sysex dump to see if I understand how the data is packaged.
  • create a minimal preset that selects a patch, sends out the dump request, and captures the result
  • print a few values from the dump to the console log to see if I can read it
  • set up a few virtual buttons on screen, and stuff the data I was printing into the button names
  • determine how best to send parameter updates back to the target hardware
  • add code (LUA or sysex) to a single control to send back updated values
  • test receiving a patch, displaying the correct current value, and moving the control to send updates to correctly change the value on the hardware
  • create a patch on the target hardware with different values in all parameters
  • use the minimal preset to get that special patch, fully parse it, print all values to the console log and match it up with the hardware
  • design various faders, lists, momentary buttons, etc to hold/control the values
  • get multiple patches, populating the controls and see if they all match the settings in the gear each time
  • test every control across the complete range to verify they all read and update correctly
  • refine layout of controls and pages until satisfied
  • determine, if possible, how to save changes on the target hardware

Also - there is code in there to prevent you from successfully requesting a patch until you actually select a patch number. You need to go to page 12 of the tc 2290 preset and select a patch number between 1 and 99 before you press the ‘Patch Request’ button.

Having all the text in the lower corner sounds like some kind of weird bug associated with the ‘jump the user to Page 12’ stuff.

Is your Electra One hardware updated to 2.14? If not, it needs to be.

Good news: applied your tips and noodled around with Midi Ox, Electra in the middle and KingKorg at the other side. And yes after half an hour, I managed to send hand typed requests from Midi Ox via E1 into the KK and got the expected answer. First time ever :slight_smile: