How to read Novation Circuit macro knob positions

I had created a nice instrument on the Circuit from a default patch and macro knob filtering. Now I wanted to...

  1. Retrieve the macro knob positions so I could reuse the instrument later.
  2. Apply the instrument (patch number and macro knob positions) to sessions for test without overwriting those sessions notes.

As it turned out 1. is not so easy.

You can lookup the mentioned documented CCs and SysEx in the Circuit Programmers Reference guide.

Problem 1: Retrieving macro knob positions

Deliberations

There is no SysEx known which queries just the 8 macro knob positions for current session and synth 0 or 1. But there are official CCs which set those positions. So its only one-way direction.

Macro knob positions are saved with the session. There is a undocumented SysEx command for dumping all sessions but the structure of the data returned is unknown to me. Its not documented.

Note if you dump a patch by SysEx command, you will find it contains only the patch default knob positions. As stated before, the positions are stored to session data, not to patch.

Solution

Make several session dumps of the session the instrument is contained in. Find the locations of macro knobs positions values by diffs. This solution is tedious. Of course when sessions dump format is reverse engineered or officially published, it will be easy to retrieve macro knob positions for all synths in all sessions.

  1. Backup: In Components application import all data from Circuit and save as pack. This is just to make sure you do not loose any work in any case.
  2. Save the session of interest. Name it A.syx.
  3. On the Circuit, in the session, for the first synth set all macro knobs to maximum, all macroknobs of second synth to minimum. Save the session on the circuit (hitting Save twice).
  4. In Components application import session content from Circuit. Save the session of interest. Name it B.syx.
  5. On the Circuit, in the session, for the first synth set all macro knobs to minimum, all macroknobs of second synth to maximum. Save the session on the circuit (hitting Save twice).
  6. In Components application import session content from Circuit. Save the session of interest. Name it C.syx.
  7. Binary diff the files B.syx and C.syx to find the 8 macro knob position locations for each of the two synths. Positions are one byte each, 0x00 min to 0x7f max. Locations (offsets) are where those files differ. First positions for synth 0, then synth 1. Ignore differences at end of files which may be just version data or checksum. Note that even if you are convinced having turned the kobs knobs to their max respective min, you may find the values be slightly off, e.g. 0x7e instead of 0x7f. In A.syx lookup the macro knob values at their locations (offsets). Scribble these values down. Hooray !
  8. Restore the backup (pack) from step 1.

Of course two dumps would suffice. I use three to work more methodically.

Problem 2: No way of copying only patch (reference) and macro knob positions on device from session to session

This one is easily solved. Now, to copy an instrument to a session without touching the notes, select that session, then select the according patch, e.g. by Program Change or manual selection, then set the macro knob positions with CCs.

Note

I verified the given approach with success by extracting the macro knob positions for the detuned lead in "Samurai Cowboy" (default patch "45 Dual Resonances", macro knob positions 0x24, 0x2f, 0x09, 0x20, 0x46, 0x0c, 0x25, 0x00) and copying it to other sessions without touching their notes.