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.

Sequential Prophet-5 MIDI implementation

The MIDI implementation of the Sequential Prophet-5: what it answers to, and the 85 controls it offers, on firmware 2.1.0.

At a glance

Firmware
This page describes firmware 2.1.0.
MIDI channel
Any one of 1 to 16.
Voices
5.
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, with 400 presets.
MIDI clock
Not recorded.
Start and stop
Not recorded.
Control change
64 controls, in the tables below.
NRPN
Supported, and preferred to CC. 71 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("sequential/prophet_5") has loaded them.

OSC A

Control CC NRPN Values
OSC A FREQUENCY
osc_a_frequency
3 0
MSB 0, LSB 0
0-120
OSC A SAW ON/FF
osc_a_saw_on_ff
15 3
MSB 0, LSB 3
0-1
OSC A SQUARE ON/OFF
osc_a_square_on_off
20 4
MSB 0, LSB 4
0-1
OSC A PULSE WIDTH
osc_a_pulse_width
21 8
MSB 0, LSB 8
0-120
OSC SYNC ON/OFF
osc_sync_on_off
23 10
MSB 0, LSB 10
0-1
OSC A LEVEL
osc_a_level
27 14
MSB 0, LSB 14
0-120

OSC B

Control CC NRPN Values
OSC B FREQUENCY
osc_b_frequency
9 1
MSB 0, LSB 1
0-120
OSC B FINE TUNE
osc_b_fine_tune
14 2
MSB 0, LSB 2
0-127
OSC B PULSE WIDTH
osc_b_pulse_width
22 9
MSB 0, LSB 9
0-120
OSC B LOW FREQ ON/OFF
osc_b_low_freq_on_off
24 11
MSB 0, LSB 11
0-1
OSC B KEYBOARD ON/OFF
osc_b_keyboard_on_off
25 12
MSB 0, LSB 12
0-1
OSC B LEVEL
osc_b_level
28 15
MSB 0, LSB 15
0-120
OSC B SAW ON/OFF
osc_b_saw_on_off
30 5
MSB 0, LSB 5
0-1
OSC B TRI ON/OFF
osc_b_tri_on_off
52 6
MSB 0, LSB 6
0-1
OSC B SQUARE ON/OFF
osc_b_square_on_off
116 7
MSB 0, LSB 7
0-1

POLY MOD

Control CC NRPN Values
POLY MOD FILT ENV AMOUNT
poly_mod_filt_env_amount
59 32
MSB 0, LSB 32
0-127
POLY MOD OSC B AMOUNT
poly_mod_osc_b_amount
60 33
MSB 0, LSB 33
0-120
POLY MOD FREQ A ON/OFF
poly_mod_freq_a_on_off
61 34
MSB 0, LSB 34
0-1
POLY MOD PW ON/OFF
poly_mod_pw_on_off
62 35
MSB 0, LSB 35
0-1
POLY MOD FILTER ON/OFF
poly_mod_filter_on_off
63 36
MSB 0, LSB 36
0-1

LFO

Control CC NRPN Values
LFO FREQUENCY
lfo_frequency
46 21
MSB 0, LSB 21
0-120
LFO INITIAL AMOUNT
lfo_initial_amount
47 22
MSB 0, LSB 22
0-120
LFO SOURCE MIX
lfo_source_mix
53 26
MSB 0, LSB 26
0-120
LFO FREQ A ON/OFF
lfo_freq_a_on_off
54 27
MSB 0, LSB 27
0-1
LFO FREQ B ON/OFF
lfo_freq_b_on_off
55 28
MSB 0, LSB 28
0-1
LFO FREQ PW A ON/OFF
lfo_freq_pw_a_on_off
56 29
MSB 0, LSB 29
0-1
LFO FREQ PW B ON/OFF
lfo_freq_pw_b_on_off
57 30
MSB 0, LSB 30
0-1
LFO FILTER ON/OFF
lfo_filter_on_off
58 31
MSB 0, LSB 31
0-1
LFO SAW ON/OFF
lfo_saw_on_off
117 23
MSB 0, LSB 23
0-1
LFO TRI ON/OFF
lfo_tri_on_off
118 24
MSB 0, LSB 24
0-1
LFO SQUARE ON/OFF
lfo_square_on_off
119 25
MSB 0, LSB 25
0-1

FILTER

