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.
Waldorf Protein MIDI implementation
The MIDI implementation of the Waldorf Protein: what it answers to, and the 6 controls it offers, on firmware 1.02.
At a glance
- Firmware
- This page describes firmware 1.02.
- MIDI channel
- Not recorded.
- Modes
- Single Mode.
Layered.
Round Robin.
Random Robin.
Midi Split. - MPE
- Received: its voices are spread across its MIDI channels, a note to each.
- Parts
- Layer, 4 of them: on 4 MIDI channels in a row from the base, taking notes, in Midi Split only.
- Voices
- 8, or 1 as set on the instrument, shared by the parts that play notes.
- Note range
- Not recorded.
- Velocity
- Received. Release velocity is received.
- Aftertouch
- Channel pressure and polyphonic, each answered.
- Pitch bend
- How far it bends is not recorded, and the range can be changed.
- Program change
- 360 presets. Whether a program change is received or sent is not recorded.
- MIDI clock
- Received.
- Start and stop
- Not recorded.
- Control change
- Assigned by the player, apart from the 6 controls below.
- NRPN
- Not recorded.
- 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("waldorf/protein") has loaded them.
Modulation sources with a fixed number
| Control | CC | Values |
|---|---|---|
Mod Wheelmod_wheel |
1 | 0-127 Received, never sent |
Breathbreath |
2 | 0-127 Received, never sent |
Expressionexpression |
11 | 0-127 Received, never sent |
Pedalpedal |
64 | 0-127 Received, never sent |
MPE Ympe_y |
74 | 0-127 Received, never sent |
Without a group
| Control | CC | Values |
|---|---|---|
MIDI Bank Select (LSB)bank_select_lsb |
32 | 0-127 Received, never sent |
Where these facts come from
Source documents
- Protein Manual, 2, dated 1 January 2026, its user manual, read on 6 October 2026 (the file read).
- Changelog - Protein, dated 15 January 2026, its release notes, read on 6 October 2026 (the file read).
- Waldorf Protein Specifications, dated 17 November 2025, specification, read on 6 October 2026 (the file read).
- Protein Bedienungsanleitung, 1, dated 1 November 2025, its user manual, read on 6 October 2026 (the file read).
- FAQ Protein – Waldorf Music, its download page, read on 6 October 2026 (the file read).
How they were read
FOUR DOCUMENTS, ONE OF WHICH THE DOWNLOADS PAGE DOES NOT NAME, AND THE MIDI IS SPREAD ACROSS THREE OF THEM. See the comment above the definition for the glossary trap and for which document settles what.
WHERE EACH FACT COMES FROM, BECAUSE NO ONE DOCUMENT HOLDS THEM. The manual (71 sheets, Rev. 2, January 2026) has the settings on p. 51, the sync and MPE settings on p. 52, the MPE mapping and its one controller number on p. 53, the learn procedure on p. 55 and fourteen of the modulation sources on p. 56, in the Source column of its modulation table; the layers and their modes are on pp. 16 to 19, the shared voices on p. 16, the pitch bend on p. 26, the keyboard tracking reference on p. 29, the velocity on p. 32, the sysex dumps on p. 20 and the glossary on pp. 62 to 67. The changelog (1 sheet) has the firmware, the preset count and the one controller number recognised for choosing a preset. The specification sheet (2 sheets) has the voice count and the layer modes in the maker's own summary. And the German manual is cited for a comparison rather than for a fact.
THE SPECIFICATION SHEET IS STALE AND THE CHANGELOG PROVES IT, WHICH IS WHY presets IS 360 AND NOT 250. The specification says "Capacity of 250 patch memory slots" (specifications p. 2); firmware 1.01 "Increased preset storage from 250 to 360" (changelog) and 1.02 added "Recognizing MIDI Bank Select (LSB aka CC32) messages to choose from all 360 slots" (changelog). That is not two statements contradicting each other - the rule novation/peak established, where neither is carried - it is one statement superseded by a dated one, and the dates are in the documents: the specification sheet was made on 17 November 2025 and 1.01 shipped in December. So the later figure is carried and the earlier is recorded here, because a consumer reading the maker's own specification page today is told 250.
AND THE ONLY STATEMENT ABOUT CHOOSING A PRESET OVER MIDI NAMES BANK SELECT RATHER THAN PROGRAM CHANGE, so program_change.receives is left unrecorded while presets is not. CC 32 alone cannot reach 360 slots and program change must be received too - but the documents never say so, and the only page that discusses program change is the glossary. An inference is not a citation, so the count is recorded, the message that is named is recorded as a control, and the one that must also be true is not claimed.
HOW ITS DOCUMENTS ARE ADDRESSED, WHICH IS THE HABIT THIS MAKER DOES KEEP. Every file comes from a share on the maker's own Nextcloud - downloads.waldorfmusic.com/cloud/index.php/s/<token> - and the five other Waldorfs in this corpus are reached the same way, so six Waldorfs here and one arrangement. Two things worth knowing about it: each share fetched for this file served a .zip rather than the file, holding one folder and one or two PDFs, and the token says nothing about what it serves, so an address is known only by what comes back.
NOT RECORDED: the channel range, for the reason in the comment above - the only 1 through 16 in 71 sheets is the glossary's. midi.mode, the chart's Mode row, there being no implementation chart in any document. The transport, which no document mentions in any spelling. The note range, whose only statement is the glossary's "between 0 and 127" (manual p. 65) about MIDI in general. NRPN, which appears nowhere at all - not even as a glossary entry, which is a silence and not a checked absence. control_change was in this list until 2026-10-12 and is learned now: see the comment above the definition.