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.

Oberheim OB-X8 MIDI implementation

The MIDI implementation of the Oberheim OB-X8: what it answers to, and the 147 controls it offers, on firmware 2.0.

At a glance

Firmware
This page describes firmware 2.0.
MIDI channel
1 to 16.
Modes
Normal.
Split.
Double.
MPE
Received: its voices are spread across its MIDI channels, a note to each.
Parts
Lower: on the base MIDI channel, taking notes and controls, with 4 voices, in Split only.
Upper: on the MIDI channel one above the base, taking notes and controls, with 4 voices, in Split only.
Voices
8.
Note range
Not recorded.
Velocity
Sent and received. Release velocity is ignored.
Aftertouch
Channel pressure and polyphonic, each answered. It sends aftertouch too.
Pitch bend
12 semitones, and the range can be changed.
Program change
Received and sent.
MIDI clock
Received.
Start and stop
Received.
Control change
105 controls, in the tables below.
NRPN
Supported, and preferred to CC. 133 of the controls below have one.
System exclusive
Supported.

Controls

In the order the definition gives them, by group. Under each control is the name a program calls it by, once pymidiinstrumentdefs.load("oberheim/ob_x8") has loaded them.

Oscillators

Control CC NRPN Values
OSC 1 FREQ
osc_1_freq
15 1
MSB 0, LSB 1
0-63
0SC 2 FREQ
osc_2_freq
16 2
MSB 0, LSB 2
0-63
OSC 2 DETUNE
osc_2_detune
17 3
MSB 0, LSB 3
0-63
OSC 1 WAVEFORM
osc_1_waveform
19 5
MSB 0, LSB 5
0-3
OSC 2 WAVEFORM
osc_2_waveform
20 6
MSB 0, LSB 6
0-3
OSC 1 PW
osc_1_pw
21 7
MSB 0, LSB 7
0-127
OSC 2 PW
osc_2_pw
22 8
MSB 0, LSB 8
0-127
OSC 1 XMOD
osc_1_xmod
12 9
MSB 0, LSB 9
0-1
OSC SQUARE MODE
osc_square_mode
23 10
MSB 0, LSB 10
0-1
OSC 1 FILTER ENV MOD
osc_1_filter_env_mod
12 12
MSB 0, LSB 12
0-1
OSC 1 SYNC
osc_1_sync
24 13
MSB 0, LSB 13
0-1
OSC 1 LEVEL
osc_1_level
25 19
MSB 0, LSB 19
0-1
OSC 2 LEVEL
osc_2_level
26 20
MSB 0, LSB 20
0-1
NOISE LEVEL
noise_level
29 21
MSB 0, LSB 21
0-1

Page 2 oscillators

Control CC NRPN Values
PAGE 2 VOICE DETUNE RANGE
page_2_voice_detune_range
18 4
MSB 0, LSB 4
0-127
PAGE 2 OSC XMOD AMT
page_2_osc_xmod_amt
13 11
MSB 0, LSB 11
0-127
PAGE 2 OSC 1 ON LEVEL
page_2_osc_1_on_level
27 97
MSB 0, LSB 97
0-127
PAGE 2 OSC 2 ON LEVEL
page_2_osc_2_on_level
28 98
MSB 0, LSB 98
0-127
PAGE 2 NOISE ON LEVEL
page_2_noise_on_level
30 99
MSB 0, LSB 99
0-127

Control

Control CC NRPN Values
PORTAMENTO RATE
portamento_rate
5 14
MSB 0, LSB 14
0-127
VINTAGE
vintage
3 26
MSB 0, LSB 26
0-127

Page 2 portamento

Control CC NRPN Values
PAGE 2 PORTAMENTO MODE
page_2_portamento_mode
91 15
MSB 0, LSB 15
0-66
PAGE 2 PORTAMENTO MATCH
page_2_portamento_match
92 16
MSB 0, LSB 16
0-1
PAGE 2 PORTAMENTO QUANTIZE
page_2_portamento_quantize
93 17
MSB 0, LSB 17
0-1
PAGE 2 PORTAMENTO LEGATO
page_2_portamento_legato
94 18
MSB 0, LSB 18
0-1

Filter

