A MIDI hub for live hardware sets

All your MIDI gear,
in your hands.

Drum machines, grooveboxes, synths, your DAW. Plug the MIDI gear on your stage into MIDoRI and you control the tempo, the routing and the knobs from one touch screen in your hands. No bulky computer setup required.

Runs on off-the-shelf boards like the M5Stack Tab5 and CoreS3. Install from your browser.
KeyboardUSB SynthUSB DAW / PCUSB Drum machineMIDI (DIN) iPadBluetooth Sound moduleMIDI (DIN) MIDoRI

See MIDoRI in action

What MIDoRI can do

From setting up at soundcheck to the turns in your set.

MIDoRIUSBTRSBLEUSB hubDINiPad

All your gear, in one place

Connect up to 9 pieces of MIDI gear at once on the M5Stack Tab5.

  • USB MIDI gear (through a USB hub)4
  • Computer or USB-host gear (Ableton Push 3 standalone, MPC Live…)1
  • TRS / DIN (SAM2695 unit)1 port
  • Bluetooth (1 iPad / Mac + 2 BLE-MIDI devices)3

Up to 8 on the M5Stack CoreS3 (with USB set for gear; 5 with USB set for a computer or USB-host gear).

MIDoRI leadsMIDoRI♩=120DrumsSynthFollow externalPushMIDoRIDrumsSynth

Sync your MIDI gear, your way

MIDoRI is the clock master: tempo, start and stop line up across the rig, with tap tempo. Or let your Push or groovebox lead and pass its clock on.

Keysch1MIDoRICh Map1→2 · 1→10Synthch2Drumsch10

Channels remapped to suit your gear

Leave the keyboard on channel 1 and send it to the synth on 2 and the drum machine on 10. With the channel map filter (Ch Map) in the route, you never touch a receive channel on your gear.

♪♪♪ChordArpSynthsettings on screen

Richer playing with MIDI filters

Chain MIDI filters such as chord, arpeggiator and channel mapping into a route, in any order. Put the chord before the arpeggiator and a single held note flows out as a broken chord. Change their settings on the screen as you play; take them out and you're back.

ch10Drumsch2Bassch1Synth

Play freely with the built-in sequencer

A 16-line sequencer plays all the MIDI gear you connect. Switch patterns while it plays, or record a phrase from your keyboard on the spot and layer it in.

CC 74CC 91SynthFX

Scattered knobs, on one screen

Cutoff on one synth, reverb on another unit: control them from knobs, pads and an XY pad on a single screen.

Pick your MIDI devices, choose the route

The MIDI Devices screen is a grid: gear that sends MIDI down the side, gear that receives it across the top. The cell where they cross is the path between those two.

Tap
connect or disconnect. A new connection passes every channel.
Long-press
choose what passes: channels (1–16, several at once), clock and filters.
  • Forward by channel Only the channels you pick, out of 1–16, go through: the keyboard's channel 1 to the synth, channel 10 to the drum machine. One cell can carry several channels.
  • Forward clock only No notes: just tempo, start, stop and song position. Can be combined with channels.
  • Apply filters On the Filters tab of the long-press menu, chain chords, an arpeggiator, channel mapping and more in the order you pick, and adjust them live.
  • Low latency Routes without filters are forwarded inside MIDoRI directly, without going through a script.

Play your set from the built-in sequencer

MIDoRI has a sequencer built in that plays all the MIDI gear you connect. Build the flow of your set on stage, without bringing a laptop running a DAW.

Each line to its own MIDI gear

Up to 16 lines, each with its own output channel. Decide where each channel goes on the MIDI Devices screen, and one sequencer plays your drum machine, bass machine, synths and the built-in AMY together.

  • 1 Kickch10Drum machine (DIN)
  • 2 Bassch2Bass machine (USB)
  • 3 Leadch1Synth (Bluetooth)
  • 4 Padch3AMY (Tab5 speaker)
  • Many lines, one machine Lines can share a channel, so kick, snare and hats can each have a line and still go to one drum machine.
  • Length and rate per line Step count (4–64) and step length (triplets included) are set per line: put triplet hats over a sixteenth-note bass line, for example.
  • In step with your gear's sequencers The sequencer runs on the Tempo clock. Send the same clock to your gear and MIDoRI's sequencer and theirs run at one tempo.
122345678910111213141516C3 E3 G3REC 3Chain<1-16/16>16Followlive-set*Stop1 Kickch10 G 16x16M2 Bassch2 G 16x16MP343 Leadch1 R 2barM4 Padch3 G 16x16M

The Sequencer screen (Tab5): pattern 1 playing, pattern 2 queued to come next and blinking.

Play and touch it

The MIDoRI screen itself is an instrument and a control surface.

KEYS C3–B4

Keys

On-screen keys that play any of your gear, and light up with notes from an external keyboard or your DAW.

91Cutoff44Reso69ReverbKickSnareHatClap

Knobs & Pads

Turn a synth's cutoff and resonance with your finger and fire one-shots from pads (bundled layouts).

Y: CC74X: NOTE

XY Pad

