Skip to content

MIDI Setup

AlgoBooth supports MIDI both as an input (receive notes and CC from controllers) and as an output (send patterns to external synths and hardware). This page covers how to configure MIDI connections and use them in your patterns.

Enabling MIDI

MIDI access requires explicit permission in the browser and in the desktop app:

  1. Open Settings (gear icon, top right)
  2. Navigate to the MIDI section
  3. Enable MIDI Input and/or MIDI Output as needed
  4. If prompted by the browser or OS, grant MIDI device access

On the desktop app (Mac and Windows), MIDI works via the system MIDI stack with no additional drivers needed for class-compliant USB controllers.

Connecting MIDI Controllers

AlgoBooth recognizes any class-compliant USB MIDI device. Plug in your controller before opening the app, or connect it after and re-enable MIDI in settings.

To verify your device is detected:

  1. Open Settings > MIDI
  2. Check the Connected Devices list
  3. Your device should appear by name

If your device does not appear, check that it is recognized by your OS MIDI configuration:

  • Mac: Open Audio MIDI Setup.app and verify the device is listed
  • Windows: Open Device Manager and check Universal Serial Bus controllers

MIDI Note Input

You can play notes from a MIDI controller into the Cue or Master editor. When MIDI note input is enabled, incoming MIDI notes appear in the pattern in real time.

To route MIDI input to a channel:

  1. Enable MIDI Input in Settings
  2. Select the source device from the MIDI Input Device dropdown
  3. Choose whether incoming notes target Cue or Master

MIDI note input is additive — played notes layer on top of any code pattern currently running. This is useful for improvising melodic lines over a running beat pattern.

Sending Patterns to External Synths via MIDI

Use the .midi() method to route a pattern to a MIDI output device:

note("c3 e3 g3 b3").midi()

Without arguments, .midi() uses the first available MIDI output. To target a specific device by name:

note("c3 e3 g3").midi("Roland JD-Xi")

MIDI Channel

Specify the MIDI channel (1–16):

note("c3 e3 g3").midi().midichan(2)

Chord Voicings

Send chord patterns to external synths:

note("<C^7 A7 Dm7 G7>").voicing().midi("IAC Driver")

MIDI CC Mapping

Send MIDI Control Change messages to control parameters on external hardware:

// Control filter cutoff (CC 74) with a sine wave
note("c3 e3 g3").ccn(74).ccv(sine.slow(4)).midi()
  • ccn(n) — CC number (0–127)
  • ccv(n) — CC value, normalized 0–1 (AlgoBooth converts to 0–127 internally)

Send CC independently from notes:

// Notes on one pattern, CC automation on another
stack(
note("c3 e3 g3 b3").midi(),
ccv(sine.segment(16).slow(4)).ccn(74).midi()
)

Common Controller Setups

Akai MPK Mini / Similar Pad Controllers

  • Pads trigger notes on MIDI channel 1 by default
  • Enable MIDI input in Settings, no additional configuration needed
  • Knobs send CC values — map them to AlgoBooth parameters with ccn()

Arturia KeyStep / Similar Keyboards

  • Connect via USB or DIN MIDI
  • Use as note input for melodic patterns
  • Assign arpeggiator output to drive note() patterns

Ableton Push / Similar Controllers

  • Works as a standard class-compliant MIDI device
  • Note input: pads send notes to the active editor
  • CC: encoders map to CC numbers that you can read with ccv()

Hardware Synths (Roland, Korg, etc.)

Route pattern output directly:

// Send to a Roland Juno on channel 3
note("c2 g2 f2 eb2").slow(2).midi("Roland Juno", { midichannel: 3 })

MIDI Clock

Sync external devices to AlgoBooth’s internal clock using MIDI timing messages:

stack(
midicmd("clock*48").midi("IAC Driver"),
midicmd("<start stop>/4").midi("IAC Driver")
)

This sends 48 MIDI clock pulses per cycle (equivalent to 24 PPQN at 2 cycles/second). The start and stop commands control transport on connected devices.

Program Changes

Switch presets on external synths:

// Alternate between programs 0 and 4
note("c3 e3 g3").progNum("<0 4>").midi("Roland JD-Xi")

Troubleshooting

Device not detected

  • Check OS MIDI configuration (Audio MIDI Setup on Mac, Device Manager on Windows)
  • Try unplugging and reconnecting the device
  • Toggle MIDI off and on again in AlgoBooth Settings
  • Some USB hubs interrupt MIDI — connect directly to a port on the computer

High latency on MIDI output

MIDI output has a built-in latency compensation of ~34ms to align with the audio engine. If your hardware sounds delayed:

  1. Open Settings > MIDI > Advanced
  2. Adjust MIDI Latency Offset to compensate

Notes stuck on (not releasing)

If external synth notes stop responding, this is usually a missing note-off message:

  1. Press Panic in Settings > MIDI (sends all-notes-off to all channels)
  2. Or: stop playback with Ctrl+. which triggers note-off cleanup

Device detected but no sound from external synth

  • Verify the MIDI channel in AlgoBooth matches the synth’s receive channel
  • Check the synth’s local MIDI receive is enabled
  • Confirm the MIDI cable or USB connection is active (not just plugged in — some devices have a power/MIDI-on state)

Virtual MIDI ports (Mac)

To route MIDI between applications on Mac, use the IAC (Inter-Application Communication) Driver:

  1. Open Audio MIDI Setup.app
  2. Open the MIDI Studio view
  3. Double-click IAC Driver and enable it
  4. Virtual ports now appear as MIDI devices in AlgoBooth

On Windows, use loopMIDI for virtual MIDI routing between applications.