Control CC NRPN Values
FILTER FREQUENCY
filter_frequency
33 22
MSB 0, LSB 22
0-175
FILTER RESONANCE
filter_resonance
34 23
MSB 0, LSB 23
0-127
FILTER TYPE
filter_type
35 24
MSB 0, LSB 24
0-5
FILTER KBD TRACK
filter_kbd_track
25
MSB 0, LSB 25
0-1
FILTER MODULATION
filter_modulation
31 59
MSB 0, LSB 59
0-127
FILTER PRESSURE
filter_pressure
44 70
MSB 0, LSB 70
0-1
FILTER KEYBOARD
filter_keyboard
36 0-1
BRIGHTNESS (FILTER CUTOFF - RELATIVE)
brightness_filter_cutoff_relative
74 0-175

Page 2 LFO 1

Control CC NRPN Values
PAGE 2 LFO TYPE
page_2_lfo_type
62 27
MSB 0, LSB 27
0-1
PAGE 2 LFO SAMPLE/HOLD IN
page_2_lfo_sample_hold_in
63 28
MSB 0, LSB 28
0-1
PAGE 2 LFO 1 TRIGGER
page_2_lfo_1_trigger
102 39
MSB 0, LSB 39
0-1
PAGE 2 LFO 1 TRIGGER PHASE
page_2_lfo_1_trigger_phase
103 40
MSB 0, LSB 40
0-127
PAGE 2 LFO 1 KBD TRACK
page_2_lfo_1_kbd_track
104 41
MSB 0, LSB 41
0-1
PAGE 2 LFO 1 MOD 1 RAMP DELAY
page_2_lfo_1_mod_1_ramp_delay
105 42
MSB 0, LSB 42
0-127
PAGE 2 LFO 1 MOD 1 RAMP UP
page_2_lfo_1_mod_1_ramp_up
106 43
MSB 0, LSB 43
0-127
PAGE 2 LFO 1 RAMP INVERT
page_2_lfo_1_ramp_invert
107 44
MSB 0, LSB 44
0-1
PAGE 2 LFO 1 MOD 1 QUANTIZE
page_2_lfo_1_mod_1_quantize
108 45
MSB 0, LSB 45
0-1
PAGE 2 LFO 1 OSC 1 MOD 1 INVERT
page_2_lfo_1_osc_1_mod_1_invert
109 46
MSB 0, LSB 46
0-1
PAGE 2 LFO 1 MOD 2 RAMP DELAY
page_2_lfo_1_mod_2_ramp_delay
110 47
MSB 0, LSB 47
0-127
PAGE 2 LFO 1 MOD 2 RAMP UP
page_2_lfo_1_mod_2_ramp_up
111 48
MSB 0, LSB 48
0-127, or 0-27 by NRPN
PAGE 2 LFO 1 MOD 2 RAMP INVERT
page_2_lfo_1_mod_2_ramp_invert
112 49
MSB 0, LSB 49
0-1
PAGE 2 LFO 1 MOD 2 QUANTIZE
page_2_lfo_1_mod_2_quantize
113 50
MSB 0, LSB 50
0-1
PAGE 2 LFO 1 OSC 1 MOD 2 INVERT
page_2_lfo_1_osc_1_mod_2_invert
114 51
MSB 0, LSB 51
0-1
PAGE 2 MOD 2 RAMP TO LFO SPEED
page_2_mod_2_ramp_to_lfo_speed
115 52
MSB 0, LSB 52
0-1
PAGE 2 LFO SHIFT VOICES 5-8
page_2_lfo_shift_voices_5_8
116 53
MSB 0, LSB 53
0-2

LFO 1

