One of the most maddening things about using a modular synth is how few oscillators track accurately – or at least each other – fresh out of the box. It’s something you think manufacturers would have mastered by now, but they haven’t (partially because so many other modules in a system – such as MIDI to CV converters and buffered mults – can introduce inaccuracies themselves).

Some oscillators have calibration routines; some have trimmers you can manually adjust; there are a few modules – like the AJH V-Scale and Klavis CalTrans – that can help. But earlier this year, I decided to pay someone to write some custom firmware for the Ornament & Crime module (o_C) to help me tame the wide variety of sound sources I have.

That firmware is called Calibr8or, written by DJ Phazer, and is demonstrated in the video above. We’ve made it free for everyone with an o_C; it is an app he includes with the Phazerville Suite:

Using Calibr8or is demonstrated in the video below. For those who prefer text, the rest of this post explains how to use it, and some tips on calibrating the tracking of your oscillators with it.

NOTE: I recorded the video above using v1.5.1 of the firmware. Version 1.6.6 changed the way a few things operate (for the better). I’ll note those changes below.

Loading Alternate Personalities:

Once you have installed the hex code into your module and powered it on, you can change which application or set of applications your hardware is running by making a long press on the right encoder. Scroll with the right encoder to select Calibr8or (or whatever you want to run), and then make a short press on the right encoder to load it.

UI Overview:


The four o_C channels run four separate copies of Calibr8or. Patch your pitch controller such as your sequencer or keyboard into the CV jack for a channel, and then patch the Out jack for that channel into your sound source. The Trig jack for that channel is optional, and is used in sample & hold mode (described below).

Selecting Channels and Parameters:

Short presses on the up & down arrows change which channel you are editing. (Which button increments versus decrements the channel number changed in v1.6.6. Either way, it will become obvious as soon as you use it.)

There is a small arrow in the display that points at which parameter you are editing for that channel. Short presses on the encoders toggles between the groups of parameters.

Transposition & Tracking:

Short presses on the left encoder toggle between the parameters on the left: octave & semitone transposition (the larger numbers inside a box), and tracking & fine tuning adjustments (the smaller numbers underneath the box).

  • When the arrow is pointing at the numbers inside the box, the left encoder edits the octave transposition for that channel, and the right encoder edits the semitone transposition.
  • When the arrow is pointing to the smaller numbers underneath the box, rotating the left encoder “tilts” the tracking, as described below:
  • Values greater than 100% make higher notes increasingly sharp, and lower notes increasingly flat
  • Values lower than 100% make higher notes increasingly flat, and lower notes increasingly sharp.
  • Rotating the right encoder offsets the pitch upward or downward by the smallest increments the o_C is capable of, which is just under a cent. This is handy for dialing specific amounts of detune, or to fine-tune an oscillator when its front panel controls are too touchy.


Short presses on the right encoder toggle between editing parameters on the left side of the display, and those on the right. When the arrow is pointing at the second line of the right, and the word above it is highlighted (appears in reverse text), you are editing the scale to quantize to, and the root key of the scale you are quantizing to.

When in this mode, for versions 1.6.5 and earlier, rotating the right encoder edits the scale, using code borrowed from other o_C apps. The default is SEMI for semitones (all 12 of the equally tempered pitches). Rotating the right encoder while the arrow is pointed at this line selects different scales, including OFF (one click down from SEMI) and four user scales (further clicks down from OFF). You can edit the user scales in a separate “personality” for the module, selected using the same instructions as above for Loading Alternate Personalities.

When in this mode (again, for v1.6.5 and earlier), rotating the left encoder edits the root key; C is the default. (I am told the left and right encoders will swap to be more intuitive in v1.6.6, with the left encoder editing the upper Scale value, and the right editing the lower Root value.)

Note that the scale and root key can be set independently for each channel.

The inputs of the o_C are sampled with only 12-bit accuracy (not great), while the outputs have 16-bit accuracy (which is great).

  • If your pitch CV has glides, bends, vibrato, and the such, you will want to set the Quantizer to OFF to let those get through, at the price of the intonation being less accurate (some notes may be off by a cent or few).
  • If you are just jumping from note to note, leave the quantizer on (SEMI being a good default), as it will correct for any errors in the pitch voltage before it hits the o_C including from less-than-perfect MIDI to CV converters, less-than-precise buffered mults, etc.

Sample & Hold:

Normally, edits in Calibr8or take effect immediately. However, you can have your edits hold off until a trigger pulse is received at the corresponding channel’s jack. This turns Calib8or into a sample & hold (S&H) with integrated quantizer, tracking, and offset controls.

The default is for the S&H to be off for a channel. To toggle between modes, long-press on the left encoder.

  • The first mode shows a stopwatch icon next to the left of the channel number. This means any edits to the front panel controls will not take effect until a trigger is received for that channel, while any changes at the CV input are passed through immediately. If you patch a copy of your keyboard or sequencer’s trigger/gate out to this jack, you can change transpositions (for example) between notes, and it will take effect on the next note. I often patch a trigger that happens on the downbeat every one or two bars so I can transpose my sequences well in advance, and have them automatically change on the downbeat.
  • The second mode (a second long press on the left encoder) will display a staircase to the right of the channel number along with the stopwatch to the left. This mode holds off any changes to the controls and at the CV input jack until a trigger or gate is received at the corresponding Trig jack. This is full sample & hold mode, with the benefit of the transposition, tracking, and scale quantization sections.

Note these modes can be set differently for each channel.

Saving & Loading Presets:

