Subsystem Search

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 SampleChoice
voice_sample_choice
8 0-127; default 0
Voice PlaybackMode
voice_playback_mode
12 0-2; default 0
Voice Reverse
voice_reverse
14 0-1; default 0
Voice Choke
voice_choke
15 0-1; default 0
Voice Slice
voice_slice
16 0-1; default 0
Voice Number of Slices
voice_number_of_slices
17 1-16; default 16

Sampler

Control CC NRPN Values
Sampler Pitch
sampler_pitch
21 4-124
Sampler StartCoarse
sampler_start_coarse
22 0-127; default 0
Sampler LengthCoarse
sampler_length_coarse
23 0-127; default 127
Sampler Slope
sampler_slope
24 0-127
Sampler Distortion
sampler_distortion
25 0-127; default 0
Sampler HPF
sampler_hpf
26 0-127; default 0
Sampler LPF
sampler_lpf
27 0-127; default 127
Sampler Resonance
sampler_resonance
28 0-127; default 0
Sampler StartFine
sampler_start_fine
86 0-127; default 0
Sampler LengthFine
sampler_length_fine
87 0-127; default 127

Mixer

Control CC NRPN Values
Mixer Level
mixer_level
29 0-127; default 100
Mixer Pan
mixer_pan
30 0-127
Mixer ReverbSend
mixer_reverb_send
31 0-127; default 0
Mixer DelaySend
mixer_delay_send
32 0-127; default 0

Dipper

Control CC NRPN Values
Dipper Source
dipper_source
128
MSB 1, LSB 0
0-127, or 0-7 by NRPN; default 0
Dipper Attack
dipper_attack
129
MSB 1, LSB 1
0-127; default 0
Dipper Hold
dipper_hold
130
MSB 1, LSB 2
0-127; default 0
Dipper Decay
dipper_decay
131
MSB 1, LSB 3
0-127; default 0
Dipper Depth
dipper_depth
132
MSB 1, LSB 4
0-127; default 0

On the base MIDI channel

Reverb

Control CC NRPN Values
Reverb Type
reverb_type
146
MSB 1, LSB 18
0-127, or 0-5 by NRPN; default 2
Reverb Decay
reverb_decay
147
MSB 1, LSB 19
0-127; default 64
Reverb Damping
reverb_damping
148
MSB 1, LSB 20
0-127; default 64

Delay

Control CC NRPN Values
Delay Time
delay_time
134
MSB 1, LSB 6
0-127; default 64
Delay TimeSync
delay_time_sync
135
MSB 1, LSB 7
0-127, or 0-35 by NRPN; default 20
Delay Feedback
delay_feedback
136
MSB 1, LSB 8
0-127; default 64
Delay Width
delay_width
137
MSB 1, LSB 9
0-127; default 127
Delay LRRatio
delay_lrratio
138
MSB 1, LSB 10
0-127, or 0-12 by NRPN; default 4
Delay SlewRate
delay_slew_rate
139
MSB 1, LSB 11
0-127; default 5

Effects

Control CC NRPN Values
Effects Bypass
effects_bypass
149
MSB 1, LSB 21
0-127, or 0-1 by NRPN; default 0

BeatRepeat

Control CC NRPN Values
BeatRepeat OnOff
beat_repeat_on_off
39 0-1; default 0
BeatRepeat Rate
beat_repeat_rate
40 0-10; default 5
BeatRepeat DryWet
beat_repeat_dry_wet
41 0-127; default 0

Reverser

Control CC NRPN Values
Reverser OnOff
reverser_on_off
42 0-1; default 0
Reverser Rate
reverser_rate
43 0-3; default 2

Gator

Control CC NRPN Values
Gator OnOff
gator_on_off
44 0-1; default 0
Gator Rate
gator_rate
45 0-11; default 5

Autofilter

Control CC NRPN Values
Autofilter OnOff
autofilter_on_off
46 0-1; default 0
Autofilter FilterType
autofilter_filter_type
47 0-3; default 0
Autofilter Frequency
autofilter_frequency
48 0-127; default 80
Autofilter LFOamount
autofilter_lfo_amount
49 0-127; default 40
Autofilter LFOshape
autofilter_lfo_shape
50 0-2; default 0
Autofilter LFOrate
autofilter_lfo_rate
51 0-13; default 8
Autofilter Resonance
autofilter_resonance
52 0-127; default 63

DigitalLofi

Control CC NRPN Values
DigitalLofi OnOff
digital_lofi_on_off
53 0-1; default 0
DigitalLofi Bits
digital_lofi_bits
54 0-127; default 30
DigitalLofi SampleRate
digital_lofi_sample_rate
55 0-127; default 30

Phaser

Control CC NRPN Values
Phaser OnOff
phaser_on_off
56 0-1; default 0
Phaser Rate
phaser_rate
57 0-13; default 7
Phaser Depth
phaser_depth
58 0-127; default 64
Phaser Feedback
phaser_feedback
59 0-127; default 0
Phaser Centre
phaser_centre
64 0-127; default 0

Vinyl

Control CC NRPN Values
Vinyl OnOff
vinyl_on_off
60 0-1; default 0
Vinyl Filter
vinyl_filter
61 0-127; default 64
Vinyl Wobble
vinyl_wobble
62 0-127; default 64
Vinyl Crackle
vinyl_crackle
63 0-127; default 64
Vinyl Hiss
vinyl_hiss
65 0-127; default 64

LP HP filter

Control CC NRPN Values
LP HP Filter Frequency
lp_hp_filter_frequency
79 0-127; default 64
LP HP Filter Resonance
lp_hp_filter_resonance
71 0-127; default 30

Compressor

Control CC NRPN Values
Compressor On/Off
compressor_on_off
150
MSB 1, LSB 22
0-127, or 0-1 by NRPN; default 1
Compressor Attack
compressor_attack
151
MSB 1, LSB 23
0-127; default 0
Compressor Release
compressor_release
152
MSB 1, LSB 24
0-127; default 0
Compressor EnvelopeFollow
compressor_envelope_follow
153
MSB 1, LSB 25
0-127; default 0
Compressor SoftClip
compressor_soft_clip
154
MSB 1, LSB 26
0-127, or 0-1 by NRPN; default 1

Audio input

Control CC NRPN Values
Audio Input GainPadding
audio_input_gain_padding
155
MSB 1, LSB 27
0-127, or 0-1 by NRPN; default 0
Audio Input Routing
audio_input_routing
156
MSB 1, LSB 28
0-127, or 0-1 by NRPN; default 0
Audio Input Threshold
audio_input_threshold
157
MSB 1, LSB 29
0-127, or 0-1 by NRPN; default 1
Audio Input Monitor
audio_input_monitor
158
MSB 1, LSB 30
0-127, or 0-1 by NRPN; default 1
Audio Input Level
audio_input_level
90 0-127; default 100

Where these facts come from

Source documents

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.