Control CC NRPN Values
LFO 1 RATE
lfo_1_rate
51 29
MSB 0, LSB 29
0-127
LFO 1 SHAPE
lfo_1_shape
52 30
MSB 0, LSB 30
0-4
LFO 1 DEPTH 1
lfo_1_depth_1
53 31
MSB 0, LSB 31
0-127
LFO 1 DEPTH 2
lfo_1_depth_2
54 32
MSB 0, LSB 32
0-127
LFO 1 DEST 1 OSC 1
lfo_1_dest_1_osc_1
55 33
MSB 0, LSB 33
0-1
LFO 1 DEST 1 OSC 2
lfo_1_dest_1_osc_2
56 34
MSB 0, LSB 34
0-1
LFO 1 DEST 1 FILTER
lfo_1_dest_1_filter
57 35
MSB 0, LSB 35
0-1
LFO 1 DEST 2 PWM 1
lfo_1_dest_2_pwm_1
58 36
MSB 0, LSB 36
0-1
LFO 1 DEST 2 PWM 2
lfo_1_dest_2_pwm_2
59 37
MSB 0, LSB 37
0-1
LFO 1 DEST 2 VOLUME
lfo_1_dest_2_volume
60 38
MSB 0, LSB 38
0-1

Mod box LFO 2

Control CC NRPN Values
MOD BOX LFO 2 RATE
mod_box_lfo_2_rate
75 54
MSB 0, LSB 54
0-127
MOD BOX LFO 2 SHAPE
mod_box_lfo_2_shape
76 55
MSB 0, LSB 55
0-5
MOD BOX LFO 2 DEPTH
mod_box_lfo_2_depth
79 58
MSB 0, LSB 58
0-127
MOD BOX LFO2 BEND AMOUNT
mod_box_lfo2_bend_amount
1 72
MSB 0, LSB 72
0-255, or 0-12 by NRPN
MOD BOX LFO 2 LOWER
mod_box_lfo_2_lower
82 78
MSB 0, LSB 78
0-1
MOD BOX LFO 2 UPPER
mod_box_lfo_2_upper
83 79
MSB 0, LSB 79
0-1
MOD BOX LFO 2 BEND OSC 2 ONLY
mod_box_lfo_2_bend_osc_2_only
80 92
MSB 0, LSB 92
0-1
MOD BOX LFO 2 DEST OSC 1
mod_box_lfo_2_dest_osc_1
77 0-1
MOD BOX LFO 2 DEST OSC 2
mod_box_lfo_2_dest_osc_2
78 0-1

Filter envelope

Control CC NRPN Values
FILTER ENV ATTACK
filter_env_attack
39 60
MSB 0, LSB 60
0-255
FILTER ENV DECAY
filter_env_decay
40 62
MSB 0, LSB 62
0-255
FILTER ENV SUSTAIN
filter_env_sustain
41 64
MSB 0, LSB 64
0-127
FILTER ENV RELEASE
filter_env_release
42 66
MSB 0, LSB 66
0-255
FILTER ENV VELOCITY ON/OFF
filter_env_velocity_on_off
43 68
MSB 0, LSB 68
0-1

Volume envelope

Control CC NRPN Values
VOLUME ENV ATTACK
volume_env_attack
45 61
MSB 0, LSB 61
0-255
VOLUME ENV DECAY
volume_env_decay
46 63
MSB 0, LSB 63
0-255
VOLUME ENV SUSTAIN
volume_env_sustain
47 65
MSB 0, LSB 65
0-127
VOLUME ENV RELEASE
volume_env_release
48 67
MSB 0, LSB 67
0-255
VOLUME ENV VELOCITY ON/OFF
volume_env_velocity_on_off
49 69
MSB 0, LSB 69
0-1

Aftertouch

Control CC NRPN Values
LFO PRESSURE
lfo_pressure
61 71
MSB 0, LSB 71
0-1

Amplifier

Control CC NRPN Values
PROGRAM VOLUME
program_volume
8 73
MSB 0, LSB 73
0-127
MASTER VOLUME
master_volume
7 0-127

Unison

Control CC NRPN Values
UNISON
unison
70 74
MSB 0, LSB 74
0-1
UNISON VOICE COUNT
unison_voice_count
71 75
MSB 0, LSB 75
0-7
UNISON KEY MODE
unison_key_mode
72 76
MSB 0, LSB 76
0-5

Mod box

Control CC NRPN Values
MOD BOX MODE
mod_box_mode
81 77
MSB 0, LSB 77
0-1
MOD BOX TRANSPOSE UP/ DOWN
mod_box_transpose_up_down
122
MSB 0, LSB 122
0-2

Mod box arpeggiator

