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.

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 Wheel
mod_wheel
1 0-127
Received, never sent
Breath
breath
2 0-127
Received, never sent
Expression
expression
11 0-127
Received, never sent
Pedal
pedal
64 0-127
Received, never sent
MPE Y
mpe_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

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.