This page is read from MIDI Instrument Definitions, a Python library used in the author's other projects, in which every number is traced to a document its maker published. Its source is on GitHub.
Novation Circuit Rhythm MIDI implementation
The MIDI implementation of the Novation Circuit Rhythm: what it answers to, and the 74 controls it offers, on firmware 2.0.
At a glance
- Firmware
- This page describes firmware 2.0.
- MIDI channel
- Any one of 1 to 16.
- Parts
- Sample track, 8 of them: each on a MIDI channel of its own, taking controls.
Project: on MIDI channel 16, taking notes and program changes. - Voices
- Not recorded.
- Notes
- Each note plays a drum of its own, listed below.
- Note range
- Not recorded.
- Velocity
- Not recorded.
- Aftertouch
- Not recorded.
- Pitch bend
- Not recorded.
- Program change
- Received and sent, with 64 presets.
- MIDI clock
- Sent and received.
- Start and stop
- Sent and received.
- Control change
- 50 controls, in the tables below.
- NRPN
- Supported. 24 of the controls below have one.
- System exclusive
- Not recorded.
Drum notes
Each drum plays from the note beside it.
| Drum | Note |
|---|---|
sample_track_1 |
36, C2 |
sample_track_2 |
38, D2 |
sample_track_3 |
40, E2 |
sample_track_4 |
41, F2 |
sample_track_5 |
43, G2 |
sample_track_6 |
45, A2 |
sample_track_7 |
47, B2 |
sample_track_8 |
48, C3 |
Controls
In the order the definition gives them, by part and group. Under each control is the name a program calls it by, once pymidiinstrumentdefs.load("novation/circuit_rhythm") has loaded them.
Sample track
Voice
| Control | CC | NRPN | Values |
|---|---|---|---|
Voice SampleChoicevoice_sample_choice |
8 | 0-127; default 0 | |
Voice PlaybackModevoice_playback_mode |
12 | 0-2; default 0 | |
Voice Reversevoice_reverse |
14 | 0-1; default 0 | |
Voice Chokevoice_choke |
15 | 0-1; default 0 | |
Voice Slicevoice_slice |
16 | 0-1; default 0 | |
Voice Number of Slicesvoice_number_of_slices |
17 | 1-16; default 16 |
Sampler
| Control | CC | NRPN | Values |
|---|---|---|---|
Sampler Pitchsampler_pitch |
21 | 4-124 | |
Sampler StartCoarsesampler_start_coarse |
22 | 0-127; default 0 | |
Sampler LengthCoarsesampler_length_coarse |
23 | 0-127; default 127 | |
Sampler Slopesampler_slope |
24 | 0-127 | |
Sampler Distortionsampler_distortion |
25 | 0-127; default 0 | |
Sampler HPFsampler_hpf |
26 | 0-127; default 0 | |
Sampler LPFsampler_lpf |
27 | 0-127; default 127 | |
Sampler Resonancesampler_resonance |
28 | 0-127; default 0 | |
Sampler StartFinesampler_start_fine |
86 | 0-127; default 0 | |
Sampler LengthFinesampler_length_fine |
87 | 0-127; default 127 |
Mixer
| Control | CC | NRPN | Values |
|---|---|---|---|
Mixer Levelmixer_level |
29 | 0-127; default 100 | |
Mixer Panmixer_pan |
30 | 0-127 | |
Mixer ReverbSendmixer_reverb_send |
31 | 0-127; default 0 | |
Mixer DelaySendmixer_delay_send |
32 | 0-127; default 0 |
Dipper
| Control | CC | NRPN | Values |
|---|---|---|---|
Dipper Sourcedipper_source |
128 MSB 1, LSB 0 |
0-127, or 0-7 by NRPN; default 0 | |
Dipper Attackdipper_attack |
129 MSB 1, LSB 1 |
0-127; default 0 | |
Dipper Holddipper_hold |
130 MSB 1, LSB 2 |
0-127; default 0 | |
Dipper Decaydipper_decay |
131 MSB 1, LSB 3 |
0-127; default 0 | |
Dipper Depthdipper_depth |
132 MSB 1, LSB 4 |
0-127; default 0 |
On the base MIDI channel
Reverb
| Control | CC | NRPN | Values |
|---|---|---|---|
Reverb Typereverb_type |
146 MSB 1, LSB 18 |
0-127, or 0-5 by NRPN; default 2 | |
Reverb Decayreverb_decay |
147 MSB 1, LSB 19 |
0-127; default 64 | |
Reverb Dampingreverb_damping |
148 MSB 1, LSB 20 |
0-127; default 64 |
Delay
| Control | CC | NRPN | Values |
|---|---|---|---|
Delay Timedelay_time |
134 MSB 1, LSB 6 |
0-127; default 64 | |
Delay TimeSyncdelay_time_sync |
135 MSB 1, LSB 7 |
0-127, or 0-35 by NRPN; default 20 | |
Delay Feedbackdelay_feedback |
136 MSB 1, LSB 8 |
0-127; default 64 | |
Delay Widthdelay_width |
137 MSB 1, LSB 9 |
0-127; default 127 | |
Delay LRRatiodelay_lrratio |
138 MSB 1, LSB 10 |
0-127, or 0-12 by NRPN; default 4 | |
Delay SlewRatedelay_slew_rate |
139 MSB 1, LSB 11 |
0-127; default 5 |
Effects
| Control | CC | NRPN | Values |
|---|---|---|---|
Effects Bypasseffects_bypass |
149 MSB 1, LSB 21 |
0-127, or 0-1 by NRPN; default 0 |
BeatRepeat
| Control | CC | NRPN | Values |
|---|---|---|---|
BeatRepeat OnOffbeat_repeat_on_off |
39 | 0-1; default 0 | |
BeatRepeat Ratebeat_repeat_rate |
40 | 0-10; default 5 | |
BeatRepeat DryWetbeat_repeat_dry_wet |
41 | 0-127; default 0 |
Reverser
| Control | CC | NRPN | Values |
|---|---|---|---|
Reverser OnOffreverser_on_off |
42 | 0-1; default 0 | |
Reverser Ratereverser_rate |
43 | 0-3; default 2 |
Gator
| Control | CC | NRPN | Values |
|---|---|---|---|
Gator OnOffgator_on_off |
44 | 0-1; default 0 | |
Gator Rategator_rate |
45 | 0-11; default 5 |
Autofilter
| Control | CC | NRPN | Values |
|---|---|---|---|
Autofilter OnOffautofilter_on_off |
46 | 0-1; default 0 | |
Autofilter FilterTypeautofilter_filter_type |
47 | 0-3; default 0 | |
Autofilter Frequencyautofilter_frequency |
48 | 0-127; default 80 | |
Autofilter LFOamountautofilter_lfo_amount |
49 | 0-127; default 40 | |
Autofilter LFOshapeautofilter_lfo_shape |
50 | 0-2; default 0 | |
Autofilter LFOrateautofilter_lfo_rate |
51 | 0-13; default 8 | |
Autofilter Resonanceautofilter_resonance |
52 | 0-127; default 63 |
DigitalLofi
| Control | CC | NRPN | Values |
|---|---|---|---|
DigitalLofi OnOffdigital_lofi_on_off |
53 | 0-1; default 0 | |
DigitalLofi Bitsdigital_lofi_bits |
54 | 0-127; default 30 | |
DigitalLofi SampleRatedigital_lofi_sample_rate |
55 | 0-127; default 30 |
Phaser
| Control | CC | NRPN | Values |
|---|---|---|---|
Phaser OnOffphaser_on_off |
56 | 0-1; default 0 | |
Phaser Ratephaser_rate |
57 | 0-13; default 7 | |
Phaser Depthphaser_depth |
58 | 0-127; default 64 | |
Phaser Feedbackphaser_feedback |
59 | 0-127; default 0 | |
Phaser Centrephaser_centre |
64 | 0-127; default 0 |
Vinyl
| Control | CC | NRPN | Values |
|---|---|---|---|
Vinyl OnOffvinyl_on_off |
60 | 0-1; default 0 | |
Vinyl Filtervinyl_filter |
61 | 0-127; default 64 | |
Vinyl Wobblevinyl_wobble |
62 | 0-127; default 64 | |
Vinyl Cracklevinyl_crackle |
63 | 0-127; default 64 | |
Vinyl Hissvinyl_hiss |
65 | 0-127; default 64 |
LP HP filter
| Control | CC | NRPN | Values |
|---|---|---|---|
LP HP Filter Frequencylp_hp_filter_frequency |
79 | 0-127; default 64 | |
LP HP Filter Resonancelp_hp_filter_resonance |
71 | 0-127; default 30 |
Compressor
| Control | CC | NRPN | Values |
|---|---|---|---|
Compressor On/Offcompressor_on_off |
150 MSB 1, LSB 22 |
0-127, or 0-1 by NRPN; default 1 | |
Compressor Attackcompressor_attack |
151 MSB 1, LSB 23 |
0-127; default 0 | |
Compressor Releasecompressor_release |
152 MSB 1, LSB 24 |
0-127; default 0 | |
Compressor EnvelopeFollowcompressor_envelope_follow |
153 MSB 1, LSB 25 |
0-127; default 0 | |
Compressor SoftClipcompressor_soft_clip |
154 MSB 1, LSB 26 |
0-127, or 0-1 by NRPN; default 1 |
Audio input
| Control | CC | NRPN | Values |
|---|---|---|---|
Audio Input GainPaddingaudio_input_gain_padding |
155 MSB 1, LSB 27 |
0-127, or 0-1 by NRPN; default 0 | |
Audio Input Routingaudio_input_routing |
156 MSB 1, LSB 28 |
0-127, or 0-1 by NRPN; default 0 | |
Audio Input Thresholdaudio_input_threshold |
157 MSB 1, LSB 29 |
0-127, or 0-1 by NRPN; default 1 | |
Audio Input Monitoraudio_input_monitor |
158 MSB 1, LSB 30 |
0-127, or 0-1 by NRPN; default 1 | |
Audio Input Levelaudio_input_level |
90 | 0-127; default 100 |
Where these facts come from
Source documents
- Circuit Rhythm Programmer's Reference Guide, Version 5, dated 13 July 2023, its MIDI implementation, read on 4 October 2026 (the file read).
- Circuit Rhythm User Guide, v1.0 English, dated 30 June 2021, its user manual, read on 4 October 2026 (the file read).
- Circuit Rhythm Firmware Update - Version 2.0 Addendum, V1 English, dated 8 November 2022, its firmware addendum, read on 4 October 2026 (the file read).
- Circuit Rhythm | Novation Downloads, its download page, read on 4 October 2026.
How they were read
Three documents and a downloads page, all Novation's own. The Programmer's Reference Guide carries the whole map; the User Guide carries everything about channels, clock and configuration; the firmware 2.0 addendum says what the newest release added.
THE REFERENCE IS SIX SHEETS AND EVERY PARAMETER TABLE ON IT IS RULED BOTH WAYS, so the grid was recovered from the rules and the words placed into it. Four tables: Macro Knobs and Sampler Parts 1-8 (p. 3), Effects (p. 4) and Global Control Data (p. 5), 87 rows between them. One sheet carries two of those tables with different column positions, so each table's columns were taken from the rules that share its own vertical extent rather than from the sheet.
AND THE MAKER'S TEXT OVERFLOWS THE MAKER'S OWN RULING, which is worth knowing before anybody reads this document again. The section cell on printed page 5 runs from x 36.2 to 73.4 and holds "LP HP Filter" (reference p. 5), whose last word starts at 67.3 and ends at 83.1 - so a reading that places a word by its middle files that word under Parameter and produces a section called LP HP and a parameter called Filter Frequency. The same happens to "Audio Input" (reference p. 5). Every column in this document is left-aligned, which is what makes the left edge the right edge to measure by here.
EIGHTY-SEVEN ROWS AND SEVENTY-FOUR CONTROLS, and the difference is two kinds of row the maker prints deliberately. Eight are the same eight twice: the Macro Knobs table opens "These are identical to the parameters in the 'Sampler Parts' section" (p. 3), and its eight numbers, 21 to 28, are eight the Sampler Parts table gives - which was asserted rather than taken on trust. They are published once, under the parameter's name, with the knob's own name in a comment. Five more carry a range and a default and no number at all, marked NOT SUPPORTED: Master Volume, and the Click's On/Off, Volume, Rate and Choice. Those are named here and are not below.
THE TABLES PUNCTUATE THEIR RANGES THREE WAYS, and one of them is ambiguous. Nearly everywhere a range is an en dash - "0 - 127" - but fourteen rows use a comma instead, and all fourteen are in the Global Control Data table: "0, 127", which reads as two values rather than a span. That is fourteen of the sixteen rows in that table which have a range at all; the two that do not take the comma are the master filter's. For an on/off switch the two readings name the same thing; for the compressor's attack and release they do not. The two ends are the same either way, so the ends are what is recorded and the maker's own notation is kept in a comment on each. Two smaller slips in the same vein: "0 -13" for the autofilter's LFO rate, where the space before the dash is missing, and "0 - 127" with a hyphen for the master filter's resonance where every other row has an en dash.
AND THREE ROWS STATE THEIR RANGE IN BYTES AND THEIR DEFAULT ON THE PARAMETER'S OWN SCALE, which this format's own validator is what caught. The Sampler's Pitch is printed "4 - 124 (-60 - 60)" (p. 3) with a default of 0, and 0 is not a byte this parameter accepts: it is nought semitones, which is byte 64. The Sampler's Slope and the Mixer's Pan are the same shape and pass unnoticed, because their byte ranges happen to contain a nought. The master filter's Frequency is the one that does not: printed "0 - 127 (-64 - 63)" (p. 5) with a default of 64, which is outside the signed scale and so can only be a byte. So no default is published for those three, and each says why; the fourth keeps its 64. A default is a value somebody will send, and a figure on the wrong scale is worse than none.
EIGHT SAMPLE TRACKS, ON EIGHT CHANNELS THE PLAYER SETS. "You can change the MIDI channel which each track uses in Setup View. Each track can be set to any of MIDI channels 1-15. Channel 16 is reserved for the Project" (guide p. 89), and "Important: No two tracks can transmit on the same MIDI channel" (p. 89). The factory default is track N on channel N, for N from 1 to 8.
AND THE REFERENCE NAMES A CHANNEL FOR ONE OF ITS FOUR TABLES AND FOR NEITHER OF THE TWO THAT MATTER MOST. The Macro Knobs rows each read "Send on appropriate channel 1-8" (p. 3); the project-select table and the trigger-note table both name channel 16; the Effects and Global Control Data tables name no channel at all. The Circuit Tracks' own reference says "Send messages on MIDI Channel 16" over the same material, and that is the sibling's document and not this one - so the controls below that come from those two tables name no part, and the 25 that come from Sampler Parts 1-8 name one.
THE EIGHT TRACKS ARE ALSO TRIGGERED BY NOTE, ALL ON ONE CHANNEL. "Table of notes used to trigger sample tracks from a single MIDI channel" (p. 5), and the table gives C1 to C2 - 36, 38, 40, 41, 43, 45, 47 and 48 - all on channel 16. Those are below as voices.
SIXTY-FOUR PROJECTS, AND A PROGRAM CHANGE REACHES THEM TWICE. "You can save your work in one of 64 internal Project memories" (p. 6), and the reference's own table gives program change 0 to 63 on channel 16 as "select project (instant)" (p. 5) and 64 to 127 as "select project (queued)" (p. 5). So the top half of the message space is the same sixty-four projects under a different behaviour rather than sixty-four more.
WHAT THE INSTRUMENT ANSWERS TO, STATED AND ENUMERATED. "MIDI Note On/Note Off, Program Change (PGM) and Continuous Controller (CC) messages are all recognised" (p. 93). Against that: aftertouch, pitch bend and system exclusive appear nowhere in any of the three documents - 112 sheets, searched for aftertouch, after touch, pitch bend, pitchbend, channel pressure, polyphonic key, system exclusive and SysEx, and not one hit. That is an enumerated silence and not a denial, so those fields are left out rather than set to none. It is also a real difference from the siblings, whose references do document system exclusive.
CLOCK BOTH WAYS, BY A SWITCH FOR EACH DIRECTION. "MIDI Rx (receive) and Tx (transmit) can be enabled independently for each of the data categories" (p. 90), the categories being Note, CC, Program Change and Clock, and "By default, both MIDI Rx and MIDI Tx are ON (buttons brightly lit) for all data categories" (p. 90). The transport is recorded the same way and from the same switch, and all three Circuits now agree about it - see the comment on the field.
THREE SOCKETS, AND THE THIRD IS SWITCHABLE. "three MIDI connectors on 5-pin DIN sockets. Allows external equipment to be triggered by Circuit Rhythm's sequences, or external controllers to trigger Circuit Rhythm's sequences and to alter samples, Grid FX and FX parameters" (p. 19). The Thru can be made a second Out: "The options are for the port to act as a regular MIDI Thru port (this is the default), or to duplicate the output of the MIDI Out port" (p. 92).
THE FIRMWARE 2.0 ADDENDUM NAMES FIVE THINGS AND MENTIONS MIDI NOT ONCE in eleven sheets: Beat Match, Fixed Length Recording, Grid FX Editing, assigning mute states to scenes, and cheat sheets for the seven Grid FX. Each was searched for in the reference by name, which is the step docs/adding-an-instrument.md prescribes, and none of them is there - not Beat Match, not Fixed Length, not Mute Recall, not Triplets, and not even Grid FX, which the user guide says thirty-seven times.
THAT TEST PROVES MUCH LESS HERE THAN IT DID ON THE LAST INSTRUMENT, AND SAYING SO IS THE POINT. The reference is six sheets of bare tables with almost no prose: it names no feature, prints no date, and never states its own title. A word it does not contain is weak evidence, where the same search against a 1,784-line implementation was decisive.
WHAT DOES CONNECT THE TWO IS A REDUNDANCY THAT HOLDS. The addendum prints a default for each Grid FX parameter it puts on a macro pot (p. 6), and fourteen of those defaults are the same fourteen the reference's Effects table prints - the beat repeat's wet/dry 0, the auto filter's depth 40, frequency 80, resonance 63, the phaser's depth 64, feedback 0 and centre 0, the vinyl's wobble, crackle, hiss and filter all 64, and the digitise's two 30s. All fourteen agree.
AND WHAT 2.0 ADDS THAT NO NUMBER REACHES. "Macro pot two (Start) always changes the effect type" (addendum p. 6), and the reference has no controller for an effect type at all; the addendum also puts Triplets on macro pot 3 for the beat repeat and the gater, and no document numbers it. So the map below is the reference's, and firmware 2.0 reaches at least two parameters it does not carry.
THE REFERENCE ALSO DISAGREES WITH ITSELF ABOUT THE PHASER. Its Effects table gives the phaser four parameters besides its on/off - Rate 57, Depth 58, Feedback 59 and Centre 64 - while its own FX Parameters table on p. 6 lists three, Rate, Depth and FB, with no Centre. The addendum has five, the fifth being the effect type. All three are below as the Effects table gives them, which is the only one of the three that carries numbers.
AND THE SEVEN EFFECTS ARE NAMED FOUR WAYS IN FOUR TABLES, of which only the Phaser is spelled the same in all four. The reference's Effects table says Gator, DigitalLofi and Vinyl; its own FX Parameters table says Reverse, Digital_Lofi; the user guide says Gater, Digitise and Vinyl Simulation; the addendum says Gater, Digitise and Vinyl Sim - and misspells its own as "Digitse" once. The labels below are the Effects table's, because that is the table the numbers are in.
TWO MORE PLACES THE REFERENCE AND THE GUIDE COUNT DIFFERENTLY, both in the Grid FX and both recorded rather than resolved. The guide says "Sixteen delay and eight reverb presets are provided" (p. 68) where the reference gives the reverb type a range of 0 to 5, which is six. And the two auto-filter counts are swapped: the guide describes "a variable state (Low/Band/High-Pass)" (p. 74) filter, three, with an LFO whose "shape may be set to Triangle, Square, ramp-up, or ramp-down" (p. 74), four - while the reference gives FilterType 0 to 3, four, and LFOshape 0 to 2, three. No value list is published below for any of them, for exactly that reason: the ranges are the reference's and the names are the guide's, and they do not line up.
AND IT IS NOT THE CIRCUIT OR THE CIRCUIT TRACKS, WHICH ARE BOTH ALREADY HERE. "Circuit" is a prefix of both the others, so a substring test for the oldest name matches all three silently and always by claiming more. Nothing here was matched that way. What the comparison found is at the head of this file: 64 shared addresses with the Circuit and 65 with the Circuit Tracks, of which nine mean the same thing on all three and every one of those nine is an effect NRPN.
THREE LEFTOVERS IN THE REFERENCE AND ONE IN THE GUIDE, each a sibling's text left in this machine's document. The reference's contents page lists "Triggering Drums" (reference p. 2) where the section is headed "Triggering Sample Tracks" (reference p. 5); a line under the project table reads "Note, for drum patch selection see Drum Control table" (reference p. 5) and there is no Drum Control table in these six sheets; and "Patch and Project Select" (reference p. 5) heads a table that selects projects only. In the guide, the Bootloader Mode diagram on printed page 94 labels its pads Synth 1, Synth 2, Drum 1 to Drum 4, MIDI 1 and MIDI 2 - which are the Circuit Tracks' eight tracks, not this machine's eight sample tracks. None of the four changes a number; all four would mislead somebody reading quickly.
THE GUIDE'S LAST SHEET PRINTS NO NUMBER OF ITS OWN and is not cited; the other 94 print their own sheet number, and so do all six of the reference's and all eleven of the addendum's.