Control CC NRPN Values
MOD BOX ARP ON
mod_box_arp_on
84 80
MSB 0, LSB 80
0-1
MOD BOX ARP SPEED
mod_box_arp_speed
85 81
MSB 0, LSB 81
0-127, or 0-27 by NRPN
MOD BOX ARP HOLD KBD
mod_box_arp_hold_kbd
86 82
MSB 0, LSB 82
0-2
MOD BOX ARP DOWN/UP
mod_box_arp_down_up
87 83
MSB 0, LSB 83
0-3
MOD BOX ARP LOWER
mod_box_arp_lower
88 84
MSB 0, LSB 84
0-1
MOD BOX ARP UPPER
mod_box_arp_upper
89 85
MSB 0, LSB 85
0-1
ARP NUMBER OF TRANS POSE INTERVALS
arp_number_of_trans_pose_intervals
86
MSB 0, LSB 86
0-5
ARP TRANS INTVAL NOTE 0
arp_trans_intval_note_0
87
MSB 0, LSB 87
0-120
ARP TRANS INTVAL NOTE 1
arp_trans_intval_note_1
88
MSB 0, LSB 88
0-120
ARP TRANS INTVAL NOTE 2
arp_trans_intval_note_2
89
MSB 0, LSB 89
0-120
ARP TRANS INTVAL NOTE 3
arp_trans_intval_note_3
90
MSB 0, LSB 90
0-120
ARP TRANS INTVAL NOTE 4
arp_trans_intval_note_4
91
MSB 0, LSB 91
0-120
ARP TRANSPOSE
arp_transpose
90 0-2

Page 2 pedal

Control CC NRPN Values
PAGE 2 PEDAL RELEASE
page_2_pedal_release
73 93
MSB 0, LSB 93
0-255

Page 2 chord

Control CC NRPN Values
PAGE 2 CHORD KEY LIMIT
page_2_chord_key_limit
117 94
MSB 0, LSB 94
0-127, or 0-1207 by NRPN
PAGE 2 CHORD HOLD MODE
page_2_chord_hold_mode
118 95
MSB 0, LSB 95
0-1

Envelopes

Control CC NRPN Values
ENV TYPE
env_type
50 96
MSB 0, LSB 96
0-1, or 0-2 by NRPN

Page 2 pan

Control CC NRPN Values
PAGE 2 PAN MODE
page_2_pan_mode
100
MSB 0, LSB 100
0-4
PAGE 2 PANWIDTH
page_2_panwidth
10 101
MSB 0, LSB 101
0-2

Program name

Control CC NRPN Values
PROGRAM NAME CHAR 0
program_name_char_0
102
MSB 0, LSB 102
0-87
PROGRAM NAME CHAR 1
program_name_char_1
103
MSB 0, LSB 103
0-87
PROGRAM NAME CHAR 2
program_name_char_2
104
MSB 0, LSB 104
0-87
PROGRAM NAME CHAR 3
program_name_char_3
105
MSB 0, LSB 105
0-87
PROGRAM NAME CHAR 4
program_name_char_4
106
MSB 0, LSB 106
0-87
PROGRAM NAME CHAR 5
program_name_char_5
107
MSB 0, LSB 107
0-87
PROGRAM NAME CHAR 6
program_name_char_6
108
MSB 0, LSB 108
0-87
PROGRAM NAME CHAR 7
program_name_char_7
109
MSB 0, LSB 109
0-87
PROGRAM NAME CHAR 8
program_name_char_8
110
MSB 0, LSB 110
0-87
PROGRAM NAME CHAR 9
program_name_char_9
111
MSB 0, LSB 111
0-87
PROGRAM NAME CHAR 10
program_name_char_10
112
MSB 0, LSB 112
0-87
PROGRAM NAME CHAR 11
program_name_char_11
113
MSB 0, LSB 113
0-87
PROGRAM NAME CHAR 12
program_name_char_12
114
MSB 0, LSB 114
0-87
PROGRAM NAME CHAR 13
program_name_char_13
115
MSB 0, LSB 115
0-87
PROGRAM NAME CHAR 14
program_name_char_14
116
MSB 0, LSB 116
0-87
PROGRAM NAME CHAR 15
program_name_char_15
117
MSB 0, LSB 117
0-87
PROGRAM NAME CHAR 16
program_name_char_16
118
MSB 0, LSB 118
0-87
PROGRAM NAME CHAR 17
program_name_char_17
119
MSB 0, LSB 119
0-87
PROGRAM NAME CHAR 18
program_name_char_18
120
MSB 0, LSB 120
0-87
PROGRAM NAME CHAR 19
program_name_char_19
121
MSB 0, LSB 121
0-87

