Cycling '74's Max is a very powerful piece of software, and it supports MPE! There are many ways to use the Seaboard with Max. This tutorial will show you how to use Max to receive, interpret, and visually display the Seaboard's MPE data.
Download this tutorial's Max patch, seaboardpatch-00-maxpat, attached below
Step 1: Open ROLI Dashboard
First, we want to make sure that the Seaboard is in MPE mode and its settings match what Max will be expecting. In ROLI Dashboard:
- Set Use MPE to On.
- Set Channel Range from 2 – 16.
- The Global Channel should be 1.
You may leave the other settings at their defaults, making sure that they match those in the image below.
Step 2: Receive MPE data in Max
Max 7.2 introduced new objects allowing easy integration of MPE-enabled devices like the Seaboard. These objects include mpeparse, polymidiin, and mpeconfig. Let's see how we can use these objects to receive and interpret the Seaboard's MPE data within Max.
First, to receive MIDI data in Max, create a new midiin object box. midiin listens to a specified MIDI input port and then outputs the raw MIDI data.
Next, create a new mpeparse object box. mpeparse interprets raw MPE data and then separates it into standard MIDI messages. Adding the arguments "@hires 1" tells mpeparse to output pitch-bend data – from the Seaboard's Glide dimension – as high-resolution floating-point numbers from -1.0 – 1.0. Connect the output of midiin to the input of mpeparse.
Now, when you lock your patcher, double-clicking on the midiin object will produce a pop-up menu allowing you to select the Seaboard as your MIDI input device. Alternatively, by adding a button, a midiinfo object box, and a umenu, the umenu will present a drop-down menu showing the available MIDI input devices.
Note: to have midiin default to an input device with a specific name, we can use the "@name" argument followed by part of the name of the MIDI device we'd like to use. In this case, we want midiin to use the Seaboard as the default input device, so we can add the arguments "@name Seaboard" to our midiin object box:
Next, to make sure that Max is receiving MPE data from the Seaboard, let's connect the outputs of mpeparse to the right inputs of some message boxes.
As the comment boxes indicate, mpeparse outputs – from left to right – Pitch, Velocity, and Release Velocity; Poly Key Pressure; Control Change (CC) number and value; Program Change; Aftertouch; and Pitch Bend. The next several outputs are Voice number, Zone First Channel, and Zone Index, but we won't worry about them for now. Finally, mpeparse's rightmost output is a raw mpeevent message, which will allow polymidiin to interpret our MPE data.
Make sure your Seaboard is turned on and connected and that you've selected it as the MIDI input device in your Max patch. Play the Seaboard, and you should now see the message boxes display the Seaboard's MIDI data. You'll notice that if you are using the Dashboard settings listed above:
- Strike is transmitted as Velocity
- Press is transmitted as Aftertouch
- Glide is transmitted as Pitch Bend
- Slide is transmitted as CC 74
- Lift as Release Velocity
- Data from the Preset Shift buttons or SoundDial is transmitted as Program Change data
If you wish, you can simply connect the rightmost (mpeevent) output of mpeparse to a vst~ object loading Equator or other MPE-compatible VST of your choice.
Step 3: Receive and display the Seaboard RISE's other MIDI data in Max
The Seaboard RISE transmits more MIDI data than just from the Keywaves. It also sends MIDI data from the Touch Faders (when in Expression mode), the XY Touchpad, the Octave Shift buttons, and the pedal (if connected). The data from these sensors is transmitted using MIDI Control Change numbers. By default the Octave Shift buttons are transmitted using CC 6; the pedal CC 64; the left Touch Faders CC 107, CC 109, and CC 111 (from left to right respectively); and the XY Touchpad CC 113 and CC 114. To separate the data from these sensors, let's connect the CC output (the third from the left) of mpeparse to the input of a route object with the arguments 6 64 107 109 111 113 114. The route object will send the data from CC 6 (from the Octave Shift buttons) from its leftmost output, the data from CC 64 (from the pedal) from its second leftmost output, and so forth.
Now we can choose how we'd like Max to display this information visually. In the graphic below, we use live.slider objects to display the information from the Touch Faders and pedal, a nodes object to display the XY Touchpad information, and a message box for the Octave Shift buttons.
In this tutorial we've learned how to use Max to receive, interpret, and visually display the Seaboard's MPE data. In our next lesson, we will learn how to connect this data to a simple yet expressive synthesiser.
Extra: Controlling the RISE's Expression Touch Faders
When the RISE's Touch Faders are in Expression mode, we can control them from Max by sending the RISE a SysEx message. We can do this by giving the sxformat object a specific set of arguments and connecting it to midiout:
After making this patcher, put your RISE into Expression mode by pressing the Power / Mode button until its light is cyan. Now, move the slider objects in your patcher and see how the RISE's Touch Faders respond.