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.
Elektron Octatrack MIDI implementation
The MIDI implementation of the Elektron Octatrack: what it answers to, and the 99 controls it offers, on firmware 1.40C.
At a glance
- Firmware
- This page describes firmware 1.40C.
- MIDI channel
- Any one of 1 to 16.
- Parts
- Audio Track, 8 of them: each on a MIDI channel of its own, taking notes and controls.
MIDI Track, 8 of them: each on a MIDI channel of its own, taking controls. - Voices
- Not recorded.
- Note range
- Not recorded.
- Velocity
- Sent. Whether it is received is not recorded.
- Aftertouch
- Sent. Whether it answers to any is not recorded.
- Pitch bend
- Not recorded.
- Program change
- Received and sent, with 256 presets.
- MIDI clock
- Sent and received.
- Start and stop
- Sent and received.
- Control change
- 99 controls, in the tables below.
- NRPN
- Not recorded.
- System exclusive
- Supported.
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("elektron/octatrack") has loaded them.
Audio track
Track
| Control | CC | Values |
|---|---|---|
Track levelaudio_track_level_7 |
7 | 0-127 Received, never sent |
Track balancetrack_balance |
8 | 0-127 Received, never sent |
Track levelaudio_track_level_46 |
46 | 0-127 |
Cue levelcue_level |
47 | 0-127 |
Crossfadercrossfader |
48 | 0-127 |
Track Mute [0]=Unmuted, [1-127]=Mutedtrack_mute |
49 | 0-127 |
Track Solo [0]=No solo, [1-127]=Soloedtrack_solo |
50 | 0-127 |
Track Cue [0]=Not Cued, [1-127]=Cuedtrack_cue |
51 | 0-127 |
Track Arm [0]=Trk disarm, [1-127]=Armtrack_arm |
52 | 0-127 |
SRC
| Control | CC | Values |
|---|---|---|
Playback param #1audio_playback_param_1 |
16 | 0-127 |
Playback param #2audio_playback_param_2 |
17 | 0-127 |
Playback param #3audio_playback_param_3 |
18 | 0-127 |
Playback param #4audio_playback_param_4 |
19 | 0-127 |
Playback param #5audio_playback_param_5 |
20 | 0-127 |
Playback param #6audio_playback_param_6 |
21 | 0-127 |
Amp
| Control | CC | Values |
|---|---|---|
Amp param #1 (Attack)audio_amp_param_1 |
22 | 0-127 |
Amp param #2 (Hold)audio_amp_param_2 |
23 | 0-127 |
Amp param #3 (Release)audio_amp_param_3 |
24 | 0-127 |
Amp param #4 (Volume)audio_amp_param_4 |
25 | 0-127 |
Amp param #5 (Balance)audio_amp_param_5 |
26 | 0-127 |
Amp param #6 (N/A)audio_amp_param_6 |
27 | 0-127 |
LFO
| Control | CC | Values |
|---|---|---|
LFO param #1 (Speed 1)lfo_param_1 |
28 | 0-127 |
LFO param #2 (Speed 2)lfo_param_2 |
29 | 0-127 |
LFO param #3 (Speed 3)lfo_param_3 |
30 | 0-127 |
LFO param #4 (Depth 1)lfo_param_4 |
31 | 0-127 |
LFO param #5 (Depth 2)lfo_param_5 |
32 | 0-127 |
LFO param #6 (Depth 3)lfo_param_6 |
33 | 0-127 |
FX1
| Control | CC | Values |
|---|---|---|
FX1 param #1fx1_param_1 |
34 | 0-127 |
FX1 param #2fx1_param_2 |
35 | 0-127 |
FX1 param #3fx1_param_3 |
36 | 0-127 |
FX1 param #4fx1_param_4 |
37 | 0-127 |
FX1 param #5fx1_param_5 |
38 | 0-127 |
FX1 param #6fx1_param_6 |
39 | 0-127 |
FX2
| Control | CC | Values |
|---|---|---|
FX2 param #1fx2_param_1 |
40 | 0-127 |
FX2 param #2fx2_param_2 |
41 | 0-127 |
FX2 param #3fx2_param_3 |
42 | 0-127 |
FX2 param #4fx2_param_4 |
43 | 0-127 |
FX2 param #5fx2_param_5 |
44 | 0-127 |
FX2 param #6fx2_param_6 |
45 | 0-127 |
Recorder
| Control | CC | Values |
|---|---|---|
Recrdr Arm [0]=Rec disarm, [1-127]=Armrecrdr_arm |
53 | 0-127 |
All Arm [0]=All disarm, [1-127]=Armaudio_all_arm |
54 | 0-127 |
Pickup SRC AB levelpickup_src_ab_level |
57 | 0-127 Received, never sent |
Pickup SRC CD levelpickup_src_cd_level |
58 | 0-127 Received, never sent |
Scene
| Control | CC | Values |
|---|---|---|
Scene A Selectaudio_scene_a_select |
55 | 0-127 |
Scene B Selectaudio_scene_b_select |
56 | 0-127 |
MIDI tracks
| Control | CC | Values |
|---|---|---|
MIDI Trk 1 Mute [0]=Unmute, [1-127]=Muteaudio_midi_trk_1_mute |
112 | 0-127 |
MIDI Trk 2 Mute [0]=Unmute, [1-127]=Muteaudio_midi_trk_2_mute |
113 | 0-127 |
MIDI Trk 3 Mute [0]=Unmute, [1-127]=Muteaudio_midi_trk_3_mute |
114 | 0-127 |
MIDI Trk 4 Mute [0]=Unmute, [1-127]=Muteaudio_midi_trk_4_mute |
115 | 0-127 |
MIDI Trk 5 Mute [0]=Unmute, [1-127]=Muteaudio_midi_trk_5_mute |
116 | 0-127 |
MIDI Trk 6 Mute [0]=Unmute, [1-127]=Muteaudio_midi_trk_6_mute |
117 | 0-127 |
MIDI Trk 7 Mute [0]=Unmute, [1-127]=Muteaudio_midi_trk_7_mute |
118 | 0-127 |
MIDI Trk 8 Mute [0]=Unmute, [1-127]=Muteaudio_midi_trk_8_mute |
119 | 0-127 |
Without a group
| Control | CC | Values |
|---|---|---|
Note on [0]=C-1, 127=G9)note_on |
59 | 0-127 Received, never sent |
Note off [0] =C-1, 127=G9)note_off |
60 | 0-127 Received, never sent |
Send request, 0 = all audio CCsend_request_0_all_audio_cc |
61 | 0-127 Received, never sent |
MIDI track
Recorder
| Control | CC | Values |
|---|---|---|
All Arm [0]=All disarm, [1-127]=Armmidi_all_arm |
54 | 0-127 Received, never sent |
Scene
| Control | CC | Values |
|---|---|---|
Scene A Selectmidi_scene_a_select |
55 | 0-127 Received, never sent |
Scene B Selectmidi_scene_b_select |
56 | 0-127 Received, never sent |
Note
| Control | CC | Values |
|---|---|---|
Playback param #1 (Note)midi_playback_param_1 |
16 | 0-127 Received, never sent |
Playback param #2 (Velocity)midi_playback_param_2 |
17 | 0-127 Received, never sent |
Playback param #3 (Length)midi_playback_param_3 |
18 | 0-127 Received, never sent |
Playback param #4 (Note 2)midi_playback_param_4 |
19 | 0-127 Received, never sent |
Playback param #5 (Note 3)midi_playback_param_5 |
20 | 0-127 Received, never sent |
Playback param #6 (Note 4)midi_playback_param_6 |
21 | 0-127 Received, never sent |
Arpeggiator
| Control | CC | Values |
|---|---|---|
Amp param #1 (Transpose)midi_amp_param_1 |
22 | 0-127 Received, never sent |
Amp param #2 (Legato)midi_amp_param_2 |
23 | 0-127 Received, never sent |
Amp param #3 (Mode)midi_amp_param_3 |
24 | 0-127 Received, never sent |
Amp param #4 (Speed)midi_amp_param_4 |
25 | 0-127 Received, never sent |
Amp param #5 (Octave Range)midi_amp_param_5 |
26 | 0-127 Received, never sent |
Amp param #6 (Arp Note Length)midi_amp_param_6 |
27 | 0-127 Received, never sent |
MIDI LFO
| Control | CC | Values |
|---|---|---|
MIDI LFO param #1 (Speed 1)midi_lfo_param_1 |
28 | 0-127 Received, never sent |
MIDI LFO param #2 (Speed 2)midi_lfo_param_2 |
29 | 0-127 Received, never sent |
MIDI LFO param #3 (Speed 3)midi_lfo_param_3 |
30 | 0-127 Received, never sent |
MIDI LFO param #4 (Depth 1)midi_lfo_param_4 |
31 | 0-127 Received, never sent |
MIDI LFO param #5 (Depth 2)midi_lfo_param_5 |
32 | 0-127 Received, never sent |
MIDI LFO param #6 (Depth 3)midi_lfo_param_6 |
33 | 0-127 Received, never sent |
CTRL 1
| Control | CC | Values |
|---|---|---|
Pitch bendpitch_bend |
34 | 0-127 Received, never sent |
Aftertouchaftertouch |
35 | 0-127 Received, never sent |
CC #1 paramcc_1_param |
36 | 0-127 Received, never sent; The player chooses what it controls |
CC #2 paramcc_2_param |
37 | 0-127 Received, never sent; The player chooses what it controls |
CC #3 paramcc_3_param |
38 | 0-127 Received, never sent; The player chooses what it controls |
CC #4 paramcc_4_param |
39 | 0-127 Received, never sent; The player chooses what it controls |
CTRL 2
| Control | CC | Values |
|---|---|---|
CC #5 paramcc_5_param |
40 | 0-127 Received, never sent; The player chooses what it controls |
CC #6 paramcc_6_param |
41 | 0-127 Received, never sent; The player chooses what it controls |
CC #7 paramcc_7_param |
42 | 0-127 Received, never sent; The player chooses what it controls |
CC #8 paramcc_8_param |
43 | 0-127 Received, never sent; The player chooses what it controls |
CC #9 paramcc_9_param |
44 | 0-127 Received, never sent; The player chooses what it controls |
CC #10 paramcc_10_param |
45 | 0-127 Received, never sent; The player chooses what it controls |
MIDI tracks
| Control | CC | Values |
|---|---|---|
MIDI Track Mute [0]=Unmuted, [1-127]=Mutedmidi_track_mute |
49 | 0-127 Received, never sent |
MIDI Track Solo [0]=No solo, [1-127]=Soloedmidi_track_solo |
50 | 0-127 Received, never sent |
MIDI Trk 1 Mute [0]=Unmute, [1-127]=Mutemidi_midi_trk_1_mute |
112 | 0-127 Received, never sent |
MIDI Trk 2 Mute [0]=Unmute, [1-127]=Mutemidi_midi_trk_2_mute |
113 | 0-127 Received, never sent |
MIDI Trk 3 Mute [0]=Unmute, [1-127]=Mutemidi_midi_trk_3_mute |
114 | 0-127 Received, never sent |
MIDI Trk 4 Mute [0]=Unmute, [1-127]=Mutemidi_midi_trk_4_mute |
115 | 0-127 Received, never sent |
MIDI Trk 5 Mute [0]=Unmute, [1-127]=Mutemidi_midi_trk_5_mute |
116 | 0-127 Received, never sent |
MIDI Trk 6 Mute [0]=Unmute, [1-127]=Mutemidi_midi_trk_6_mute |
117 | 0-127 Received, never sent |
MIDI Trk 7 Mute [0]=Unmute, [1-127]=Mutemidi_midi_trk_7_mute |
118 | 0-127 Received, never sent |
MIDI Trk 8 Mute [0]=Unmute, [1-127]=Mutemidi_midi_trk_8_mute |
119 | 0-127 Received, never sent |
Where these facts come from
Source documents
- Octatrack MKII User Manual, 1.40C, dated 27 August 2026, its user manual, read on 4 October 2026 (the file read).
- Octatrack User Manual, 1.40A, dated 4 February 2022, its user manual, read on 4 October 2026 (the file read).
- Octatrack OS 1.40C release notes, 1.40C, its release notes, read on 4 October 2026 (the file read).
- Octatrack MKII - Elektron, its download page, read on 4 October 2026.
- Octatrack MKI - Elektron, its download page, read on 4 October 2026.
How they were read
Octatrack MKII User Manual for OS 1.40C, 148 pages: APPENDIX C: MIDI CONTROL REFERENCE at pp. 137-142, whose two controller tables are every control below; the MIDI settings at pp. 40-41, where the clock, transport, program change and channel architecture are; the MIDI sequencer at p. 90; the CTRL pages at pp. 94-95; the OS upgrade at p. 112; the banks and patterns at p. 17; and the hardware at p. 116. And the MKI's manual for OS 1.40A, for the comparison that establishes one file covers both. And both support pages, for what Elektron publishes.
THE PRINTED FOLIO EQUALS THE SHEET THROUGHOUT, so no page_offset. That was checked on every one of the 148 sheets rather than on a sample: sheets 4 to 147 each print their own number, and only the cover, two sheets of front matter and the back cover carry none.
THE TWO MANUALS' APPENDICES AGREE ON ALL 115 ROWS, WHICH IS WHY THIS FILE COVERS TWO PRODUCTS. They were read by the same extraction code - a comparison of two readings made by two different scripts would be measuring the scripts - and compared on four questions asked separately: the set of controller numbers, the parameter name on each, the two direction marks, and the hexadecimal cell. Nothing differs. That is 115 rows of appendix, of which 99 become controls below - the comparison is of the documents and not of this file.
AND THE OLDER MANUAL MISNUMBERS ITS OWN SECTION, which is the one real difference between the two documents and is worth knowing before searching either. The MKII calls the second controller table C.8; the MKI calls it C.3 - and C.3 is already that manual's SLOTS NOTE MAPPING, so the older edition has two sections numbered C.3 and the newer one corrected it. A reader searching the MKI's manual for C.8 finds nothing.
THE MKII'S SUPPORT PAGE PRINTS A DATE THAT CONTRADICTS THE FILE IT SERVES. The page says its English manual is of "Apr 14, 2021" (mkii_page); the file is named ..._OS1.40C_260827.pdf, sits under /uploads/2026/08/, and its own PDF metadata says it was made on 27 August 2026. Three independent signals against one, so the page's date is stale rather than the file being mislabelled - and a date taken off a maker's page without checking the file would have put this manual five years before the firmware it describes.
THE APPENDIX IS A RULED GRID AND ITS ROWS COME OFF THE RULES, with one trap worth passing on: the sheet the controller table opens on also carries two note-mapping tables with a different number of columns, so taking every rule on that sheet gave six columns for a four-column table. The grid is therefore built from the rules inside a height window rather than from the whole sheet. A sheet may hold more than one table.
THE FIRST COLUMN HOLDS TWO NUMBERS IN ONE CELL - a hexadecimal with a dollar sign and a decimal, inside the same ruled box, which is why the heading is the two words HEX DEC. So the hexadecimal is asserted against the decimal, all 115 rows of it, which costs one line and which caught a real fault in another maker's table at the rank before this one. Here the two agree everywhere.
AND THE MARKS ARE PLACED BY THE GRID AND NEVER BY READING ORDER, because an X in the text layer says nothing at all - only its column does. The second reader reports that a naive search for X also picks up the one inside FX1 param and FX2 param and would have invented transmitted marks on twelve rows.
EVERY NUMBER WAS READ TWICE AND THE TWO READINGS AGREE ON ALL 115 ROWS - on the parameter name, the hexadecimal cell, both direction marks, the map, and the printed page. The second reading used a different library's layout mode on a different interpreter and then checked itself against all four sheets rendered at 200 dpi and read by eye.
THE SECOND READER REPORTS ONE PLACE WHERE THE RENDERING WAS NOT A CONFIRMATION BUT THE ANSWER. The last sheet of the MIDI map carries no column heading and not one row marked in both columns, so there is a single mark position on it and nothing on the sheet itself to say which of the two columns that is. They settled it two ways - by the offset measured against the previous sheet, and by reading the rendered page, where the left cell is visibly empty on all 28 rows. A method that cannot answer from one page needs the page before it or the picture, and saying which was used is part of the reading.
APPENDIX C'S OWN NAMES FOR THE MIDI MAP'S PAGES ARE THE AUDIO MAP'S NAMES, which is the sharpest trap here and the reason the groups below are keyed on the map as well as the name. In C.8, Amp param #1 to #6 are glossed Transpose, Legato, Mode, Speed, Octave Range and Arp Note Length - which are precisely the six parameters sections 15.4.3 and 15.4.4 put on the ARPEGGIATOR pages, not on an amplifier. Likewise C.8's Playback param rows are glossed Note, Velocity, Length and three more notes, which is the NOTE page. A reader grouping on the prefix alone would file the arpeggiator under the amplifier. The bracketed gloss is the evidence.
TEN OF THE MIDI MAP'S CONTROLLERS SET VALUES WHOSE DESTINATION THE OWNER CHOOSES. Controllers 36 to 45 are CC #1 param to CC #10 param, and what they reach is a setting: "CC1-CC4 specifies the CC commands that will be controlled on the CTRL 1 MAIN page" (manual p. 94) and "CC5-CC10 specifies the CC commands that will be controlled on the CTRL 2 MAIN page" (manual p. 95), with a MIDI CC learn mode for choosing them. So the ten numbers are fixed and published and the ten destinations are not, which is a milder form of the owner-editable map the PERKONS HD-01 raised. Nothing below claims a destination, and each of the ten says assignment: slot.
ONE PARAMETER NAME IS AT TWO NUMBERS IN THE AUDIO MAP, with different directions: Track level is controller 7, marked received only, and controller 46, marked both ways. Controller 7 is the MIDI specification's own Channel Volume, so this is the maker giving one parameter a standard address that only listens and an address of its own that also reports. Both are below, told apart by number, because nothing else distinguishes them.
SIXTEEN OF THE 115 ROWS CANNOT BE CONTROLS, AND THE MAKER IS THE REASON. This instrument puts its MIDI track solos on controllers 120 to 127 - eight rows in each map, MIDI Trk 1 Solo to MIDI Trk 8 Solo - and that block is the MIDI specification's channel mode messages. This format refuses them on the rule that a channel mode message means the same on every instrument that has it, which is exactly what this instrument makes untrue: a sequencer sending All Sound Off to it solos a MIDI track.
So they are published, named and numbered here and absent from the controls below, which leaves 99 of the appendix's 115 rows. That is a real loss and it is recorded rather than worked around - the Hydrasynth Explorer met the same thing on four numbers and is handled the same way. Unlike that instrument, this one also puts eight parameters on 112 to 119, which the specification leaves undefined, so the maker has treated the whole of 112 to 127 as free space and only half of it is.
THREE SOCKETS, FROM THE SPECIFICATIONS: "MIDI In/Out/Thru" (manual p. 116), beside a hi-speed USB 2.0 port. That is this maker's habit and its own support pages say so of the whole range - every Elektron except the Model series has all three - which is worth stating because the next rank's instrument has only two.
WHAT IS ABSENT, CHECKED RATHER THAN ASSUMED. The words NRPN and RPN appear nowhere in these 148 pages, and neither does system exclusive, and neither does voices. The first of those is suggestive and is not recorded: see midi below.
EVERY QUOTATION IN THIS FILE'S PROSE CARRIES A LOCATOR, AUDITED BY PAIRING THE QUOTE MARKS: 28 quotations, 28 locators - 27 citing a page and one naming the unpaginated support page - with the seventeen remaining pairs being field values rather than anybody's words.
AND THE AUDIT HAS TO STOP AT THE CONTROLS BLOCK ON THIS INSTRUMENT, WHICH IS NEW. 99 of this file's controls carry a label in quote marks - "Track Mute [0]=Unmuted, [1-127]=Muted" - not because they are quotations but because a YAML flow mapping cannot hold a comma or a bracket bare. A pairing audit run over the whole file reports 113 unlocated quotations and 99 of them are not quotations at all. So the audit is of the prose, and a sweep written for the corpus would need to know that.
THE GAP FROM 61 TO 112 IS REAL AND IS THE MAKER'S. The audio map runs 7, 8, 16 to 61, then 112 to 127, with nothing between - and the second reader checked the rendered pages for exactly that, finding the table closes with a bottom border after 61 and reopens at 112. Nothing was dropped. The manual defines nothing in that span and says why nowhere.
FOUR SMALL FAULTS, KEPT AS PRINTED. Controllers 59 and 60 read Note on [0]=C-1, 127=G9) and Note off [0] =C-1, 127=G9) - an unmatched closing bracket in each, and a stray space that falls after on in one and before the = in the other, so two sibling rows are mis-set in two different ways. Controller 51 doubles a space where its neighbours do not. And controller 27 is Amp param #6 (N/A), a parameter given a slot, a number and a note that it does not apply.
AND THE TWO MAPS MARK CONTROLLERS 112 TO 127 DIFFERENTLY FOR WHAT READS AS THE SAME ROW. The sixteen MIDI track mutes and solos are character-for-character identical in both tables, and the audio map marks them transmitted and received while the MIDI map marks them received only. That is not the document contradicting itself, which is what it looks like: C.8's own introduction says the auto channel "responds to the following CC messages" (manual p. 141), so the whole of C.8 is a receive-only table by construction and all 51 of its rows are marked that way. The two tables describe two routes to one parameter, and only one of them reports back.