Page 2 filter

Control CC NRPN Values
PAGE 2 FILTER KBD TRACK
page_2_filter_kbd_track
123
MSB 0, LSB 123
0-127
PAGE 2 FILTER KBD ON LEVEL
page_2_filter_kbd_on_level
37 0-127

Split

Control CC NRPN Values
SPLIT PARAMS UPPER LEVEL (UPPER/LOWER)
split_params_upper_level_upper
1122
MSB 8, LSB 98
0-63
SPLIT PARAMS UPPER LEVEL (UPPER/LOWER)
split_params_upper_level_lower
1090
MSB 8, LSB 66
0-63
SPLIT PARAMS SPLIT POINT (UPPER/LOWER)
split_params_split_point_upper
1123
MSB 8, LSB 99
0-127
SPLIT PARAMS SPLIT POINT (UPPER/LOWER)
split_params_split_point_lower
1092
MSB 8, LSB 68
0-127
SPLIT LOWER TRANSPOSE
split_lower_transpose
1093
MSB 8, LSB 69
0-72
SPLIT UPPER TRANSPOSE
split_upper_transpose
1125
MSB 8, LSB 101
0-72
SPLIT LOWER DETUNE
split_lower_detune
1094
MSB 8, LSB 70
0-64
SPLIT PAN MODE
split_pan_mode
1076
MSB 8, LSB 52
0-4
SPLIT PAN WIDTH
split_pan_width
1077
MSB 8, LSB 53
0-2
SPLIT HOLD/CHORD SOURCE
split_hold_chord_source
1072
MSB 8, LSB 48
0-2
SPLIT BOX MOD SOURCE
split_box_mod_source
1061
MSB 8, LSB 37
0-2
SPLIT ARP SOURCE
split_arp_source
1047
MSB 8, LSB 23
0-2
LOWER/UPPER/NO SELECT
lower_upper_no_select
95 0-2
NORMAL/SPLIT/DOUBLE MODE
normal_split_double_mode
119 0-2

Program selection

Control CC NRPN Values
BANK SELECT MSB
bank_select_msb
0 0-127
BANK SELECT LSB
bank_select_lsb
32 0-127

Keyboard

Control CC NRPN Values
TRANSPOSE UP/DOWN
transpose_up_down
9 0-2
EXPRESION PEDAL
expresion_pedal
11 0-127
SUSTAIN
sustain
64 0-1

Where these facts come from

Source documents

How they were read

OB-X8 User's Guide, printed "Version 1.2, May, 2023" and served as OB-X8-Manual-V2_2.pdf, 137 sheets: the MIDI implementation is sheets 122 to 137 - the globals that govern MIDI response on p. 122, the received and transmitted channel and controller messages on pp. 123-124, the control change table on pp. 125-128, how an NRPN travels on pp. 129-130, the NRPN table on pp. 131-133, and system exclusive on pp. 134-137. The OS 2.0 Addendum (8 sheets) supplies everything about split channels, MPE and the arpeggiator's clock. The product page is cited for which documents the maker offers, for the two bodies sharing one page, and for the newest OS it names.

PAGES ARE CITED AS FILE PAGES, BECAUSE THE PRINTED NUMBERING IS BROKEN. Sheets 1 to 7 print no number; 8 and 9 print "viii" and "ix", and i to vii are never printed at all; sheets 10 to 120 print 1 to 111; and then two different sheets both print 112 - sheet 121, the last page of Appendix E, and sheet 122, the first page of the MIDI implementation - after which 123 to 137 print 113 to 127. So the offset would be +9 for one run and +10 for the other and undefined for 112 itself. Both readers read the folio off all 137 sheets independently and agree on every range. The addendum prints no page number on any sheet.

