1. What is LJam

LJam is a browser-based loop sequencer with a 6-track grid interface. It uses Tone.js for built-in synthesis and supports Web MIDI output so you can drive external instruments and DAWs directly from the browser.

Six tracks are arranged in a 3×2 grid: two drum panels and four melodic synth panels. Each track has 10 slots and 8 chains for building arrangements on the fly.

2. Getting Started

  1. Open the app — click anywhere or press Space to start the audio engine.
  2. Click cells in any grid to add notes.
  3. Press Space (or the play button) to hear your loop.

Each grid panel has its own instrument. Drum panels let you toggle individual hits; melodic panels let you draw notes with variable length.

3. The Grid

The interface is a fixed 3×2 layout of grid panels. Each panel is 32 steps long (two bars of 16 sixteenth notes).

PositionTrackTypeDefault RowsColor
Top-left KICK / SNARE Drum 6 instruments Red
Top-center PERCUSSION Drum 7 instruments Orange
Top-right BASS Melodic Scale-dependent Green
Bottom-left LEAD SYNTH Melodic Scale-dependent Blue
Bottom-center PAD / CHORDS Melodic Scale-dependent Purple
Bottom-right ARP / FX Melodic Scale-dependent Cyan

If bar 2 (steps 17–32) is empty for a track, the playhead loops at step 16 for that track.

4. Editing Notes

Drum Grids

Melodic Grids

5. Slots (A–J)

Each track has 10 independent slots labeled A through J. Think of them as pattern variations for a single track.

6. Chains (1–8)

Chains let you sequence slots into longer patterns. Each track has 8 chains.

When a chain is active, the sequencer automatically advances to the next slot in the chain at each loop boundary, wrapping around at the end.

7. Transport

ControlRangeDefault
BPM60–200120
Swing0–100%0%
Play / StopStopped

BPM and swing update live without stopping playback. Swing delays every second sixteenth note by the set amount, giving a shuffle feel.

The step indicator at the bottom of the transport bar shows the current playback position.

8. Key & Scale

The master key and master scale in the transport bar control all melodic grids by default.

Available Roots

C C# D D# E F F# G G# A A# B

Available Scales

ScaleIntervals (semitones)
Major0 2 4 5 7 9 11
Minor0 2 3 5 7 8 10
Dorian0 2 3 5 7 9 10
Mixolydian0 2 4 5 7 9 10
Pent Maj0 2 4 7 9
Pent Min0 3 5 7 10
Blues0 3 5 6 7 10
Chromatic0 1 2 3 4 5 6 7 8 9 10 11

Per-Grid Overrides

Each melodic panel has its own root and scale dropdowns in the panel header. Setting these overrides the master key/scale for that grid only — useful for polytonality or mixing scale colors.

9. Octave Scroll

On melodic grids, click and drag the row labels (the note names on the left edge) up or down to shift the octave range.

TrackDefault Octaves
Bass2–3
Lead Synth4–5
Pad / Chords3–4
Arp / FX5–6

10. Track Labels

Click a track’s name label to rename it. The label becomes an editable text field.

Custom labels are saved with your project.

11. Drum Row Editing

On drum grids, click a row label (e.g. KICK, SNARE) to edit that row’s name and MIDI note number inline.

Overridden labels display in the track’s color instead of gray. The override only affects display and MIDI output — saved project files still use the original row names internally, so existing saves load correctly.

Tip: Use this to remap drums for non-GM hardware. For example, click KICK and change its MIDI note from 36 to match your instrument’s kick drum note number.

12. Volume & Mute

Each track panel has a volume slider and a mute button (M).

Volume and mute state are saved per-track and persist across sessions.

13. MIDI Output

LJam can send MIDI to external instruments and DAWs via the Web MIDI API.

Enabling MIDI

  1. Click the MIDI button in the transport bar to enable output.
  2. Select one or more MIDI output devices from the dropdown.
  3. Your browser may prompt for MIDI permission on first use.
Tip: Use a virtual MIDI bus (IAC Driver on macOS, loopMIDI on Windows) to route LJam into your DAW.

Per-Track MIDI Channel

Each track has a channel selector (1–16). Default channels:

TrackDefault Channel
Kick / Snare10 (GM Drums)
Percussion10 (GM Drums)
Bass2
Lead Synth3
Pad / Chords4
Arp / FX5

Browser Support

MIDI device selections are persisted in localStorage.

14. Patch / Program Change

Each track has a PC / patch text field in the header. This field serves two purposes: sending MIDI Program Change messages and acting as a free-text label for your own reference.

Formats

InputWhat it sendsExample use
42 CC#0=0, CC#32=0, PC 42 GM program 42 (bank reset to 0)
b:6 p:42 CC#0=6, CC#32=0, PC 42 Bank MSB 6, LSB defaults to 0
b:0,3 p:24 CC#0=0, CC#32=3, PC 24 SC-8820: SC-88Pro map, Nylon Guitar
Slap Bass Nothing (label only) Just a reminder for yourself

The field border highlights in the track color when the value is a valid program number or bank+program pair. Every valid patch change sends the full CC#0 (MSB) + CC#32 (LSB) + Program Change sequence, so switching from a banked patch back to a plain number always resets to bank 0,0.

