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:
- Open Settings (gear icon, top right)
- Navigate to the MIDI section
- Enable MIDI Input and/or MIDI Output as needed
- 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:
- Open Settings > MIDI
- Check the Connected Devices list
- 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.appand 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:
- Enable MIDI Input in Settings
- Select the source device from the MIDI Input Device dropdown
- 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 wavenote("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 anotherstack( 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 3note("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 4note("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:
- Open Settings > MIDI > Advanced
- 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:
- Press Panic in Settings > MIDI (sends all-notes-off to all channels)
- 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:
- Open
Audio MIDI Setup.app - Open the MIDI Studio view
- Double-click IAC Driver and enable it
- Virtual ports now appear as MIDI devices in AlgoBooth
On Windows, use loopMIDI for virtual MIDI routing between applications.