THE MAKER STATES A LIMIT AND THEN BREAKS IT TEN TIMES, which is the one thing most likely to be got wrong here. "NRPNs are the preferred method of parameter transmission, since they cover the complete range of all parameters, while CCs are limited to a range of 128" (manual p. 122) - and its own control change table prints a range wider than 128 on ten rows: CC 1 and CC 73 and the six envelope times at 0-255, CC 33 at "00-175" and CC 74 at 0-175. Those are the parameter's range printed in a control change column, not the message's. range below carries the figure exactly as printed and nothing is scaled, because no page says how a value that wide is scaled into seven bits, and a 127 that no document prints would be this file's invention rather than the maker's statement. Where the parameter also has an NRPN, that is the way to reach the top of it, which is the maker's own advice.

SIX RANGES DISAGREE BETWEEN THE TWO TABLES, and nrpn_range carries the NRPN table's. Both readers found the same six and no others, out of 91 parameters this file pairs. One is not a real disagreement: Filter Frequency is "00-175" by control change against 0-175 by NRPN, which is a leading zero. Three are unreadable as anything but a mistyping of 0-127 - Page 2 LFO 1 Mod 2 Ramp Up and Mod Box Arp Speed are 0-27 by NRPN, where Mod 2's own twin is 0-127 in both tables, and Page 2 Chord Key Limit is "0-1207". Two are genuinely two-sided. Env Type is 0-1 by control change and 0-2 by NRPN, and the prose supports the control change: Page 2's Envelope Type sets the envelopes "to either OB-X/Xa or OB-8 contours" (manual p. 61), which is two states. Mod Box LFO 2 Bend Amount is 0-255 by control change and 0-12 by NRPN, twenty-one times apart, and here the prose supports the NRPN: the Bend Lever Amount runs "from ¼ to 12 semitones" (manual p. 67). Both figures are published in both cases and neither is resolved.

TWO NRPN ADDRESSES ARE NOT PUBLISHED AT ALL, which is the strongest thing in this file. The NRPN table prints MOD BOX LFO 2 DEST OSC 2 twice, at 56 and at 57, with one range. The two tables list that block in the same order - control change 75 Rate, 76 Shape, 77 Dest Osc 1, 78 Dest Osc 2, 79 Depth against NRPN 54, 55, 56, 57, 58 - so 56 sits exactly where the control change table has Dest Osc 1, and the reading that explains the document is that 56's printed name is wrong. That reading is not written into this file, because correcting a maker's printed name is not this project's to do. Nor is either address attached to a control: pairing CC 78 with whichever of the two comes first would be arbitrary, and publishing both as controls would invent a parameter the instrument has not. So the two control changes publish without an NRPN, and 56 and 57 publish not at all. Both readers reached this independently.

THREE PARAMETERS ARE DELIBERATELY NOT PAIRED, and the two readers disagree about one of them. NRPN 122 MOD BOX TRANSPOSE UP/ DOWN could be control change 9 TRANSPOSE UP/DOWN or control change 90 ARP TRANSPOSE: all three are 0-2, the arpeggiator lives in the Mod Box, and both control changes are otherwise unpaired. The second reader paired it with 90 and this file pairs it with neither, which is a disagreement recorded rather than resolved. The other two are NRPN 25 FILTER KBD TRACK against control change 36 FILTER KEYBOARD, and NRPN 123 PAGE 2 FILTER KBD TRACK against control change 37 PAGE 2 FILTER KBD ON LEVEL: plausible both times, and keyboard track and on level are not the same words.

CONTROL CHANGE 12 IS PRINTED TWICE, for OSC 1 XMOD and for OSC 1 FILTER ENV MOD. The NRPN table gives those 9 and 12, so the second row's "12" is very likely its NRPN number repeated into the control change column. Both ship at control change 12 as printed, which is the rule this corpus follows for a number a maker prints and nothing corrects.

SIXTEEN CONTROL CHANGES ARE NOT PUBLISHED AS CONTROLS, which follows oberheim/teo_5 exactly: 6 and 38 Data Entry, 96 and 97 Data Increment and Decrement - whose printed "ranges" are "+1" and "-1" - 98 to 101 NRPN and RPN, and 120 to 127, which are channel mode messages the validator refuses. 0 and 32 Bank Select do publish, as they do for the sibling.