Slide a finger to move pitch and an effect at once. Up to 5 fingers, each doing something different.

♪ D3

Tombola

Balls bounce inside a spinning polygon and play a note each time they hit a wall: a sequencer that leaves it to chance.

Support for many connection standards

MIDI ins and outs of every kind, on one board.

USB HOST

USB MIDI gear

Keyboards, synths and controllers, directly. Up to 4 through a USB hub.

DAW
USB DEVICE

Computer / USB-host gear

Shows up as a USB MIDI device to your DAW, and to gear that acts as a USB host, like Ableton Push 3 standalone or MPC Live.

SRT3.5 mm
TRS-MIDI

3.5 mm gear

From the TRS jack of a SAM2695 unit, for compact synths and grooveboxes.

MIDI-DIN

5-pin DIN gear

From the DIN jack of a SAM2695 unit, for classic MIDI gear as is.

BLUETOOTH

BLE-MIDI

Visible to an iPad or Mac, and connects out to BLE-MIDI keyboards and adapters.

Tested USB MIDI gear

Roland J-6Teenage Engineering OP-1 fieldROLI Seaboard BLOCKSROLI Lightpad BLOCKSROLI LUMI KeysNovation Launch Control XL mk2Ableton Push 3

Most other class-compliant USB MIDI devices work as well. Any DIN gear works.

Boards

Both are off-the-shelf M5Stack boards, and everything works from their screens.

M5Stack Tab5
ESP32-P4
M5Stack CoreS3 / CoreS3 SE
ESP32-S3
Screen5" 1280×7202" 320×240
USB-MIDI✓Gear on USB-A, computer on USB-C, both at once✓Gear or a computer (chosen when you install)
BLE-MIDI✓Visible to iPad / Mac, connects out to BLE-MIDI gear✓Visible to iPad / Mac, connects out to BLE-MIDI gear
TRS-MIDI✓SAM2695 unit on Port A (TRS jack)✓SAM2695 unit on Port C (TRS jack)
MIDI-DIN✓SAM2695 unit on Port A (DIN jack)✓SAM2695 unit on Port C (DIN jack)
Built-in AMY synth✓Through the speaker or headphones—
SAM2695 GM module✓SAM2695 unit on Port A✓SAM2695 unit on Port C

TRS-MIDI and MIDI-DIN go through the jacks of a SAM2695 unit on Port A (Tab5) / Port C (CoreS3). The same unit also plays General MIDI sounds.

Customize MIDoRI your way

Everything works from the screen, but drop a small file written in Ruby into the plugins folder on the SD card and you add screens and features. They load at every start and show up in the normal screens. Not a programmer? Copy in a plugin someone else wrote.

Lay out the screen your way

Arrange parts on a grid to build a control screen just for your set.

  • Any part, any size Pads, knobs, an XY pad, keys, Tempo, envelopes and the sequencer, placed where you want them.
  • On the Home screen Your screens become Home tiles. Make one per song and switch with a pad or a Program Change.
  • Across your gear One screen can send CC and notes to as much gear as you like.
LIVE83Cutoff57ReverbKickSnareHHClap
/sd/plugins/live.rb
syn = MIDI::Device.new(MIDIDevices.usb_midi_host("J-6"))
drm = MIDI::Device.new(MIDIDevices.sam2695)

UI.layout("Live", cols: 4, rows: [2, 1]) do
  knob col: 0..1, row: 0, label: "Cutoff" do |v|
    syn.control_change(74, v.to_i)
  end
  knob col: 2..3, row: 0, label: "Reverb" do |v|
    drm.control_change(91, v.to_i, channel: 9)
  end
  [["Kick", 36], ["Snare", 38], ["HH", 42], ["Clap", 39]].each_with_index do |(name, note), i|
    pad col: i, row: 1, label: name do
      drm.trigger(note, 120, channel: 9)
    end
  end
end

Write your own filters

A filter that rewrites MIDI on its way through is a single class.

  • Usable from the screen Once registered it appears in the long-press menu (Filters) on the MIDI Devices screen.
  • Settings on screen Values declared with param can be adjusted on the screen, live.
  • Chains with the rest Chain it with the bundled chord and arpeggio filters in any order, with separate settings per route.
Keys → SynthChFiltersChord1Velocity2ArpCh MapVelocityVel100Velocity runsafter Chord
/sd/plugins/velocity.rb
class FixedVelocity < MIDI::Filter
  label "Velocity"
  types :note_on
  param :value, :int, range: 1..127, default: 100, label: "Vel"

  def call(m)
    m.velocity = params[:value]   # same strength every time
    m
  end
end

MIDI.register_filter(:velocity, FixedVelocity.new)

Scripts can also drive your gear through a song's structure, and irb lets you try things a line at a time. Start from the examples and the documentation.

Get started

With a board and a cable, you can be playing in about ten minutes.

1. Install

Open the install page in Chrome or Edge on a computer, pick your board, press the button.

2. Connect

Plug in your gear and tap where it should go on the MIDI Devices screen.

3. Play

Play the keyboard and you hear it. Press play on Tempo and the clock goes out too.