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 FREQUENCYosc_a_frequency |
3 | 0 MSB 0, LSB 0 |
0-120 |
OSC A SAW ON/FFosc_a_saw_on_ff |
15 | 3 MSB 0, LSB 3 |
0-1 |
OSC A SQUARE ON/OFFosc_a_square_on_off |
20 | 4 MSB 0, LSB 4 |
0-1 |
OSC A PULSE WIDTHosc_a_pulse_width |
21 | 8 MSB 0, LSB 8 |
0-120 |
OSC SYNC ON/OFFosc_sync_on_off |
23 | 10 MSB 0, LSB 10 |
0-1 |
OSC A LEVELosc_a_level |
27 | 14 MSB 0, LSB 14 |
0-120 |
OSC B
| Control | CC | NRPN | Values |
|---|---|---|---|
OSC B FREQUENCYosc_b_frequency |
9 | 1 MSB 0, LSB 1 |
0-120 |
OSC B FINE TUNEosc_b_fine_tune |
14 | 2 MSB 0, LSB 2 |
0-127 |
OSC B PULSE WIDTHosc_b_pulse_width |
22 | 9 MSB 0, LSB 9 |
0-120 |
OSC B LOW FREQ ON/OFFosc_b_low_freq_on_off |
24 | 11 MSB 0, LSB 11 |
0-1 |
OSC B KEYBOARD ON/OFFosc_b_keyboard_on_off |
25 | 12 MSB 0, LSB 12 |
0-1 |
OSC B LEVELosc_b_level |
28 | 15 MSB 0, LSB 15 |
0-120 |
OSC B SAW ON/OFFosc_b_saw_on_off |
30 | 5 MSB 0, LSB 5 |
0-1 |
OSC B TRI ON/OFFosc_b_tri_on_off |
52 | 6 MSB 0, LSB 6 |
0-1 |
OSC B SQUARE ON/OFFosc_b_square_on_off |
116 | 7 MSB 0, LSB 7 |
0-1 |
POLY MOD
| Control | CC | NRPN | Values |
|---|---|---|---|
POLY MOD FILT ENV AMOUNTpoly_mod_filt_env_amount |
59 | 32 MSB 0, LSB 32 |
0-127 |
POLY MOD OSC B AMOUNTpoly_mod_osc_b_amount |
60 | 33 MSB 0, LSB 33 |
0-120 |
POLY MOD FREQ A ON/OFFpoly_mod_freq_a_on_off |
61 | 34 MSB 0, LSB 34 |
0-1 |
POLY MOD PW ON/OFFpoly_mod_pw_on_off |
62 | 35 MSB 0, LSB 35 |
0-1 |
POLY MOD FILTER ON/OFFpoly_mod_filter_on_off |
63 | 36 MSB 0, LSB 36 |
0-1 |
LFO
| Control | CC | NRPN | Values |
|---|---|---|---|
LFO FREQUENCYlfo_frequency |
46 | 21 MSB 0, LSB 21 |
0-120 |
LFO INITIAL AMOUNTlfo_initial_amount |
47 | 22 MSB 0, LSB 22 |
0-120 |
LFO SOURCE MIXlfo_source_mix |
53 | 26 MSB 0, LSB 26 |
0-120 |
LFO FREQ A ON/OFFlfo_freq_a_on_off |
54 | 27 MSB 0, LSB 27 |
0-1 |
LFO FREQ B ON/OFFlfo_freq_b_on_off |
55 | 28 MSB 0, LSB 28 |
0-1 |
LFO FREQ PW A ON/OFFlfo_freq_pw_a_on_off |
56 | 29 MSB 0, LSB 29 |
0-1 |
LFO FREQ PW B ON/OFFlfo_freq_pw_b_on_off |
57 | 30 MSB 0, LSB 30 |
0-1 |
LFO FILTER ON/OFFlfo_filter_on_off |
58 | 31 MSB 0, LSB 31 |
0-1 |
LFO SAW ON/OFFlfo_saw_on_off |
117 | 23 MSB 0, LSB 23 |
0-1 |
LFO TRI ON/OFFlfo_tri_on_off |
118 | 24 MSB 0, LSB 24 |
0-1 |
LFO SQUARE ON/OFFlfo_square_on_off |
119 | 25 MSB 0, LSB 25 |
0-1 |
FILTER
| Control | CC | NRPN | Values |
|---|---|---|---|
RESONANCEresonance |
31 | 18 MSB 0, LSB 18 |
0-120 |
FILTER KEYBOARD TRACK OFF/HALF/FULLfilter_keyboard_track_off_half_full |
35 | 19 MSB 0, LSB 19 |
0-2 |
FILTER REV SELECTfilter_rev_select |
41 | 20 MSB 0, LSB 20 |
0-1 |
CUTOFFcutoff |
73 | 17 MSB 0, LSB 17 |
0-120 |
BRIGHTNESSbrightness |
74 | 0-127 |
ENVELOPE
| Control | CC | NRPN | Values |
|---|---|---|---|
ENVELOPE FILTER AMOUNTenvelope_filter_amount |
89 | 0-120 | |
ENVELOPE FILTER VELOCITY ON/OFFenvelope_filter_velocity_on_off |
90 | 0-1 | |
ENVELOPE VCA VELOCITY ON/OFFenvelope_vca_velocity_on_off |
102 | 0-1 | |
ATTACK FILTERattack_filter |
103 | 43 MSB 0, LSB 43 |
0-120 |
ATTACK VCAattack_vca |
104 | 44 MSB 0, LSB 44 |
0-120 |
DECAY FILTERdecay_filter |
105 | 45 MSB 0, LSB 45 |
0-120 |
DECAY VCAdecay_vca |
106 | 46 MSB 0, LSB 46 |
0-120 |
SUSTAIN FILTERsustain_filter |
107 | 47 MSB 0, LSB 47 |
0-120 |
SUSTAIN VCAsustain_vca |
108 | 48 MSB 0, LSB 48 |
0-120 |
RELEASE FILTERrelease_filter |
109 | 49 MSB 0, LSB 49 |
0-120 |
RELEASE VCArelease_vca |
110 | 50 MSB 0, LSB 50 |
0-120 |
RELEASE ON/OFFrelease_on_off |
111 | 0-1 | |
ENV FILTER AMOUNTenv_filter_amount |
40 MSB 0, LSB 40 |
0-120 | |
VELOCTIY > FILTERveloctiy_filter |
41 MSB 0, LSB 41 |
0-1 | |
VELOCITY > AMPvelocity_amp |
42 MSB 0, LSB 42 |
0-1 | |
RELEASE SWITCHrelease_switch |
51 MSB 0, LSB 51 |
0-1 |
UNISON
| Control | CC | NRPN | Values |
|---|---|---|---|
RETRIGGER AND UNISON ASSIGNretrigger_and_unison_assign |
71 | 0-3 | |
UNISON ON/OFFunison_on_off |
112 | 52 MSB 0, LSB 52 |
0-1 |
UNISON VOICE COUNTunison_voice_count |
113 | 53 MSB 0, LSB 53 |
0-10 |
UNISON DETUNEunison_detune |
114 | 54 MSB 0, LSB 54 |
0-7 |
RETRIGGER AND UNISONretrigger_and_unison |
87 MSB 0, LSB 87 |
0-3 |
PRESSURE
| Control | CC | NRPN | Values |
|---|---|---|---|
PRESSURE FILTERpressure_filter |
86 | 0-1 | |
PRESSURE LFOpressure_lfo |
87 | 0-1 | |
AFTERTOUCH > FILTERaftertouch_filter |
38 MSB 0, LSB 38 |
0-1 | |
AFTERTOUCH > AMPaftertouch_amp |
39 MSB 0, LSB 39 |
0-1 |
Performance
| Control | CC | NRPN | Values |
|---|---|---|---|
Mod Wheelmod_wheel |
1 | 0-127 | |
Breath Controllerbreath_controller |
2 | 0-127 Sent, never received |
|
Foot Controllerfoot_controller |
4 | 0-127 | |
Bank Selectbank_select |
32 | 0-127 | |
Damper pedaldamper_pedal |
64 | 0-127 | |
PITCH WHEEL RANGEpitch_wheel_range |
70 | 86 MSB 0, LSB 86 |
0-11 |
Global
| Control | CC | NRPN | Values |
|---|---|---|---|
MASTER VOLUMEmaster_volume |
7 | 0-120 | |
GLIDE RATEglide_rate |
26 | 13 MSB 0, LSB 13 |
0-120 |
NOISE LEVELnoise_level |
29 | 16 MSB 0, LSB 16 |
0-120 |
VINTAGEvintage |
85 | 37 MSB 0, LSB 37 |
0-127 |
Global parameters
| Control | CC | NRPN | Values |
|---|---|---|---|
TRANSPOSEtranspose |
4096 MSB 32, LSB 0 |
0-24 | |
MIDI CHANNELmidi_channel |
4097 MSB 32, LSB 1 |
0-16 | |
PARAM XMITparam_xmit |
4098 MSB 32, LSB 2 |
0-2 | |
PARAM RCVparam_rcv |
4099 MSB 32, LSB 3 |
0-2 | |
MIDI CONTROLmidi_control |
4100 MSB 32, LSB 4 |
0-1 | |
MIDI SYSEXmidi_sysex |
4101 MSB 32, LSB 5 |
0-1 | |
MIDI OUTmidi_out |
4102 MSB 32, LSB 6 |
0-3 | |
LOCAL CONTROLlocal_control |
4103 MSB 32, LSB 7 |
0-2 | |
POT MODEpot_mode |
4104 MSB 32, LSB 8 |
0-2 | |
SUSTAIN MODEsustain_mode |
4105 MSB 32, LSB 9 |
0-1 | |
PEDAL MODEpedal_mode |
4106 MSB 32, LSB 10 |
0-1 | |
ALT TUNINGSalt_tunings |
4107 MSB 32, LSB 11 |
0-15 | |
VEL RESPONSEvel_response |
4108 MSB 32, LSB 12 |
0-7 | |
AFTERTOUCH RESPONSEaftertouch_response |
4109 MSB 32, LSB 13 |
0-7 |
Where these facts come from
Source documents
- Prophet-5 MIDI Implementation, 1.4, dated 11 March 2021, its MIDI implementation, read on 4 October 2026 (the file read).
- Prophet-5 User's Guide, 1.3, dated 24 February 2021, its user manual, read on 4 October 2026 (the file read).
- Prophet-5/10 OS 2.1.0 Addendum, 2.1.0, dated 3 May 2025, its firmware addendum, read on 4 October 2026 (the file read).
- Prophet-5/10 OS 2.0 Addendum, 2.0, dated 7 September 2021, its firmware addendum, read on 4 October 2026 (the file read).
- Prophet-10 User's Guide, 1.4, dated 24 February 2021, its user manual, read on 4 October 2026 (the file read).
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.