MIDI Implementation details
This page goes into detail about how MIDI and MPE support is implemented in the SSP’s software at the time of writing this.
MIDI Modes and logic
The SSP’s software supports both MPE and non-MPE MIDI controllers connected via USB. After connecting your MIDI controller (using the middle USB port), you should go to the global menu and use the cursor-right key to browse to the third page where you will find the MPE toggle button which you can toggle using one of the 8 soft keys.
The MPE toggle setting is automatically stored in the preset when you write your preset to disk, and it is automatically recalled when you load your preset.
If you have a normal MIDI keyboard, turn the MPE toggle off. If you have an MPE controller turn it on. Below is an explanation about how MIDI data is handled in these two different MIDI modes.
MIDI Channels and ports
Incoming notes are accepted on any MIDI channel (omni) regardless of using MPE or non-MPE mode, and there is only one global MIDI in device currently supported. So you cannot connect multiple USB MIDI devices via a USB hub. You cannot configure the MIDI functionality to only use certain channels at the moment. It listens to channels 1-16 for notes.
MIDI Note to Voice assignment
Notes are automatically assigned to voices in a round-robin fashion regardless of MPE or non-MPE mode. There are 16 voices available. You access the MIDI data using MIDI modules which can be inserted in the patcher grid. You can use multiple MIDI modules and they can be part of different voices (use the V1-V16 toggles on the P-Page of the MIDI module, after selecting the MIDI module in the grid).
To use a MIDI module it has to be part of at least one voice, otherwise nothing happens. So make sure to go to the P-page of the MIDI module after inserting it to make it part of a voice. You can use the V1-V16 toggles assigned to the 8 soft keys to do this. Please refer to the 4-voice wavetable oscillator demo preset we shipped with the software for an example of how to use the MIDI module in a practical situation.
MIDI Module Outputs
Pitch: this is a pitch signal, which can be used with pitch inputs of other modules in the grid. The pitch signal is created using the MIDI note number and the pitch bend data.
Vel On: this is the note on velocity.
Vel Off: note off velocity.
Gate: a gate signal which goes high when a note on is received.
ATouch: aftertouch or channel pressure signal (see below).
CC74: MIDI controller #74, typically used with MPE controllers like the ROLI seaboard block.
CC1: MIDI mod wheel data.
CC7: MIDI volume knob data.
MIDI Module Inputs
Additionally the MIDI module has one input, which you can monitor on the P-page. The input has a simple frequency detector, which can help to tune your analogue oscillators. For example, you can send a pitch signal from the MIDI module out of the SSP using the OUT module, to your oscillator, then feed the output of the oscillator back into the MIDI module (using an INP module), and then you can tune your oscillator so it plays the frequency it should for the MIDI note you are playing.
MIDI Note Velocity
In MPE mode Midi notes with velocity 0 are treated as note-ons. In non-MPE mode they are treated as note offs.
MIDI pitch bend/wheel data
Pitch bend data is automatically added to MIDI note data to create the pitch output signal of the MIDI module.
In MPE mode pitch bend messages are applied per-note (voice), while in non-MPE mode it is applied across all notes/voices.
The pitch bend range is currently hard-coded / mapped to +/- 12 semitones. This might be useful info in case you need to configure your MPE controller.
Aftertouch data is always applied per-note (voice) regardless of MPE or non-MPE mode. Please see below for channel pressure which shares the aftertouch output.
MIDI Channel pressure
In MPE mode, channel pressure is applied per-note (voice) and is output as an aftertouch signal on the aftertouch output of the MIDI module (see above for output description).
In non-MPE mode, it is applied on all notes (voices) and is output as an aftertouch signal (see above).
In MPE mode, CCs are applied per-note (voice) and output out of the respective CC outputs (CC74, CC7 and CC1).
In non-MPE mode, they are applied across all notes (voices), output out of the respective CC outputs.
There is no additional MIDI module yet to access other CC numbers at the moment. We are looking into making a seperate MIDI CC module which would let you use any MIDI CC number as a signal in the patching grid.
Visualisations and Debugging
You can use the scopes in the network / patcher grid, when you highlight an input or ouput of the MIDI module (use encoders 3/4), to inspect the signals created from the incoming MIDI data. If you don’t see any action happening, make sure to verify that the MIDI module is part of a voice (see above). Otherwise nothing will be output out of the MIDI module outputs.