Custom MIDI Control Surface (OSC) and Gig Performer

The idea behind it was to create a control surface capable of managing multiple environments from a single device: DAWs, generic MIDI devices, and eventually a dedicated Gig Performer profile via OSC.

The controller includes:

  • 4 Absolute encoders
  • 5 Faders
  • 8 RGB buttons
  • 16 Global buttons per profile
  • 1 Encoder (settings / jog)
  • 1 Mode button
  • 1 Bank button
  • 4 independent MIDI ports
  • OSC over WiFi support
  • 4 logical banks
  • Multiple operating profiles (DAW, MIDI1, MIDI2, MIDI3 and GP)

Profiles and banks can also be switched via MIDI CC messages, allowing mode changes to be automated directly from rackspaces

RGB LED colors are also fully customizable through OSC messages, allowing dynamic visual feedback depending on context or state.

The controller architecture is split into two independent modules.

The main firmware runs on a Teensy 4.1 using the Control Surface framework for MIDI processing, banking, and hardware management.

OSC communication runs on an ESP32 module over WiFi. Both systems communicate through a custom serial protocol that acts as a bridge between OSC and the controller engine.


Specs

  • MIDI + OSC (WiFi)
  • Display 2.8" TFT (ILI9341)
  • 4 independent profiles stored in non-volatile memory (EEPROM)
  • Flexible MIDI routing: each control can be independently assigned to any of the 4 MIDI ports
  • OSC integration designed for Gig Performer (not general-purpose OSC)
  • Bankable control system ( BANK 1..4)
  • Supports Mackie Control for generic DAW
  • ESP32 embedded web interface for network configuration:
    • Static / DHCP IP setup
    • OSC server configuration
    • Firmware update via OTA


Each profile supports up to 4 banks.

Each bank contains:

  • 4 encoders
  • 4 faders
  • 4 buttons

Total Bankable Controls (per profile)

  • 16 encoders
  • 16 faders
  • 16 buttons

Global Controls (non-bankable)

In addition to bankable controls, each profile also provides:

  • 16 fully configurable global buttons

GP integration

MIDI Surface 4 includes dedicated OSC integration for Gig Performer, with a set of predefined actions designed for live navigation and performance control.

  • View switching
  • Setlist and song navigation
  • Rackspace and variation selection
  • Song part control
  • BPM read
  • Snapshot operations
  • Transport-related staatus
  • Refresh and synchronization commands

Rackspace view

Song view

Setlist view

Songlist view

Midi view

Supported Action Categories

Views

  • Panel View
  • Wiring View
  • Setlist View

Navigation

  • Next / Previous Rackspace
  • Next / Previous Variation
  • Next / Previous Song
  • Next / Previous Part

Direct Selection/Command

  • Select Setlist
  • Select Song
  • Switch to Rackspace
  • Switch to Part
  • Tuner View
  • Global Rackspace visibility control
  • Play

Each profile can be independently configured and customized, allowing the controller to behave as a completely different control surface depending on the workflow.

Configurable parameters include:

  • MIDI message type:

    • Note
    • Control Change (CC)
    • Program Change (PC/MSB/LSB)
    • Mackie Control
    • Custom Actions
  • MIDI channel assignment

  • MIDI address / controller number

  • Velocity

  • MIDI port routing

  • Profile-specific behavior

Custom Actions are also available for Gig Performer through OSC integration.

Currently implemented GP actions include:

  • Go to Rackspace
  • Go to Song
  • Next Variation
  • Previous Variation
  • Next Song Part
  • Previous Song Part
  • Open Panel View
  • Open Global Rackspace
  • Open Wiring View
  • Record

Hardware

  • Teensy 4.1
  • ESP32-WROOM32
  • MCP23017 (I/O expansion)
  • PCA9685 (LED driver)
  • 2.8" TFT (ILI9341)

I spent several months experimenting, starting with breadboard prototypes, selecting components, and eventually designing and producing a custom PCB. The hardware design, PCB, and enclosure were developed using EasyEDA and manufactured through JLCPCB.

Man, whatever you do is simply awesome! :beers:

Yes, this is really impressive! Would you consider sharing or selling the design so others could build it? How much did all the components cost?

My intention is to share it, but I haven’t done so yet due to time constraints. Selling it would require a level of commitment and responsibility that I don’t feel ready to take on. There are still a few corrections to be made to the PCB, so I’d need to create a new revision, and at the moment I can’t invest the time or money into that.

The overall cost depends on a few factors. The most expensive parts were the Teensy (around €50) and the PCB itself. I ordered a batch of 5 boards (the minimum quantity), with some components pre-assembled, which cost about €120. I actually still have four spare PCBs available.

I’d estimate the total cost per unit to be somewhere around €150–180. I’ll publish the repository link in this section once I’ve organized everything a bit better.

Awesome, thanks Dome. Very generous of you.

WOWSER! Congrats – well done.

I’ve been using an Akai MidiMix ($110) and a Streamdeck XL ($250) to control stuff in GP – but this goes a MAGNITUDE further.

I looked at Softube Console 1 Channel and/or Fader MK III’s, but they’re too rich for my blood – like $900-$1100. If you could get someone to produce this at a price level of $500ish, I’d buy one in a heartbeat!

Maybe you could partner with someone to git-er-dun via a KickStarter?