Control CC NRPN Values
RESONANCE
resonance
31 18
MSB 0, LSB 18
0-120
FILTER KEYBOARD TRACK OFF/HALF/FULL
filter_keyboard_track_off_half_full
35 19
MSB 0, LSB 19
0-2
FILTER REV SELECT
filter_rev_select
41 20
MSB 0, LSB 20
0-1
CUTOFF
cutoff
73 17
MSB 0, LSB 17
0-120
BRIGHTNESS
brightness
74 0-127

ENVELOPE

Control CC NRPN Values
ENVELOPE FILTER AMOUNT
envelope_filter_amount
89 0-120
ENVELOPE FILTER VELOCITY ON/OFF
envelope_filter_velocity_on_off
90 0-1
ENVELOPE VCA VELOCITY ON/OFF
envelope_vca_velocity_on_off
102 0-1
ATTACK FILTER
attack_filter
103 43
MSB 0, LSB 43
0-120
ATTACK VCA
attack_vca
104 44
MSB 0, LSB 44
0-120
DECAY FILTER
decay_filter
105 45
MSB 0, LSB 45
0-120
DECAY VCA
decay_vca
106 46
MSB 0, LSB 46
0-120
SUSTAIN FILTER
sustain_filter
107 47
MSB 0, LSB 47
0-120
SUSTAIN VCA
sustain_vca
108 48
MSB 0, LSB 48
0-120
RELEASE FILTER
release_filter
109 49
MSB 0, LSB 49
0-120
RELEASE VCA
release_vca
110 50
MSB 0, LSB 50
0-120
RELEASE ON/OFF
release_on_off
111 0-1
ENV FILTER AMOUNT
env_filter_amount
40
MSB 0, LSB 40
0-120
VELOCTIY > FILTER
veloctiy_filter
41
MSB 0, LSB 41
0-1
VELOCITY > AMP
velocity_amp
42
MSB 0, LSB 42
0-1
RELEASE SWITCH
release_switch
51
MSB 0, LSB 51
0-1

UNISON

Control CC NRPN Values
RETRIGGER AND UNISON ASSIGN
retrigger_and_unison_assign
71 0-3
UNISON ON/OFF
unison_on_off
112 52
MSB 0, LSB 52
0-1
UNISON VOICE COUNT
unison_voice_count
113 53
MSB 0, LSB 53
0-10
UNISON DETUNE
unison_detune
114 54
MSB 0, LSB 54
0-7
RETRIGGER AND UNISON
retrigger_and_unison
87
MSB 0, LSB 87
0-3

PRESSURE

Control CC NRPN Values
PRESSURE FILTER
pressure_filter
86 0-1
PRESSURE LFO
pressure_lfo
87 0-1
AFTERTOUCH > FILTER
aftertouch_filter
38
MSB 0, LSB 38
0-1
AFTERTOUCH > AMP
aftertouch_amp
39
MSB 0, LSB 39
0-1

Performance

Control CC NRPN Values
Mod Wheel
mod_wheel
1 0-127
Breath Controller
breath_controller
2 0-127
Sent, never received
Foot Controller
foot_controller
4 0-127
Bank Select
bank_select
32 0-127
Damper pedal
damper_pedal
64 0-127
PITCH WHEEL RANGE
pitch_wheel_range
70 86
MSB 0, LSB 86
0-11

Global

Control CC NRPN Values
MASTER VOLUME
master_volume
7 0-120
GLIDE RATE
glide_rate
26 13
MSB 0, LSB 13
0-120
NOISE LEVEL
noise_level
29 16
MSB 0, LSB 16
0-120
VINTAGE
vintage
85 37
MSB 0, LSB 37
0-127

Global parameters

Control CC NRPN Values
TRANSPOSE
transpose
4096
MSB 32, LSB 0
0-24
MIDI CHANNEL
midi_channel
4097
MSB 32, LSB 1
0-16
PARAM XMIT
param_xmit
4098
MSB 32, LSB 2
0-2
PARAM RCV
param_rcv
4099
MSB 32, LSB 3
0-2
MIDI CONTROL
midi_control
4100
MSB 32, LSB 4
0-1
MIDI SYSEX
midi_sysex
4101
MSB 32, LSB 5
0-1
MIDI OUT
midi_out
4102
MSB 32, LSB 6
0-3
LOCAL CONTROL
local_control
4103
MSB 32, LSB 7
0-2
POT MODE
pot_mode
4104
MSB 32, LSB 8
0-2
SUSTAIN MODE
sustain_mode
4105
MSB 32, LSB 9
0-1
PEDAL MODE
pedal_mode
4106
MSB 32, LSB 10
0-1
ALT TUNINGS
alt_tunings
4107
MSB 32, LSB 11
0-15
VEL RESPONSE
vel_response
4108
MSB 32, LSB 12
0-7
AFTERTOUCH RESPONSE
aftertouch_response
4109
MSB 32, LSB 13
0-7