This is the trickiest part of using Calibr8or: In versions 1.6.5 and earlier, there were two different “saves”: one action saves just the settings for Calibr8or for the selected preset during the current session (while it is powered on), while the the other action saves the current state for all presets to non-volatile memory, which is loaded the next time you boot up Calibr8or.

In the upper right corner of the display, you will see a letter – A through D – for which preset is currently loaded. If there is an asterisk next to the letter, you have edited something since you last saved or loaded that preset.

To save the current settings for the current session, long-press the down button (the one on the right). This will take you to a screen with four different preset slots:

  • Rotate or press the left encoder to toggle between LOAD and SAVE
  • Rotate the right encoder to choose a slot.
  • Short-press the right encoder to execute the LOAD or SAVE; this will be confirmed by the letter in the upper right corner of the display, with no asterisk shown.

(To cancel out of this screen, press the up or down buttons; o_C will also “time out” of these screens if you leave it alone for a few seconds.)

  • To save the current settings for all of your presets to non-volatile memory so they will be there the next time you run Calibr8or, long-press the right encoder to get to the Personality screen. With Calibr8or selected, long-press the right encoder again; the screen will change to indicate it is saving to memory, with a progress bar.

As of v1.6.6, I am told that saving a Preset will also save settings to the non-volatile memory, which will make this much easier to use, with fewer chances of forgetting to perform one of the saves.

Tuning Procedure

I patch each of the four outputs of o_C running Calibr8or to their own sound source modules (VCOs, sample players, modeling-based modules, etc.). I then patch my controller (keyboard, sequencer, etc.) to the corresponding input on o_C for the sound source I wish to use. If I want to control more than one sound source with the same pitch CV, I patch from my controller through a buffered multiple to the desired inputs. I particularly like the Frap Tools 333, as it is also a precision adder for summing together, say, a keyboard and sequencer, or a pair of sequencers.

For the initial tune, I let my modules warm up for a half hour or more, patch my controller into one input on the o_C, use the up/down buttons on o_C to select that channel in Calibr8or, and patch the output of the corresponding sound source module to a tuner. (If you don’t have a tuner, set up a second oscillator with no controller tuned to a root pitch like C and leave it alone. Mix its audio with the sound source you are tuning, and use your ear to judge if they match.)

  • Play a note such as C, and tune the sound source to that note using its own coarse and fine controls. (See User Tips below for suggestions initial settings.) If the module’s tuning knobs are too frustrating to use accurately, I set the module’s Fine Tune to 12:00, and instead I use the tuning offset parameter in Calibr8or (right encoder in Tracking mode – see above) to get the exact tuning I want.
  • Then play a note 2-4 octaves higher, and see if it is correct. If it isn’t, use the “tilt” value of the the tracking controls in Calibr8or (the left lower number, shown as a %, edited with the left encoder) to get it to be exactly in tune.
  • Then play the original low note, and tweak the fine tune either on the module or in Calibr8or to get it back on pitch. Repeat with the higher note and tweak its tilt. Go back and forth between the two until both notes are perfectly in tune.
  • Then save, to not lose this data.

After calibrating one sound source, I then patch through the other channels on the o_C to get the rest of my connected sound sources in tune and tracking correctly, saving after each one.

Some have asked why I don’t just use the Autotune routine in the original o_C app References. On the positive side, Autotune custom-builds a tuning table with an adjustment per octave of its range without you having to manually tweak values, and the resulting table is automatically available to all the other apps in the stock firmware.

On the negative side, References does not itself include the combination of scale quantization, sample & hold functionality, and other features of Calibr8or that I love. But also, the Autotune routine does not work with plucked / struck / percussive sound sources, and by calibrating only octaves it also runs foul of the same quirk in some oscillators where they go out of tune just a semitone or two before 0v – with possibly even worse results, as you would now have a bad data point for 0v.

That said, Nick is looking into adding References (or at least the Autotune routine) to his Phazerville Suite, with an eye toward allowing Calibr8or to take advantage of it – while keeping the scale quantization, sample & hold, and other features of Calibr8or. I’ll update this post if and when that happens.

User Tips

Not all sound sources can take a full negative to positive swing pitch control voltages. Many digital modules in particular only listen to positive voltages, and may be go of tune as you get close to 0 volts no matter what you do. Also, I’ve seen some analog modules which track differently above 0 volts than they do below 0 volts.

To work around this, I try to keep my pitch CVs going to the modules in the positive range. I will set the coarse tune as low as I can during the initial tuning phase above, which means it will want positive voltages to play pitches higher than that. I then make sure the root note I use for the initial tune is not the lowest note the sound source will play (as that might be the dreaded 0v that misbehaves on some digital oscillators) – I typically use a note at least 3 semitones above that lowest pitch, and often go a full octave above it. Use the Octave transpose control on Calibr8or (not the coarse tuning control on the sound source) to get the pitch range you want to use.

Sound sources that naturally decay – such as drum modules and plucked string emulations – are trickier to tune, as their notes die away when you’re trying to check their tuning. If it’s a polyphonic module, set the number of notes down to 1 if you can while tuning. Try to remove any character from the attack transient (for example, click level and pitch bend amounts to 0), and set a longer decay so the tuner (or your ears) can track it longer. Then repeatedly trigger the note you are tuning while adjusting Calibr8or to dial in the settings you want. When done, then you can go back and set up the sound parameters you prefer.

Some sound sources are devilish, and don’t track the same from one octave (or even semitone) to the next. This is when you either need to see if they have any internal fine tuning such as “high frequency compensation” to tweak, or to use a module like the Klavis CalTrans or Bastl 1983 to construct a custom tuning table with an adjustment for every note. But for simple tracking compensation, transposition, and quantization, I have found the Calibr8or firmware to be indispensable.