Bank Select LSB (CC#32)

GS devices like the Roland SC-8820 use CC#32 to select between sound maps:

LSBSC-8820 Sound Map
0SC-8820 native
1SC-55
2SC-88
3SC-88Pro

The b:MSB,LSB p:N format lets you address these directly. The short form b:N p:N defaults LSB to 0, which is the native map — identical behavior to plain GM devices where LSB is ignored.

Arrow Key Nudge

Press / while the patch field is focused to increment or decrement a value. The cursor position determines which number is affected — place the cursor on the bank MSB, the LSB, or the program number and arrow keys will adjust that part (clamped to 0–127).

When are messages sent?

Tip: GS/GM2 devices (like the Roland PMA-5 or SC-8820) use bank numbers to select sound variations beyond the 128 GM programs. Try b:0 p:0 for the default bank, b:64 p:0 for variation sets, or b:0,3 p:0 to access the SC-88Pro sound map. See the GM / GM2 / GS Reference for the full program list, drum map, and bank select details.

15. Keyboard Shortcuts

Global

ActionShortcut
Play / StopSpace
UndoCtrl+Z  /  +Z
RedoCtrl+Shift+Z  /  +Shift+Z  /  Ctrl+Y

Grid (hover over a grid to activate)

ActionShortcut
Stamp: Whole (16 steps)W
Stamp: Half (8 steps)H
Stamp: Quarter (4 steps)Q
Stamp: Eighth (2 steps)E
Stamp: Sixteenth (1 step)S
Velocity level (1=soft … 0=full)09
Shift hovered row left/right /
Move hovered note up/down /
Shift entire pattern left/rightShift+ /
Shift all notes up/down (wraps)Shift+ /
Randomize hovered rowR
Exit stamp/velocity mode / clear selectionEscape

Press a stamp key to enter stamp mode (a colored chip appears in the header). Press the same key again or Escape to exit. On melodic grids, clicking an empty cell places a note of that duration. On drum grids, note length is always 1 step — stamp mode only affects the spacing of drum rolls when dragging. If stamp mode is active when pressing R, notes snap to that duration’s grid.

Velocity levels work the same way: press a number key (19, 0=10) to set the velocity for new notes. A “v5”-style chip appears in the header. Press the same key or Escape to clear. Velocity maps to MIDI 25–127 and scales the internal synth volume. Duration and velocity can be active simultaneously. Notes without a velocity level use the track volume as before.

Shortcuts are disabled when a text field, select dropdown, or editable element is focused.

16. Save & Load

Auto-Save

Your project is automatically saved to localStorage after every change (500 ms debounce). It reloads automatically when you reopen the page.

Save to File

Click SAVE in the transport bar to export your project as a .json file. On Chrome and Edge this opens a native file dialog; other browsers download the file directly.

Load from File

Click LOAD to import a previously saved .json file. The file format is versioned and older saves are automatically migrated.

Additional Transport Buttons

Randomize (Hold-to-Fill)

Both the per-track randomize button and the RANDOM ALL button use a press-and-hold mechanic:

An undo snapshot is taken when you press down, so Ctrl+Z / +Z reverts the entire fill in one step.

Per-track randomize and clear buttons affect only the current editing slot for that track.

17. GM Drum Map Reference

When sending MIDI on channel 10, drum tracks use these General MIDI note assignments:

Track 1 — Kick / Snare

InstrumentNoteMIDI #
KickC136
SnareD138
Closed Hi-HatF#142
Open Hi-HatA#146
Crash CymbalC#349
Ride CymbalD#351

Track 2 — Percussion

InstrumentNoteMIDI #
Hand ClapD#139
Side Stick / RimC#137
Low TomG143
High TomD250
Conga HighD#363
Conga LowE364
CowbellG#256
Tip: If your external drum instrument uses a different mapping, click any row label to change its MIDI note number inline — no need to remap in your DAW. See the full GM drum map for all 47 percussion note assignments.

18. Internal Synth Toggle

The SYNTH ON/OFF button in the transport bar controls whether LJam’s built-in Tone.js synthesizers produce sound.

Use this when driving external gear or a SoundFont player — you hear only the external sound without the internal synths doubling every note.

Per-track mute buttons still work independently of the synth toggle.

19. MIDI Clock

When MIDI is enabled and the transport is playing, LJam sends MIDI clock messages to all selected output devices:

MessageHexWhen Sent
Start0xFATransport starts playing
Timing Clock0xF824 times per quarter note (continuous)
Stop0xFCTransport stops

External apps and hardware can use these messages as a tempo and beat reference. The clock rate adjusts automatically when you change BPM.

Tip: MIDI clock is useful for synchronizing recording apps (e.g., Jamrec), external sequencers, or DAWs to LJam’s tempo.

20. Using SoundFonts

LJam doesn’t load SoundFont files directly, but you can use an external SoundFont player to get high-quality GM instrument sounds driven by LJam’s sequencer via MIDI.

Setup

  1. Install a SoundFont player such as FluidSynth, Qsynth, or sfizz.
  2. Load an SF2 file (e.g., FluidR3_GM.sf2) in the player.
  3. The player will expose a virtual MIDI input port on your system.
  4. In LJam: click MIDI ON, then select the SoundFont player’s port from the output dropdown.
  5. Click SYNTH OFF to silence the internal synths.
  6. Press play — LJam sends notes via MIDI, the SoundFont player produces the audio.

Selecting Instruments

Use the patch field on each track to send Program Change messages. The SoundFont player will switch to the corresponding GM instrument. For example:

macOS Quick Start with FluidSynth

  1. Install: brew install fluidsynth
  2. Run: fluidsynth -a coreaudio -m coremidi /path/to/FluidR3_GM.sf2
  3. In LJam, select FluidSynth virtual port as the MIDI output.
Tip: MIDI clock is sent alongside notes, so the SoundFont player (and any other connected apps) can stay synchronized to LJam’s tempo.

21. Factory Reset

If things get into a strange state — unexpected drum mappings, stuck settings, or corrupted project data — you can wipe all saved state and start fresh.

This clears:

Tip: Use SAVE to export your project to a file before resetting, so you can restore it later with LOAD.