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 Fourm MIDI implementation
The MIDI implementation of the Sequential Fourm: what it answers to, and the 100 controls it offers.
At a glance
- Firmware
- Not recorded.
- MIDI channel
- Any one of 1 to 16.
- Voices
- 4.
- Note range
- Not recorded.
- Velocity
- Sent and received.
- Aftertouch
- Channel pressure and polyphonic, each answered. It sends aftertouch too.
- Pitch bend
- How far it bends is not recorded, and the range can be changed.
- Program change
- Received and sent, with 512 presets.
- MIDI clock
- Sent and received.
- Start and stop
- Sent.
- Control change
- 92 controls, in the table below.
- NRPN
- Supported, and preferred to CC. 90 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/fourm") has loaded them.
| Control | CC | NRPN | Values |
|---|---|---|---|
Bank Select MSBbank_select_msb |
0 | 0-3 | |
Mod Wheelmod_wheel |
1 | 0-127 | |
Breath Controllerbreath_controller |
2 | 0-127 | |
Pitch Bend_Rangepitch_bend_range |
3 | 26 MSB 0, LSB 26 |
0-12 |
Foot Controllerfoot_controller |
4 | 0-127 | |
Data Entry MSBdata_entry_msb |
6 | 0-127 | |
Master Volumemaster_volume |
7 | 0-127 | |
Expression Pedalexpression_pedal |
11 | 0-127 | |
Osc1_Octaveosc1_octave |
12 | 1 MSB 0, LSB 1 |
0-4 |
Osc1_Freqosc1_freq |
13 | 3 MSB 0, LSB 3 |
0-127, or 0-1400 by NRPN |
Osc1_Syncosc1_sync |
14 | 7 MSB 0, LSB 7 |
0-1 |
Osc1_Sawosc1_saw |
15 | 9 MSB 0, LSB 9 |
0-1 |
Osc1_Pulseosc1_pulse |
16 | 11 MSB 0, LSB 11 |
0-1 |
Osc1_PWosc1_pw |
17 | 13 MSB 0, LSB 13 |
0-127 |
Osc1_Levelosc1_level |
18 | 15 MSB 0, LSB 15 |
0-127 |
Osc2_Octaveosc2_octave |
19 | 2 MSB 0, LSB 2 |
0-6 |
Osc2_Freqosc2_freq |
20 | 5 MSB 0, LSB 5 |
0-127, or 0-1400 by NRPN |
Osc2_Triosc2_tri |
21 | 8 MSB 0, LSB 8 |
0-1 |
Osc2_Sawosc2_saw |
22 | 10 MSB 0, LSB 10 |
0-1 |
Osc2_Pulseosc2_pulse |
23 | 12 MSB 0, LSB 12 |
0-1 |
Osc2_PWosc2_pw |
24 | 14 MSB 0, LSB 14 |
0-127 |
Osc2_Levelosc2_level |
25 | 16 MSB 0, LSB 16 |
0-127 |
Noise_Onnoise_on |
26 | 19 MSB 0, LSB 19 |
0-1 |
Noise_Levelnoise_level |
27 | 20 MSB 0, LSB 20 |
0-127 |
Noise_Typenoise_type |
28 | 21 MSB 0, LSB 21 |
0-2, or 0-3 by NRPN |
Unison_Onunison_on |
29 | 58 MSB 0, LSB 58 |
0-1 |
Unison_Voicesunison_voices |
30 | 59 MSB 0, LSB 59 |
0-4 |
Unison_Detuneunison_detune |
31 | 60 MSB 0, LSB 60 |
0-127 |
Bank Select LSBbank_select_lsb |
32 | 0-3 | |
Glide_Onglide_on |
33 | 23 MSB 0, LSB 23 |
0-1 |
Glide_Rateglide_rate |
34 | 25 MSB 0, LSB 25 |
0-127 |
Glide Modeglide_mode |
35 | 24 MSB 0, LSB 24 |
0-3 |
KeyModekeymode |
36 | 83 MSB 0, LSB 83 |
0-2 |
Env Retrigenv_retrig |
37 | 52 MSB 0, LSB 52 |
0-1 |
Data Entry LSBdata_entry_lsb |
38 | 0-127 | |
Filter_Cutofffilter_cutoff |
39 | 27 MSB 0, LSB 27 |
0-127, or 0-1023 by NRPN |
Filter_Resfilter_res |
40 | 29 MSB 0, LSB 29 |
0-127, or 0-255 by NRPN |
Filter_KeyTrackfilter_keytrack |
41 | 30 MSB 0, LSB 30 |
0-1 |
Filter_KeyAmtfilter_keyamt |
42 | 31 MSB 0, LSB 31 |
0-2, or 0-127 by NRPN |
FiltEnv_Attackfiltenv_attack |
43 | 40 MSB 0, LSB 40 |
0-127, or 0-255 by NRPN |
FiltEnv_Decayfiltenv_decay |
44 | 42 MSB 0, LSB 42 |
0-127, or 0-255 by NRPN |
FiltEnv_Sustainfiltenv_sustain |
45 | 44 MSB 0, LSB 44 |
0-127 |
FiltEnv_Releasefiltenv_release |
46 | 46 MSB 0, LSB 46 |
0-127, or 0-255 by NRPN |
FiltEnv_VelOnfiltenv_velon |
47 | 48 MSB 0, LSB 48 |
0-1 |
FiltEnv_VelAmtfiltenv_velamt |
48 | 50 MSB 0, LSB 50 |
0-127 |
FiltEnv_Amtfiltenv_amt |
49 | 53 MSB 0, LSB 53 |
0-127, or 0-255 by NRPN |
AmpEnv_Attackampenv_attack |
50 | 41 MSB 0, LSB 41 |
0-127, or 0-255 by NRPN |
AmpEnv_Decyampenv_decy |
51 | 43 MSB 0, LSB 43 |
0-127, or 0-255 by NRPN |
AmpEnv_Sustainampenv_sustain |
52 | 45 MSB 0, LSB 45 |
0-127 |
AmpEnv_Relaseampenv_relase |
53 | 47 MSB 0, LSB 47 |
0-127, or 0-255 by NRPN |
AmpEnv_VelOnampenv_velon |
54 | 49 MSB 0, LSB 49 |
0-1 |
AmpEnv_VelAmtampenv_velamt |
55 | 51 MSB 0, LSB 51 |
0-127 |
LFO_Synclfo_sync |
56 | 33 MSB 0, LSB 33 |
0-1 |
LFO_Freqlfo_freq |
57 | 34 MSB 0, LSB 34 |
0-127, or 0-255 by NRPN |
LFO_FreqSynclfo_freqsync |
58 | 35 MSB 0, LSB 35 |
0-15 |
LFO_Shapeslfo_shapes |
59 | 36 MSB 0, LSB 36 |
0-15 |
LFO_RevSawlfo_revsaw |
60 | 37 MSB 0, LSB 37 |
0-1 |
LFO_SHTypelfo_shtype |
61 | 38 MSB 0, LSB 38 |
0-5 |
Arp_Onarp_on |
65 | 110 MSB 0, LSB 110 |
0-1 |
Arp_Modearp_mode |
66 | 111 MSB 0, LSB 111 |
0-7 |
Arp_Rangearp_range |
67 | 112 MSB 0, LSB 112 |
0-2 |
Arp_Repeatarp_repeat |
68 | 113 MSB 0, LSB 113 |
0-3 |
Arp_Relatcharp_relatch |
69 | 114 MSB 0, LSB 114 |
0-1 |
Arp_Beatsyncarp_beatsync |
70 | 115 MSB 0, LSB 115 |
0-1 |
Seq_Resetseq_reset |
71 | 116 MSB 0, LSB 116 |
1-64, or 0-1 by NRPN |
Seq_PlayModeseq_playmode |
72 | 117 MSB 0, LSB 117 |
0-2, or 0-3 by NRPN |
Seq_ModDestseq_moddest |
73 | 118 MSB 0, LSB 118 |
0-10, or 0-6 by NRPN |
Brightnessbrightness |
74 | 0-127 | |
ModSrc_FilterEnvRoutemodsrc_filterenvroute |
75 | 65 MSB 0, LSB 65 |
0-2 |
ModSrc_OscBRoutemodsrc_oscbroute |
76 | 66 MSB 0, LSB 66 |
0-2 |
ModSrc_LFORoutemodsrc_lforoute |
77 | 67 MSB 0, LSB 67 |
0-2 |
ModSrc_FilterEnvAmtmodsrc_filterenvamt |
78 | 68 MSB 0, LSB 68 |
0-127, or 0-254 by NRPN |
ModSrc_OscBAmtmodsrc_oscbamt |
79 | 69 MSB 0, LSB 69 |
0-127, or 0-254 by NRPN |
ModSrc_LFOAmtmodsrc_lfoamt |
80 | 70 MSB 0, LSB 70 |
0-127, or 0-254 by NRPN |
ModDst_FreqASrcRoutemoddst_freqasrcroute |
81 | 72 MSB 0, LSB 72 |
0-3 |
ModDst_FreqBSrcRoutemoddst_freqbsrcroute |
82 | 73 MSB 0, LSB 73 |
0-3 |
ModDst_PWASrcRoutemoddst_pwasrcroute |
83 | 74 MSB 0, LSB 74 |
0-3 |
ModDst_PWBSrcRoutemoddst_pwbsrcroute |
84 | 75 MSB 0, LSB 75 |
0-3 |
ModDst_CutoffSrcRoutemoddst_cutoffsrcroute |
85 | 76 MSB 0, LSB 76 |
0-3 |
ModDst_AmpSrcRoutemoddst_ampsrcroute |
86 | 77 MSB 0, LSB 77 |
0-3 |
ModDst_LFOFreqSrcRoutemoddst_lfofreqsrcroute |
87 | 78 MSB 0, LSB 78 |
0-3 |
ModDst_LFOAmtSrcRoutemoddst_lfoamtsrcroute |
88 | 79 MSB 0, LSB 79 |
0-3 |
ModSrc_AftertouchAmtmodsrc_aftertouchamt |
89 | 71 MSB 0, LSB 71 |
0-127, or 0-254 by NRPN |
ModDst_ATDest1moddst_atdest1 |
92 | 80 MSB 0, LSB 80 |
0-3 |
ModDst_ATDest2moddst_atdest2 |
93 | 81 MSB 0, LSB 81 |
0-3 |
ModDst_ATDest3moddst_atdest3 |
94 | 82 MSB 0, LSB 82 |
0-3 |
Voice_Volumevoice_volume |
95 | 56 MSB 0, LSB 56 |
0-127 |
Clock_BPMclock_bpm |
102 | 87 MSB 0, LSB 87 |
15-127, or 30-250 by NRPN |
Clock_Divclock_div |
103 | 88 MSB 0, LSB 88 |
0-10 |
Scalescale |
104 | 84 MSB 0, LSB 84 |
0-65 |
Transposetranspose |
105 | 85 MSB 0, LSB 85 |
0-4 |
Categorycategory |
106 | 86 MSB 0, LSB 86 |
0-16 |
Feedback Onfeedback_on |
17 MSB 0, LSB 17 |
0-1 | |
Feedback Levelfeedback_level |
18 MSB 0, LSB 18 |
0-127 | |
Amp Env Amtamp_env_amt |
54 MSB 0, LSB 54 |
0-255 | |
Vintagevintage |
57 MSB 0, LSB 57 |
0-127 | |
Unison Note 1unison_note_1 |
61 MSB 0, LSB 61 |
0-60 | |
Unison Note 2unison_note_2 |
62 MSB 0, LSB 62 |
0-60 | |
Unison Note 3unison_note_3 |
63 MSB 0, LSB 63 |
0-60 | |
Unison Note 4unison_note_4 |
64 MSB 0, LSB 64 |
0-60 |
Where these facts come from
Source documents
- Fourm MIDI Implementation, V1.1, its MIDI implementation, read on 5 October 2026 (the file read).
- Fourm User Guide, 1.2, its user manual, read on 5 October 2026 (the file read).
How they were read
Fourm MIDI Implementation v1.1, fifteen pages, which is this maker's own document for this instrument alone and names no other product in it. The User Guide is cited where the implementation is silent or wrong about itself.
THE IMPLEMENTATION CARRIES BOTH A CONTROLLER TABLE AND AN NRPN TABLE, and a global decides which is used: the controllers "are transmitted when MIDI Param Send is set to CC, and recognized/received when MIDI Param Receive is set to CC" (midi p. 5), and the NRPNs "are transmitted when MIDI Parameter Send is set to NRPN in globals, and received when MIDI Parameter Receive is set to NRPN in globals" (midi p. 7). Each direction is independently one of NRPN, CC or off, so the two tables are never both live in one direction. The maker prefers NRPN: "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" (guide p. 14).
The controller table is on midi pp. 5-6 and the NRPN table on midi pp. 8-10, with the global parameters on midi p. 11 and the control NRPN on midi p. 12.
ALL 128 CONTROLLER NUMBERS ARE ACCOUNTED FOR. 92 carry a parameter and a range; 27 print --- in both columns; 8 are the channel mode messages, which carry a name and no range at all and are not parameters; and one, 112, is Editor_Byte with its range left as ---, an editor handshake rather than anything a player sets. 92 plus 27 plus 8 plus 1 is 128.
Of those 92, 82 have an NRPN twin and 10 do not - and the ten are exactly the standard MIDI controllers, bank select, mod wheel, breath, foot, data entry, volume, expression and brightness, which are not program parameters and so have no place in a program parameter table. Eight further parameters are reachable by NRPN alone: the two feedback controls, the amplifier envelope amount, Vintage, and the four unison notes. So this file holds 100 controls for 92 controller numbers.
TWO READERS EXTRACTED BOTH TABLES INDEPENDENTLY, WITH DIFFERENT TOOLS ON DIFFERENT INTERPRETERS, AND AGREE CELL FOR CELL ON ALL 128 ROWS. The second worked from the text matrix of every chunk rather than from line order, which is what makes the agreement worth something: the two methods fail differently.
AND THEY AGREE BECAUSE OF ONE ASSERTION. Each sheet of the controller table opens with its own folio as a bare line, and the table happens to span sheets 5 and 6 - so a reader taking every number as a row gets a second controller 5 and a controller 6 whose parameter is the running head, silently overwriting the real Data Entry MSB. The numbers that would have been wrong are exactly 5 and 6. Both readers hit it and both caught it.
WHERE THE TWO TABLES DISAGREE ABOUT SETTINGS RATHER THAN RESOLUTION, and this is the list: Noise Type is 0-2 by controller and 0-3 by NRPN; Filter Key Amount is 0-2 and 0-127; Sequencer Reset is 1-64 and 0-1; Sequencer Play Mode is 0-2 and 0-3; Sequencer Mod Destination is 0-10 and 0-6; and Clock BPM is 15-127 and 30-250. Neither table is reliably the right one - the user guide settles four in the controller's favour and two in the NRPN's - so each is recorded both ways and none is quietly corrected.
THE CONTROLLER TABLE UNDERSTATES WHAT THE INSTRUMENT ANSWERS TO. It marks 96 to 101 as assigned nothing, and the NRPN section uses all six of them - 98 and 99 for the parameter number, 96 and 97 for data increment and decrement, 100 and 101 for the registered parameter number. They are not spare, whatever the table says, and nothing here publishes them as controls.
NOT RECORDED: mode. The document carries no MIDI implementation chart.
THE DOCUMENT CONTRADICTS ITSELF ABOUT HOW MANY PROGRAMS A BANK HOLDS, THREE WAYS. Program change is "0-127 for Programs 1-127 within current Bank" (midi p. 2) on one page and "0-127 for Programs 00-128 within current Bank" (midi p. 3) on the next, which are 127 and 129 programs for 128 values. The user guide gives the instrument 512 programs in four banks, so 128 a bank, and presets records the 512 rather than either of the two wrong statements.
AND ABOUT HOW BANKS ARE NUMBERED, ALSO THREE WAYS: the controller table gives bank select 0-3 both halves, the received table says 1 to 4, and the transmitted table says 0 to 9, which matches nothing. The system exclusive sections say 0 to 3 twice, which agrees with the controller table, so the controls below carry 0-3 and the account records the rest.
NOT RECORDED: a bend range in semitones. The range is a program parameter rather than a fixed property - controller 3 and NRPN 26, both 0-12 - so programmable says it is the player's and no figure is given for a default, which the document does not state.
POLYPHONIC AFTERTOUCH IS RECEIVED, AND THE TRANSMITTED TABLE DOES NOT LIST IT, WHICH IS REMARKABLE FOR THIS INSTRUMENT. The received table carries both polyphonic key pressure and channel pressure; the transmitted table carries channel pressure alone. This is a synthesiser whose guide's first chapter opens by calling it a "compact and powerful 4-voice poly synth equipped with a Tactive™ polyphonic aftertouch keybed" (guide p. 1), so either it cannot send over MIDI what its own keybed generates, or the transmitted table has an omission. The document says what it says and this file records it; it cannot be settled by testing, because this instrument is not on the rig.
NOT RECORDED: transport is recorded as sends and the two statements behind it disagree. The clock mode setting says "Out: MIDI Clock + Start and Stop are sent" (midi p. 1), while the System Real-Time Messages table lists one row, the timing clock, and neither start nor stop. A direct sentence is better evidence than an omission from a list, so sends is recorded and the disagreement is written here rather than resolved.
NOT RECORDED: per_voice_channels. The document says nothing about MPE.
THE DOCUMENT HAS TWO FOOTNOTE MARKERS AND NO FOOTNOTES. MIDI Param Send and MIDI Param Receive carry an asterisk and a dagger in the globals table, and those two marks are the only ones in fifteen pages: the text they point at is not in the document. Whatever qualifies the switch between controllers and NRPNs was cut, and it is exactly the thing a reader of this file would want.
One more sign that this document was adapted from a sibling's: it says it "lists Fourm program parameters 0-352" (midi p. 8) and the table it introduces runs 1 to 726 and has no row 0. Neither bound is right, and no other product is named anywhere in the file.