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.
Roland TB-3 MIDI implementation
The MIDI implementation of the Roland TB-3: what it answers to, and the 15 controls it offers, on firmware 1.10.
At a glance
- Firmware
- This page describes firmware 1.10.
- MIDI channel
- Any one of 1 to 16.
- MIDI mode
- 4: omni off, mono.
- Voices
- Not recorded.
- Note range
- 12 to 108: C0 to C8, counting middle C as C4.
- Velocity
- Sent and received. Release velocity is received.
- Aftertouch
- None, sent or answered.
- Pitch bend
- Not recorded.
- Program change
- Received, with 128 presets.
- MIDI clock
- Sent and received.
- Start and stop
- Sent and received.
- Control change
- 15 controls, in the tables below.
- NRPN
- None.
- 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("roland/tb_3") has loaded them.
XY pad
| Control | CC | Values |
|---|---|---|
PAD Zpad_z |
1 | 0-127 |
(XY PLAY) PAD Yxy_play_pad_y |
11 | 0-127 |
(ENV MOD) PAD Xenv_mod_pad_x |
12 | 0-127 |
(ENV MOD) PAD Yenv_mod_pad_y |
13 | 0-127 |
Filter
| Control | CC | Values |
|---|---|---|
RESONANCEresonance |
71 | 0-127 |
CUTOFFcutoff |
74 | 0-127 |
Pattern
| Control | CC | Values |
|---|---|---|
PATTERN SLIDEpattern_slide |
102 | 0-127 |
PATTERN ACCENTpattern_accent |
103 | 0-127 |
Scatter
| Control | CC | Values |
|---|---|---|
SCATTER TYPEscatter_type |
68 | 0-127 Received, never sent |
SCATTER DEPTHscatter_depth |
69 | 0-127 Received, never sent |
Tone
| Control | CC | Values |
|---|---|---|
ACCENTaccent |
16 | 0-127 |
EFFECTeffect |
17 | 0-127 |
TUNINGtuning |
104 | 0-127 |
Without a group
| Control | CC | Values |
|---|---|---|
Bank Numberbank_select_msb |
0 | 0-127 Received, never sent |
Bank Select LSBbank_select_lsb |
32 | 0 Received, never sent |
Where these facts come from
Source documents
- TB-3 MIDI Implementation Chart, 1.10, dated 25 July 2014, midi implementation chart, read on 6 October 2026 (the file read).
- TB-3 MIDI Implementation, 1.10, dated 4 July 2014, midi implementation, read on 6 October 2026 (the file read).
- TB-3 Owner's Manual, dated 13 March 2014, owner's manual, read on 6 October 2026 (the file read).
How they were read
THREE DOCUMENTS, AND THE TWO THAT MATTER ARE ABOUT MIDI AND NOTHING ELSE. The MIDI Implementation Chart is one A4 sheet and settles every field below except two. The MIDI Implementation is six sheets of system exclusive, and its Controller address block restates seven of the fifteen controller numbers beside the addresses that reach the same parameters. All seven agree with the chart, which is the only corroboration of a controller number by a second document anywhere in this corpus:
"CUTOFF (CC# 74)" (implementation p. 2); "RESONANCE (CC# 71)" (implementation p. 2); "ACCENT (CC# 16)" (implementation p. 2); "EFFECT (CC# 17)" (implementation p. 2); "ENV MOD X (CC# 12)" (implementation p. 2); "ENV MOD Y (CC# 13)" (implementation p. 2); "TUNING (CC# 104)" (implementation p. 2).
THE CHART AND THE MANUAL HAVE NO PAGE TO TURN TO, being one sheet each, so what is cited from them is cited by document name; only the implementation is paginated, and its seven controller numbers are all on p. 2.
THE CHART IS READ BY COORDINATE AND NOT BY ITS TEXT ORDER. The flat layer gives every number, then every transmitted mark, then every mark in the Recognized column, then every name, and comes to 27 marks where fourteen rows need 28. The columns are at x=201 Transmitted, x=322 Recognized and x=442 Remarks, measured from the heading row itself, and Notes/4647_extract_tb_3.py asserts all fourteen rows against that geometry.
WHAT THE MANUAL ALONE SETTLES is the channel default and the clock source: "Specifies the MIDI transmit/receive channel." (manual), at "(default: C 2)" (manual), and AUTO, which means "If MIDI clock is being input to the MIDI IN connector or the USB port, the TB-3's tempo will automatically synchronize to MIDI clock." (manual).
THE MANUAL NAMES AFTERTOUCH AND THE CHART CROSSES IT IN ALL FOUR BOXES, AND BOTH ARE TRUE. The manual carries a Pad Aftertouch Sensitivity setting that "Adjusts the sensitivity of the pad to pressure (aftertouch)." (manual), while the chart crosses key's and channel's, transmitted and recognised. Neither is wrong, because the resolution is in the controller table: pad pressure leaves this instrument as controller 1, PAD Z, and not as an aftertouch message. So the pad is pressure sensitive, aftertouch is none, and anybody who presses the pad and watches the wire still sees something move. A reader meeting the manual's sentence by itself would expect aftertouch: channel and be wrong, which is why it is here rather than only in a comment.
IT ANSWERS TO TWO MORE OCTAVES THAN IT PLAYS, which is the one row on this chart where the two columns differ by more than a mark: 12-84 transmitted against 12-108 in the Recognized column, with the True Voice row struck through transmitted, and the remark "C0-C6 12-84" (chart). note_range carries the received span, because this field says what the instrument answers to.
AND IT HAS A PITCH BEND THAT NO FIELD HERE CAN HOLD. The chart marks it in both columns and names the axis it comes from, "(XY PLAY) PAD X" (chart), so the bend is a finger position on a touch pad rather than a wheel - but no document gives a depth or says whether a depth can be set, so the pitch_bend block is left out entirely. roland/tr_8 leaves it out for the opposite reason: its chart crosses pitch bend in all four boxes.