Where these facts come from

Source documents

How they were read

Prophet-5 MIDI Implementation, version 1.4, 13 pages: the globals that gate everything on p. 1, the received messages on p. 2, the transmitted messages on p. 3, the 59 controller numbers on pp. 4 and 5, the NRPN format on p. 6, the NRPN tables on pp. 8 and 9, and the system exclusive layouts on pp. 10 to 13. Prophet-5 User's Guide 1.3, 80 sheets: the instrument on p. 1, the rear panel on p. 3, the USB port on p. 4, the programs on p. 6, the globals on p. 16, oscillator sync on p. 18, the pitch wheel on p. 37 and the aftertouch on p. 38. Prophet-5/10 OS 2.0 Addendum and OS 2.1.0 Addendum, for what has changed since the implementation was written. Prophet-10 User's Guide 1.4, cited for one thing only, which is that it says the same.

SIXTY-FOUR CONTROLLER NUMBERS, FROM TWO TABLES THAT DO DIFFERENT JOBS. Fifty-nine are the parameter map, "Additional Continuous Controllers Transmitted/Received" (pp. 4-5), each with the maker's own name and its own range. Five more are performance controllers that the received and transmitted message tables name instead (pp. 2-3): the mod wheel, the breath controller, the foot controller, bank select and the damper pedal.

THE TWO MESSAGE TABLES ARE TWO LISTS, SO A NUMBER IN ONE AND NOT THE OTHER IS ONE-WAY. Measured over both: only the breath controller is, "Breath Controller: When assigned to Pedal/CV" (p. 3), transmitted and never received. Everything else that appears at all appears in both.

THE LABELS ARE THE MAKER'S OWN WORDS IN THE MAKER'S OWN CAPITALS, TYPOS INCLUDED. Controller 15 is printed "OSC A SAW ON/FF" (p. 4), which is ON/OFF with a letter missing - and it is printed that way in the NRPN table as well (p. 8), so it is what this maker calls the thing rather than a slip in one place. Nothing here tidies it.

AND NRPN IS THE PREFERRED METHOD, WHICH THE MAKER SAYS IN AS MANY WORDS. "Param Xmit: Off, CC, NRPN" (p. 1) and "Param Rcv: Off, CC, NRPN" (p. 1) are globals, and of them: "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" (p. 1). So a sender that can do either should do NRPN, and midi.nrpn records that.

AND A PARAMETER CHANGE IS ONE OR THE OTHER, NEVER BOTH. Each of those globals takes one of three values, so at any moment the instrument is sending CC or sending NRPN or sending nothing, and the same for receiving. The controller table says the condition itself: "They are transmitted when Param Xmit is set to CC, and recognized/received when Param Rcv is set to CC" (p. 4). A panel that offered both at once would be describing a machine that cannot exist.

THE NRPN TABLE IS CARRIED, AND AN NRPN SITS BESIDE A CONTROLLER ONLY WHERE THE MAKER PRINTS THE SAME NAME IN BOTH TABLES. It holds 71 numbered parameters and three more given as spans, from 0 to 4109 (pp. 8-9), in two runs of numbers: the program parameters from 0 upwards and the global parameters from 4096 upwards, which the chapter before them promises as "one for global parameters, and the other for program parameters" (implementation p. 6), though it prints one table. The controller table and the NRPN table are two views of the same parameters and they do not line up: no arithmetic relates one number to the other - controller 3 and NRPN 0 are both OSC A FREQUENCY, controller 15 and NRPN 3 are both OSC A SAW ON/FF. So 50 controls carry both numbers, exactly where the two tables print the same name. Seven more NRPNs sit in the places the controller table gives to rows of other names - AFTERTOUCH > FILTER where it has PRESSURE FILTER, and six like it - and are carried as controls of their own, because pairing two different names is a reader's judgement and not the maker's, and paired by position one of them would disagree with its controller about a destination: the controller table has PRESSURE FILTER and PRESSURE LFO (p. 5), the NRPN table AFTERTOUCH > FILTER and AFTERTOUCH > AMP (p. 8), and the guide's aftertouch switch chooses "the Filter cutoff and/or the LFO amount" (guide p. 38). The fourteen global parameters are controls of their own too, 85 controls in all. The three spans are not carried: UNISON NOTE is one row over ten numbers, 55-64 (p. 9), and carrying it would mean writing ten numbers the page does not print one by one, and the other two are RESERVED.