THE DOCUMENT GIVES SIX ACCOUNTS OF HOW MANY PROGRAMS THERE ARE AND NO TWO AGREE, so presets is not recorded. "The OB-X8 contains 768 user-programmable presets... organized into six Banks, each of which contain 128 preset locations (organized as 16 Groups of 8 Programs)" (manual p. 15); a global transmits "the entire 640 program sound set" (manual p. 27); bank select is "1 - 5 select user banks 1 - 5; 6 - 9 select factory banks 1 - 4" (manual p. 123), which is nine banks against six, while the transmitted table gives "Bank Select: 1 - 5" (manual p. 124); the program dump request takes a "Bank Number, 0 - 7" (manual p. 135) and the program data dump a "Group Number: 0 - 9" (manual p. 136) with "Program Number: 0 - 39" (manual p. 136); and the program change row announces "0-39" and then enumerates 0 to 127 across sixteen groups (manual p. 123). Six statements of one number. receives and sends are recorded because every account agrees that program change travels both ways.

WHAT IS ABSENT, CHECKED RATHER THAN ASSUMED. There is no MIDI implementation chart - the conventional grid - in either document, so mode is not recorded: the control change table lists Omni and Mono and Poly Mode messages as received, and no page gives a default mode. Neither document states a note range for the sound engine beyond "Note number 0-127" (manual p. 123) in the message tables, so note_range is not recorded. And neither message table is a complete statement of what is received: control changes 2 and 4 are absent from the control change table and present in the message tables, while a global says the synth responds to "Pitch Wheel, Mod Wheel, Pedal, Breath, Volume, and Expression" (manual p. 26).

FOUR THINGS THAT LOOK LIKE MISPRINTS AND ARE NOT, established from the prose by the second reader, and recorded here so nobody "fixes" them. Portamento Mode's 0-66 is right: Page 2 lists three non-bend modes and a Bend Up mode whose range "is displayed as -12.0... to +19.5, in 0.5 semitone increments", which is 64 bend steps plus three modes, 67 values. Osc Freq's 0-63 is right: "5-octave+minor third range (0-+63 semitones.)" (manual p. 30). Program Name Char's 0-87 is right, 88 printable characters, and consistent across all twenty rows. Arp Transpose Interval's 0-120 against a count of 0-5 is right, five keys pressed.

THE MAKER'S CAPITALS ARE THE LABELS, as they are for roland/tr_6s, whose document is also entirely in capitals - where oberheim/teo_5 keeps title case because its own document prints title case. The printed typos are kept in the labels and not in the field names: 0SC 2 FREQ for control change 16, EXPRESION PEDAL for 11, PAGE 2 PANWIDTH for 10 against the NRPN table's PAGE 2 PAN WIDTH, MOD BOX LFO2 for 1 against MOD BOX LFO 2 everywhere else.

NOT RECORDED: values, bands and defaults for any control. The two tables give a range and nothing else, and the guide's Page 2 chapter names the states some parameters step through under menu numbers that the addendum shows are not stable - it addresses "Global 3. MIDI Channel" where the guide's third global is Local Control, and "Page 2 23. LFO Volume Dest" where the guide's twenty-third is Vibrato LFO Wave. Those numbers also have to differ between the keyboard and the Module, because one has a global the other has not. So no state is taken from a menu position.

WHAT THIS FILE DOES NOT CARRY, and a reader implementing system exclusive needs to know: the document gives this instrument two different SysEx IDs. The device inquiry reply says "OB-X8 ID (Family LS)" (manual p. 134) against 0011 0011, which is 0x33, and every one of the seven other SysEx messages says "OB-X8 ID" against 0011 0001, which is 0x31. One is wrong and no page tells which. The dump sizes do not agree either - 599 bytes for a program dump against 597 for an edit buffer dump of the same data, and "The 128 'packed' parameter bytes in the program dump follow the order of the NRPN list" (manual p. 137) - and a "Save Edit Buffer" (manual p. 136) table is byte-for-byte the "Request Program Dump" (manual p. 135) table above it, command byte and description included. sysex: true records that the instrument has system exclusive, which is not in doubt; the messages themselves are beyond what this format holds.