WHAT THE TWO TABLES DO AGREE ABOUT IS EVERY RANGE THEY SHARE. Measured over the 50 parameter names printed in both: not one range differs. So the two maps disagree about numbering and never about scaling, which is worth knowing by anyone who joins them. Beyond those 50, seven more sit in the same place under other names - PRESSURE FILTER against AFTERTOUCH > FILTER, and six like it - two are controller-only, and seventeen rows are the NRPN table's alone: the fourteen global settings and three spans.

TWO NUMBERS ARE REFUSED BY THE VALIDATOR AND ARE LEFT OUT RATHER THAN DROPPED SILENTLY. Controller 123 is "All Notes Off: Clear all MIDI notes" (p. 2) and controller 121 is "Reset All Controllers: Clears all MIDI controllers to 0, MIDI volume to maximum" (p. 2). Both are received; both are channel mode messages, which this corpus does not record as controls.

AND ONE ROW IS LEFT OUT BECAUSE THE DOCUMENT SAYS TWO THINGS ABOUT IT. The transmitted table's fourth controller row is named "Expression: When assigned to Pedal/CV" (p. 3) and its second byte is printed "0000 1101", which is 13. Expression is controller 11. There is no third statement anywhere to settle which the maker meant - the received table has no Expression row at all - so neither number is recorded, and a consumer that wants expression will have to ask.

THE DOCUMENT HAS SIX MORE DEFECTS AND NONE OF THEM IS RESOLVED HERE, because resolving one would be inventing a number the maker has not published.

The first is a second typo in a parameter name: NRPN 41 is printed "VELOCTIY > FILTER" (p. 8) where NRPN 42 beside it spells the word correctly.

The second is the one a reader would actually be hurt by. This instrument's system exclusive identity is given two ways. The device inquiry reply gives "0011 0011" (p. 10) as the Prophet-5's family byte; the three request and dump chapters give "0011 0001" (pp. 11, 12 and 13), in nine separate rows. 51 against 49, and nothing in the document says which.

The third: the RPN reset message is given the wrong controller numbers. The received NRPN chapter prints "0010 0101" and "0010 0100" (p. 7) for the registered parameter number's two halves, which are 37 and 36. They are 101 and 100. Every NRPN controller number on the same two pages is right - 99, 98, 6, 38, 96 and 97 - so it is these two rows and not the chapter.

The fourth: nothing in the document says how to save the edit buffer. The table headed Save Edit Buffer (p. 12) is byte for byte the Request Program Dump of the page before, command byte and all.

The fifth: a program is addressed three incompatible ways. "Bank Number, 0 - 7" (implementation p. 11) with "Program Number, 0 - 127" (p. 11); "Group Number: 0 - 9" (implementation p. 12) with "Program Number: 0 - 39" (p. 12); and the received program change's own banks on p. 2.

The sixth: the NRPN tables are headed "Control NRPN Data" (implementation p. 8) and introduced with "It is received and transmitted but not saved as part of a program" (p. 8) - over the parameters the document later says are saved, "The 128 'packed' parameter bytes in the program dump follow the order of the NRPN list" (p. 13). The chapter before them promises "the two tables below, one for global parameters, and the other for program parameters" (p. 6), and neither table is headed that way.

THE SYSTEM EXCLUSIVE CHAPTER IS FOUR LAYOUTS, not a mention. A universal device inquiry, a request program dump, a program data dump and a global parameters data dump, each byte by byte (pp. 10-13), and a global chooses the port they travel on: "MIDI SysEx: MIDI, USB" (p. 1).

IT RECEIVES BOTH KINDS OF PRESSURE AND ITS OWN KEYBOARD SENDS CHANNEL PRESSURE, which the two fields and this paragraph say. The received table has "Polyphonic Key Pressure" (p. 2) and "Channel Pressure" (p. 2); the transmitted table has "Channel Pressure" (p. 3) and no polyphonic row at all. And the User's Guide says what the keyboard is: "The Prophet-5 provides monophonic (or 'channel') aftertouch, which means that applying pressure to any key within a chord will apply modulation to all notes currently held" (p. 38). aftertouch: both records what it answers to and aftertouch_transmits: true what it sends, and this paragraph is the rest of it. The Super 6 at rank 64 is the same shape from the other side.

VELOCITY ARRIVES AND IS IGNORED ON NOTE OFF. "Note Off. Velocity is ignored" (p. 2) and "Note On. Note off if vvvvvvv = 0" (p. 2), and what it transmits on note off is a literal "0000000" (p. 3). Two global curves shape what the keyboard produces, "Vel Response: 0-6" (p. 16) and "AT Response: 0-7" (p. 16), and neither says anything about what an incoming velocity does.

THE BEND RANGE IS PER PROGRAM AND THE PANEL AND THE CONTROLLER COUNT IT DIFFERENTLY. "Use the group select (decrement) and bank select (increment) switches to choose the desired range from 1- 12. A setting of 1 equals a semitone. A setting of 12 equals an octave" (p. 37). Controller 70 is "PITCH WHEEL RANGE" (p. 5) with a range of "0-11" (p. 5) - twelve values either way, by one, and the implementation does not say that the controller's 0 is the panel's 1.

FOUR MORE RANGES THE GUIDE GIVES DIFFERENTLY, CARRIED AS THE IMPLEMENTATION PRINTS THEM. Controller 114 is UNISON DETUNE over 0-7 (p. 5), eight values, and the guide says "A setting of 0 is minimum detuning. A setting of 8 is maximum detuning" (guide p. 40), nine. Controller 31 is RESONANCE over 0-120 (p. 4), and the guide's example of the pot modes says "the resonance parameter has an internal value range of 0 to 127" (guide p. 14). And two of the global NRPNs: VEL RESPONSE is printed over 0-7 (p. 9), eight values, where the guide's global is "Vel Response: 0-6" (guide p. 16), seven; and ALT TUNINGS over 0-15 (p. 9), sixteen, where the guide offers normal tuning and sixteen more (guide p. 16). The ranges below are what a message carries, by the implementation's word; neither document says how the other's numbers map onto them.

FOUR HUNDRED PROGRAMS, AND A PROGRAM CHANGE REACHES FORTY OF THEM. "The Prophet-5 contains a total of 400 programs" (p. 6), selected by a group, a bank and a program number. The implementation's received table gives "Program change, 0-39" (p. 2) and bank select picks the rest: "Bank Select: 1 - 5 select user banks 1 - 5; 6 - 9 select factory banks 1 - 4" (p. 2).

AND THAT PROGRAM CHANGE ROW CONTRADICTS ITSELF. It reads "Program change, 0-39 for Programs 0-7 within Bank 1, 8-15 within Bank 2, 16-23 within Bank 4, and 24-31 within Bank 5" (p. 2): after the 0-39, four spans of eight, naming Banks 1, 2, 4 and 5 - thirty-two values across four banks, where the number before it is forty and the bank selector cycles through five. Nothing here resolves it: 40 is recorded because it is the figure the row states outright and because 400 programs in groups of five banks of eight agrees with it, and the row is quoted here so that a reader can see what was set aside.

AND BANK SELECT NAMES FIVE USER BANKS AND ONLY FOUR FACTORY ONES, where the guide's selector "increments and cycles through Groups 1-5" (guide p. 6) in either set of 200. As printed, no bank select value reaches a fifth factory group, and the transmitted table says only "Bank Select: 1 - 5" (p. 3). The program data dump does reach one, in the guide's own word: "Group Number: 0 - 9" (p. 12) with "Program Number: 0 - 39" (p. 12), ten groups of forty. Neither document says that a bank select value is a group.

NOT RECORDED: the clock and the transport. The words clock, start, stop, continue, song position and active sensing appear nowhere in the thirteen pages of the implementation - not as a no, as nothing at all. This instrument has no sequencer and no arpeggiator, and the implementation simply does not have those rows.

NOT RECORDED: anything from the two operating system addenda, which add Stack and Split (2.0) and per-program filter Q compensation, velocity and aftertouch amounts, a high note priority and a layer link (2.1.0). Neither addendum mentions MIDI and neither gives a number for anything it adds, so the tables above are what is published and are known to be incomplete for the instrument as it ships. One of them visibly so: the guide names four key priorities, "low, last, low retrigger, last retrigger" (guide p. 45), and controller 71, RETRIGGER AND UNISON ASSIGN, has four values (p. 5) - which value is which is not said - and NRPN 87, RETRIGGER AND UNISON, the same four (p. 9). 2.1.0 adds two more priorities, high note and its retrigger: "High Note gives note priority to the highest note played, with a retrigger option" (addendum_2_1_0 p. 3), which no value reaches.