Homeentitytool

LSDj (Little Sound Dj)

aliases LSDJ, Little Sound Dj, Little Sound DJ
sources Little Sound Dj v9.2.6 Operating Manual (summary) · Pan Docs — Audio Registers · Pan Docs — Audio Details · Intense Tech #09 — Let's Table This Discussion! (Defense Mechanism) · Intense Tech #10 — Get your Kicks with Version 6, Part 1 (Defense Mechanism) · Intense Tech #11 — Kicks Part 2: Kick Heaven in Version 7 (Defense Mechanism) · Intense Tech #13 — Interview with LSDj Developer Johan Kotlinski (Defense Mechanism) · Intense Tech #17 — The Joys of Noise (Defense Mechanism) · Intense Tech #18 — ADSR Makes Life Easier! (Defense Mechanism) · Intense Tech #01 — LSDj Wave Synth Deep Dive, Part 1 (Defense Mechanism) · Intense Tech #02 — LSDj Wave Synth Deep Dive, Part 2 (Defense Mechanism) · Intense Tech #06 — Groovy Groove and Tick Tricks, Part 1 (Defense Mechanism) · Intense Tech #07 — Groovy Groove and Tick Tricks, Part 2 (Defense Mechanism) · Getting started with LSDj with Infu (course) · chipmusic.org — LSDJ FAQ thread (2010–2011) · chipmusic.org — LSDJ Advanced Tricks thread (2012) · chipmusic.org — Noise snare / Complete Drum Kit on Noise Channel threads (2014) · chipmusic.org — LSDJ Chord Cheat Sheet / Advice on Learning Tables threads (2015) · chipmusic.org — two Johan Kotlinski interviews (2012, 2014) · Intense Tech #03 — Don't Sleep on Z (Defense Mechanism, after Hypnogram) · Intense Tech #04 — Manage your LSDj save files with libLSDj (Defense Mechanism) · Intense Tech #05 — LSDj Wave Cruncher Instrument Library (Defense Mechanism) · Intense Tech #08 — DOTCNT's LSDj Wave Cruncher (Defense Mechanism) · Intense Tech #12 — Scoping Out New Features (Defense Mechanism) · Intense Tech #14 — Let's Appreciate Version 8 (Defense Mechanism) · Intense Tech #15 — Let's Mix It Up (and Down) (Defense Mechanism) · Intense Tech #16 — So You Want a Cartridge Family? (Defense Mechanism) · Intense Tech #19 — New Noise and 9.1.0 News (Defense Mechanism) · Intense Tech #20 — Customize LSDj From Scratch with LSDPatch (Defense Mechanism) · Intense Tech #21 — What's New in LSDj v9.2 (Defense Mechanism) · Sabrepulse — Getting started with LSDJ tutorial (mirror at Adventure Kid) · defMON wiki — DIN/MIDI/LSDj/Nanoloop sync, stereo SID, manual BPM tables · chipmusic.org — Advanced LSDj Tutorial: The Ghost Channel (2013) · Defense Mechanism — LSDJ Wave Channel Tutorial..? (More of a ramble) (video, 2020) · chipmusic.org — lsdj wav channel release? (2013) · Defense Mechanism — Making every LSDJ kick I can think of (video, 2024) · Defense Mechanism — LSDj Noise Channel Tutorial (v9.2.L) (video, 2022) · chipmusic.org — speech synthesis thread (2012) · little-scale — the LSDJ kit releases, and the stock kits extracted (2008–2014) · little-scale — the chip sample packs (2008–2012) · little-scale — All 4-bit Waveforms That Have 32 Samples (2009) · Pain Perdu — Hidden LSDJ Tricks EP1: Instrument Retriggering (video, 2016) · Pain Perdu — Hidden LSDJ Tricks EP2: In-depth WAV channel walkthrough (video, 2016) · Pain Perdu — Hidden LSDJ Tricks EP3: \"Isometric\" save-file walkthrough (video, 2016) · Pain Perdu — Hidden LSDJ Tricks EP4: Sidechaining (video, 2016) · Pain Perdu — Hidden LSDJ Tricks EP5: Shortcuts and Workflow (video, 2016) · Pain Perdu — Hidden LSDJ Tricks EP6: Fantastic Grooves and How to Use Them (video, 2016) · Defense Mechanism — LSDj Learning Lab shorts: Limit and Vshift, Long Filter Sweeps, Self-Resonating Bass (videos, 2020) · Defense Mechanism — LSDj Learning Lab: Overtones / Ghost Channel with Allpass Filter (video, 2020) · Tyler Barnes — Advanced LSDJ Tutorial: The Ghost Channel (video, 2013) · chipmusic.org — Wav Instrument Tutorials for LSDJ (2014) · chipmusic.org — LSDJ live performance thread (2010) · chipmusic.org — LSDJ kit creation and kit volume threads (2013) · roboctopus — LSDJ & You: Collapse of the Waveform (2014) · roboctopus — PWM, I Choose You! (2014) · roboctopus — The Kinda Sorta Supersaw-lite; or, a Beefy Saw Bass (2013) · roboctopus — LSDJ & You: Echo Chamber (2014) · little-scale — How to: Prepare Samples and Create LSDJ Kits (2008) · little-scale — Let's Tune the Game Boy Like a Japanese Koto (2009) · little-scale — Microtonal Chipmusic Compilation, call for tracks (2009) · little-scale — extracting samples from Game Boy and GBA ROMs (2010, 2012) · Pan Docs — Audio Overview · Wikipedia — Goto80 (en) · goto80.com — defMON posts and the Improv page · chipmusic.org — the defMON megathread (2014–2026) · little-scale — LSDJ Tuning Tables (2009) · little-scale — Underclocking a Game Boy, and retuning it afterwards (2009) · little-scale — Abrasive on LSDJ Microtuning (2009) · little-scale — the Arduino Game Boy sync boxes: syncThing, Sync Tank and the AU$15 build (2008) · little-scale — Syncing something *to* LSDJ, and the un-sync piece (2006–2008) · little-scale — USB MIDI Game Boy Sync for $16, and DIN sync 24 (2011) · little-scale — Sync Options for Game Boy Music (2008)
created 2026-08-30 · updated 2026-08-31

A tracker that runs on the game-boy itself (as a cartridge ROM), written by johan-kotlinski; version 9.2.6 dates from May 2021. It drives the four channels of the game-boy-apu — PU1, PU2, WAV, NOI — through a song → chain → phrase hierarchy, instruments with tables, grooves and a wave-channel soft synth (source: s-lsdj-manual).

Screens (SELECT+CURSOR moves between them)#

Project  Synth   Wave
Song     Chain   Phrase   Instr.   Table
                 Groove

This two-row map dates from version 8 (three rows before); going up returns to the top-row screen last used — up from Song always opens Project, up from a G command the Groove screen (source: s-intense-tech-14-lets-appreciate-version-8). Hidden screens: file, word (speech), help. START plays the current screen's channel; in the song screen, or with SELECT+START, all four. A,A on any parameter or command shows quick help.

  • Song — four columns (PU1 PU2 WAV NOI) of chain numbers, played top-down. A twice on an empty step creates a new chain/phrase; B+A on an empty step pulls chains up; mark rows with B,B,B and jump with B+UP/DOWN; B+LEFT/RIGHT pans a channel.
  • Chain — list of phrases, each with an optional transpose (semitones). Chains are shared between channels; playing one chain on both pulse channels is a classic (detune).
  • Phrase — 16 steps of note · instrument · command · value. Phrases are shared between channels. A+LEFT/RIGHT changes note, A+UP/DOWN octave; B+A deletes; cut the instrument column with B+A to change a note without retrig (legato). KIT/SPEECH instruments show sample names; NOISE shows a byte value (15-bit) or note (7-bit).
  • Instrument, Table, Groove, Synth, Wave, Project, File — see below.

Instruments#

Five types; the type must match the channel: PULSE (PU1/PU2), WAVE and KIT (WAV), NOISE (NOI), SPEECH (instrument 40, WAV).

Common parameters: NAME · TYPE · LENGTH · OUTPUT (L/R/both/none) · PITCH — how P, L, V behave: FAST (360 Hz updates), TICK (per tick, vibrato synced to the music), STEP (P sets pitch instantly), DRUM (logarithmic fall-off for kicks); A+L/R picks the vibrato shape (triangle/saw/square, up or down) · TRANSP. (obey chain/project transposes) · CMD/RATE (slows C/R, and P/V in TICK mode; 0 fastest, F slowest) · TABLE (table to run on every note; TICK/STEP — STEP advances one table row per trigger).

The instrument number is the trigger — the note is not (source: s-painperdu-01-instrument-retriggering). "You don't necessarily need to have an instrument value next to a note for it to produce sound": a bare note plays with whatever settings are already running, while the instrument number "reads the settings from here and triggers it every time it reads the instrument value". Everything the instrument owns restarts with it — the envelope, the table, and on WAV the synth's whole wave cycle. Three consequences that shape how songs are written:

  • Omitting it is legato. A note without the instrument number does not restart the envelope or the table, which is the general rule behind the slur trick in the phrase screen (lead-articulation).
  • Tables advance per trigger, not per tick, when the instrument's TABLE mode is set to do so (the manual's STEP; the version Pain Perdu demonstrates calls the mode AUTOMATE). So the classic L/R panning table gives L R L R when every note carries the instrument number and L L R R when only every second one does — the same table, a different rhythm (stereo-panning).
  • A slow wave cycle is never heard in full if every note retriggers it. A WAVE instrument at PLAY PINGPONG, LENGTH F and a slow SPEED evolves over many notes, but "I cannot actually hear the full range of wave cycles" unless it is triggered sparsely. And since kicks usually share WAV, a kick retriggers the lead when it returns — so size the cycle to the gap: LENGTH 3 at SPEED 6 completes between 16th-note kicks.
typeown parameters
PULSEENV. = three amplitude/speed pairs (32/AD/10: attack from 3 to A at speed 2, slow decay to 1, hold; speed 0 = hold, 1 fastest); WAVE (duty); SWEEP (PU1 only: time digit, pitch ± digit); PU2 TSP. (transpose PU2); FINETUNE (PU1 down, PU2 up)
WAVEVOLUME 0/25/50/100 % + output; FINETUNE; WAVE or SYNTH; PLAY MANUAL/ONCE/LOOP/PINGPONG; SPEED; LENGTH; LOOP POS
KITtwo KITs (left and right note columns); VOLUME; FINETUNE; OFFSET; LEN (ALL = whole sample); LOOP OFF/ON/ATK; SPEED full/half; CLIP HARD/SOFT (tape-like)/FOLD/WRAP, A+(LEFT,LEFT) on HARD = raw memory mix
NOISEENV. as pulse; PITCH FREE (pitch changes may randomly mute) / SAFE (restart after pitch change) — introduced in 9.1.3 in place of S MODE FREE/STABLE: FREE equals the old STABLE (restart only when going from long-loop to short-loop noise), SAFE restarts on every change and never mutes; TRANSP. setting since 9.2 (source: s-intense-tech-21-whats-new-in-lsdj-92)
SPEECH14 word slots W-0W-D built from 59 allophones in the word screen (allophone + duration per row)

The 22 stock kits, read from a 2014 extraction of the ROM: AA-EL ACIEED ANIMLZ CR-78 CR8000 DMX DR-55 DR-110 DRUMUL EL-KK2 GHETTO KK3-TH KR-55 LINNDR RHYACE TOM TR-606 TR-707 TR-727 TR-808 TR-909 TT-ZZ — mostly drum machines under LSDj's short-name limit, and available as plain WAVs along with a louder TR808L rebuild (source: s-little-scale-lsdj-kit-releases; kit preparation is on chip-samples). The budget a kit has to fit: 3FA0 bytes, "just over two seconds worth of audio per kit", at 11,468 Hz / 8-bit / mono, with each sample named in three characters because that name is what LSDj shows. Two tool quirks worth knowing before blaming a sample: a longer-than-two-second sound can be sped up 2× in the editor and played back with the kit instrument's SPEED at half; and the patcher's preview lies — a click at the end of a long sample "in my experience there is always that click in longer samples when played inside the patcher only. When the kit is loaded into LSDJ and played back on the Game Boy there is no noticeable click." On the perennial complaint that the stock kits are too quiet, the forum's settled answer is turn the other channels down rather than fight it — "if you have the wave instrument volume at 3 already, there's not much else you can do" — or rebuild the kits with gain pushed past normalisation (sources: s-little-scale-lsdj-kits, s-chipmusic-lsdj-kit-threads; levels-and-headroom). The SPEECH instrument's 59 allophones are the same count as the General Instrument SP0256-AL2's complete sounded set, of which little-scale released a sample of every one; no source connects them and the correspondence is (unverified) (source: s-little-scale-chip-sample-packs).

SPEECH in practice (source: s-chipmusic-lsdj-speech-synthesis): slow, unforgiving — "you can't delete wrong letters" — and best scoped to a phrase or a hook rather than a monologue. The workflow that makes it bearable is to write the line in an outside speech program (STSPEECH on an Atari ST emulator) and transcribe the allophones it produces. Intelligibility is a mixing problem: keep the speech centred and pan everything else away from it, and space the syllables musically instead of on every tick.

Sample kits shipped: SP0256-AL2 speech, Roland TR-606/707/727/808/909, CR-78, CR-8000, Boss DR-55/DR-110, E-mu Drumulator, Oberheim DMX, Korg KR-55, LinnDrum, Ace Tone Rhythm Ace FR-1, Sequential Tom, "Acieed" house vocals, "Animals". Kits, fonts, palettes and songs are replaced/managed with lsdpatch (LSDPatcher), which since 2021 also imports and exports songs as .lsdsng and .lsdprj (song plus the kits it uses) and resamples new kit samples with dithering and a fix for the wave-RAM refresh bug (source: s-intense-tech-20-lsdpatch). Sampled tonal instruments take another route: lsdj-wave-cruncher turns a one-note sample into a 16-frame wavetable that liblsdj's lsdj-wavetable-import patches into the save, playable at any pitch (sources: s-intense-tech-05-wave-cruncher-instrument-library, s-intense-tech-08-dotcnts-wave-cruncher).

Tables#

Six columns: envelope (amplitude digit + ticks; loop by putting the target step in the first digit and H in the second — e.g. tremolo), transpose (semitones; the classic table arpeggio), and two command + value pairs. Default speed one tick per step; a G command placed inside a table sets that table's own speed — little known, and it halves what a slow arpeggio costs: "if I wanted to make a long arp that actually took two tables to make, that was a bit of a hassle; thanks to that trick I can now use half the space and control exactly how fast my tables go" (credited to Joe Toye of Chiptune Belgium; source: s-painperdu-06-grooves). A faster groove does the reverse, packing more commands into the same time for percussion. Started by the instrument's TABLE setting or by Axx in a phrase (A20 stops); SELECT+RIGHT on an A command edits that table; B+CURSOR browses tables. See instrument-tables.

Grooves#

Ticks per step for phrases and tables. Default groove 0 = 6/6; at 125 BPM a tick is 1/50 s. 8/5 = swing; A+UP/DOWN changes the swing percentage keeping the total ticks (6/6 = 50 % → 7/5 = 58 %); triplets and odd rhythms likewise. Gxx selects a groove; SELECT+DOWN on a G command edits it. Because grooves are per channel, arpeggios can live in phrases rather than tables — "if you're like me and you overuse tables for arps, using grooves and phrases might be a better idea" (source: s-painperdu-06-grooves). See shuffle-funktempo.

Synth and wave screens#

16 synth sounds × 16 waves (sound 0 = waves 00–0F). Fixed settings: SIGNAL square/saw/triangle/custom (W.FX uses a wave in F0–FF), FILTER low/high/band/all-pass, DIST CLIP/FOLD/WRAP, PHASE PINCH/WARP/RESYNC/RESYN2. Variable settings with a smooth fade from first to last wave: VOLUME, CUTOFF, Q, VSHIFT, LIMIT (0–F lowers volume, 10–FF wraps for overtones), PHASE. The wave screen edits individual waves. See wavetable-programming; for two notes drawn into one wave, ghost-channel.

The instrument side of the synth (sources: s-painperdu-02-wav-channel-walkthrough, s-defensemech-learning-lab-shorts):

  • LENGTH is how many of the sixteen waves the cycle uses, LOOP POS (older REPEAT) how many frames at the end of that cycle repeat afterwards — "if you play with this cleverly you can have really interesting rhythmic wave cycles" — and SPEED is ticks per frame, which belongs to the groove rather than to taste: SPEED 6 under groove 6/6 advances one wave per step, SPEED 5 under 5/5, and so on. SPEED 1 "is more clipping than actual modulation".
  • MANUAL is the quiet play mode because only one wave is ever read, so no frame change occurs.
  • Hand-drawn waves are not restricted to MANUAL — "one of the most common misconceptions is that the hand-drawn waves in LSDj are only accessible when you set this to MANUAL … [they] are available even when you're in PINGPONG and LOOP and ONCE".
  • F offsets that run past a synth's sixteen waves bleed into the next synth's waves, which is a way to make one note evolve out of its own timbre — and F10 steps a whole synth, so two synths chain into a 32-frame animation. F is relative and accumulates: F05 F05 lands on frame 0A. A small F is also a variation trick in its own right: F3 on a three-frame bass "offsets the wave cycle" so the note does not start at its quietest, and different offsets on successive hits "makes a bit of differentiation to something that's really four-to-the-floor, really repetitive" (source: s-painperdu-03-isometric-sav-walkthrough).
  • VOLUME and LIMIT are not two volume controls. VOLUME scales the signal before the rest of the chain, so turning it down destroys the clipping or wrapping that made the sound — "you can't get it to wrap if the volume isn't high" — while LIMIT constrains the dynamic range afterwards and keeps the shape. There is no LIMIT command for the phrase screen, so different levels mean different synths.
  • VSHIFT is to DIST what Q is to the filter: with CLIP it merely squashes the wave against the ceiling ("a sound-bad button"), but with FOLD or WRAP the shifted part folds or wraps back in and "that's almost like a pulse-width modulation thing happening".
  • Which end of CUTOFF is bass: 00 is the low end and FF the high, which is why a high-pass instrument left at the default FF seems to go silent — "the cutoff is happening at the highest point" (source: s-chipmusic-lsdj-wav-instrument-tutorials).
  • Re-entering the synth screen regenerates all sixteen of that synth's waves, so copy any hand-drawn frame you mean to keep before touching it; later versions warn first, older ones do it silently. In the WAVE screen a whole wave (or part of one) copies with SELECT+B twice and pastes with SELECT+A, which is what makes a hand-drawn bank affordable at all (sources: s-chipmusic-lsdj-wav-channel-release, s-lsdj-and-you-pwm).

What LENGTH actually does (source: s-defensemech-wave-channel-ramble — the author's own chart, not in the manual): a synth always travels from wave 0 to wave F; LENGTH sets how many waves in between are generated, spread evenly, so a shorter LENGTH covers the same sweep in fewer, faster steps.

LENGTHwavesLENGTHwaves
0080 1 3 5 7 9 B D F
10 F90 1 3 5 7 8 9 B D F
20 7 FA0 1 3 4 6 7 9 B C E F
30 5 A FB0 1 2 4 5 7 8 A B D E F
40 3 7 B FC0 1 2 3 5 6 7 9 A B D E F
50 3 6 9 C FD0 1 2 3 4 6 7 8 9 B C D E F
60 2 5 7 A D FE0 1 2 3 4 5 6 7 9 A B C D E F
70 2 4 6 9 B D FF0 1 2 3 4 5 6 7 8 9 A B C D E F

Two notes out of one channel, the ghost-channel, has two recipes: draw a second waveform at 2× or 3× the fundamental on top of the first (sources: s-chipmusic-lsdj-ghost-channel, s-tylerbarnes-ghost-channel-tutorial), or reach the same overtone emphasis with an allpass filter at a low CUTOFF and a high Q — "no matter how much you boost this Q you really never lose the root note", where lowpass isolates the fifth but loses the edge (source: s-defensemech-ghost-channel-allpass).

Drawing waves rather than generating them is its own school, with rules of its own: the wave's overall height is its volume, and "the more angular the wave, the sharper its edges, the sharper and harsher the sound is". roboctopus's LSDJ & You posts are the introduction — an angular saw, a one-sample pulse for arps, a notched sine bass, a hand-narrowed sixteen-wave PWM bank — and his general method is that the picture is the spec: "if you hear a cool waveform you want to replicate in LSDJ, an easy way to achieve it is to do a google image search … and just try to approximate the shape in the WAV screen" (sources: s-lsdj-and-you-collapse-of-the-waveform, s-lsdj-and-you-pwm, s-lsdj-and-you-supersaw-bass; the recipes are on wavetable-programming). His mixing note is the one that keeps coming back: the wave channel is quiet by design, so bring the others down to it — "I rarely have anything on pulse above A8" (levels-and-headroom).

The other roboctopus staple is an echo built as an instrument: the same sound at lower volume with a shorter envelope, typed into the gaps, lagging the melody by two note positions rather than one; pan it, or table-pan it side to side; and a one-tick offset on PU2 with PU FINE TUNE 2 is a chorus rather than an echo (source: s-lsdj-and-you-echo-chamber; fake-echo). Wave-channel dynamics finer than E01/E02/E03 come from ramping LIMIT across a synth, which also makes the instrument duck and recover on every note — the sidechain-pump LSDj has no compressor for (sources: s-defensemech-learning-lab-shorts, s-painperdu-04-sidechaining).

Commands (phrases and tables)#

cmdnameeffect
Axxtablestart table xx; A20 stop
BxyMayBephrase: probability of playing (x = left kit, y = note/right kit; B08 ≈ 50 %); table: hop to row y with probability x — new in version 7 (source: s-intense-tech-12-scoping-out-new-features)
Cxychordarpeggio base, +x, +y: C37 minor, C47 major, C0C, CC0, CCC; C00 reset; slowed by CMD/RATE; on noise since 9.1.0, limited to the noise notes (F 5 + C12 = F, G#, C) (source: s-intense-tech-19-new-noise-and-910-news)
Dxxdelaydelay the note by xx ticks
Exyenvelopepulse/noise: x initial amplitude, y release (0/8 none, 1–7 decrease, 9–F increase); wave: E00E03 = 0/25/50/100 %
Fxyframe/finetunepulse: x = PU2 TSP, y = finetune in 1/32 semitones; kit: sample position (00–7F forward, 80–FF back); wave: relative wave frame (F10 = next synth sound)
Gxxgrooveselect groove
Hxyhopphrase: H00–H0F next phrase at step y; H10–HFE hop back x times to step y; HFF stop; table: loop x times (0 = forever) to step y, nestable. Waltz: H00 on step C
Kxxkillstop instantly (click) or after xx ticks; click-free alternatives E00 (wave) / E11 (pulse, noise)
Lxxslideslide to the note over xx (ticks if PITCH = TICK, else xx/360 s); in tables the transpose column sets the target
Mxymaster volumex left, y right: 0–7 absolute, 8 none, 9–B up, D–F down (M77 max)
Oxxoutputpan channel L / R / both / none
Pxxpitch bendspeed (PFE = −2); DRUM log, FAST linear, TICK per tick, STEP instant; noise: sweeps the noise notes — since 9.1.0 P01 applies S01 every 4 ticks and P04 every tick (source: s-intense-tech-19-new-noise-and-910-news)
Rxyretrig/resyncx volume change (1–7 up, 9–F down), y rate (1 fastest, F slowest, 0 once); R8x resync at high rate (R80 360 Hz, R8F stop; pulse quirk: half an octave deeper); RF4 = echo; R8x came with version 7 and takes a pulse kick about three whole tones below the channel's normal range (source: s-intense-tech-12-scoping-out-new-features)
Sxysweep/shapepulse: frequency sweep (x time, y pitch ±; PU1 only); kit: loop offset/length; noise: shape (relative)
TxxtempoT28–TFF = 40–255 BPM, T00–T27 = 256–295; exact for 6-tick grooves, else bpm = desired × ticks/step ÷ 6
Vxyvibratox speed, y depth in semitones (0=0.125, 1=0.25, 2=0.375, 3=0.5, 4=0.75, 5=1, 6=1.5, 7=2, 8=2.5, 9=3, A=3.5, B=4, C=5, D=6, E=7, F=8); V00 off; on noise since 9.1.0 (always tick-based); since 9.1 the TICK-mode speeds match phrase steps — V0x = 16 steps, V1x = 12, V2x = 32/3, V3x = 8, V4x = 6, V5x = 16/3 … VFx = ½ (source: s-intense-tech-19-new-noise-and-910-news)
Wxywavepulse: duty (resets the LENGTH timer — hardware oddity); wave: x synth speed, y length
Zxyrandomizerepeat the last non-Z/H command adding random 0..x / 0..y to its digits — every command except H since version 8 (source: s-intense-tech-14-lets-appreciate-version-8); worked examples in randomization-and-probability

Editing, cloning, workflow#

B+A cut · SELECT+A paste · SELECT+B + cursor marks a block (SELECT+(B,B) column/row, SELECT+(B,B,B) screen) · A+CURSOR on a marked block changes all values (quick transpose) · SELECT+(B,A) clones a chain/phrase/instrument/table/synth · deep cloning copies the phrases, slim cloning reuses them (project screen) · B+SELECT mute, B+START solo · CLEAN SONG DATA / CLEAN INSTR DATA merge duplicates and free memory · project screen: TEMPO (tap A to tap-tempo), TRANSPOSE, SYNC, CLONE, LOOK, KEY DELAY/REPEAT, PRELISTEN, HELP, WORKED/PLAY/TOTAL clocks · file screen: up to 32 songs, 512-byte blocks, BF blocks = 97,792 bytes, songs compressed on save; SELECT+A loads without leaving the list, START plays — handy for live sets · SELECT+A+B on LOAD/SAVE = total memory reset · back up your songs: cartridge batteries die.

The rule behind all of it (source: s-painperdu-05-shortcuts-and-workflow): "everything you can highlight you can copy, paste and cut, and every value you can select you can clone" — chains, phrases, instruments, tables, transposition values, commands, whole screens, individual table columns, and waveforms. Four things the manual states but few people use:

  • Which clone. Slim cloning "clones only the chain but keeps the phrase value intact" — right for a one-note variation or an octave change; deep cloning "clones the chain and clones every phrase inside it" into the next free slots — right when you mean to rework every phrase, "but be careful about not running out of phrases".
  • The clipboard survives loading another song ("a feature since version 3 something") — but it carries values only, not what they refer to: chain 1B pasted into a second song points at that song's 1B. It works properly when both songs come from the same template save, "then you copy paste this into your new song, then it'll sound great", which he names as the easy way to build a remix.
  • Marking is navigation, not selection. B,B,B in the song screen marks a block so intro, break, riser and drop are identifiable at a glance mid-set — "it's in the manual but not a lot of people know about it". The number of marks is limited, so spend them.
  • Live transposition applies on release. In the project screen, hold A and press the arrows: the new TRANSPOSE value takes effect only when A is released, so a key change lands exactly on a bar line — "now I have modulated my whole track one semitone up". The same hold-and-release applies to TEMPO. Caveat: "L commands and other pitch bends can react differently, and low notes can wrap to the next octave if you're not careful."

Also: paste blank space rather than cut when separating sections — cutting shifts everything after it and "can screw up your alignment".

Files, tools and cartridges#

  • Files: .sav — a cartridge's or emulator's save (up to 32 songs, one in working memory); .lsdsng — one song; .lsdprj — a song bundled with the kits it uses, the sharing format since LSDPatch's song manager; .snt — a wave-synth wavetable for lsdj-wavetable-import; .lsdpal — a palette (sources: s-intense-tech-04-liblsdj, s-intense-tech-05-wave-cruncher-instrument-library, s-intense-tech-20-lsdpatch).
  • Tools: lsdpatch (ROM upgrade, kits, fonts, palettes, songs), liblsdj (lsdsng-export, lsdsng-import, lsdj-wavetable-import), lsdj-wave-cruncher (sample → wavetable); the older LSDManager by johan-kotlinski is superseded (source: s-intense-tech-20-lsdpatch).
  • Hardware: a flash cartridge with 128 kB SRAM or FRAM — Everdrive GB X5, insideGadgets' carts with the GBxCart flasher; "LSDJ cartridges" on auction sites are unlicensed bootlegs, since the licence forbids selling LSDj on cartridges (source: s-intense-tech-16-cartridge-family; details on game-boy).
  • Emulators for 9.2 and later: BGB 1.5.9 or newer, SameBoy, Gambatte, Emulicious — others get the new envelopes wrong (source: s-intense-tech-21-whats-new-in-lsdj-92).
  • Inside the ROM: the note column is indexed into a table of game-boy-apu period values, and it is patchable. In 3.8.9 (a 1,048,576-byte ROM) there are two of them, back to back: 216 bytes = 108 notes at $6D3A for GB / GBC / GBA, and a second 216 bytes at $6E12 recomputed for the Super Game Boy's 2.4 % fast clock. The first bytes of the standard table are 2C 00 9C 00 06 01 — 12-TET from C2, little-endian. Overwrite them and every note in the tracker moves (rom-retuning, alternative-tunings); the offsets change between versions, and applying the 3.8.9 table to 4.0.5 has been reported to stop a cartridge booting (source: s-little-scale-lsdj-tuning-tables, s-little-scale-underclocking-and-retuning). abrasive's lsdj_tune does the same job from the command line, and also rewrites the displayed note names (source: s-little-scale-abrasive-lsdj-tune). Two caveats a retuner meets immediately, from the worked koto retune: a ratio-based scale with fewer than twelve degrees maps several adjacent semitone keys onto the same pitch (the hirajoshi 2 mapping runs 2, 3, 2, 3, 2 keys per octave), and the bottom of the range does not exist — every frequency below about 64 Hz produces a negative period value, so a retuned ROM's lowest octave and a half is unplayable garbage (game-boy-apu) (source: s-little-scale-koto-tuning). The routes into microtuning, as of December 2009: lsdj_tune, "a simple spreadsheet and a hex editor", and the same treatment for nanoloop (source: s-little-scale-microtonal-compilation; alternative-tunings, rom-retuning).
  • Reading the ROM as audio. The same file the tuning tables live in also holds the kit samples, and the generic way out is Audacity's File > Import > Raw Data — for a Game Boy Advance ROM, signed 8-bit PCM · no endianness · mono · offset 0 · 100 % · 12000 Hz — then look for "an area of the ROM (in the form of the audio waveform) that looks significantly different to the rest of it". "A similar process can be used for many different types of ROMs" (source: s-little-scale-rom-sample-extraction; chip-samples).

Live mode and sync#

SELECT+LEFT toggles live mode: START starts the selected chain(s), SELECT+START stops them, LEFT+START starts a whole row; changes are queued until the playing chain (or, with a double press, the phrase) finishes.

What live mode is actually for (source: s-chipmusic-lsdj-live-performance): not muting, but per-channel queueing. In song mode every channel advances in step; in live mode "you can queue up, in each individual channel and independently of the others, a chain anywhere before or after the one currently playing … So PU1 can be playing the chain at position 01 while PU2 plays the chain at position 2F" (Bit Shifter). The technique built on that is chain-loop islands: the live sequencer stops rewinding as soon as it hits an empty step, so blocks of chains separated by empty rows each cycle on themselves — "you can be assured that a bassline will only cycle through the parts you want it to, rather than continuing on and advancing through the rest of the song. Until you TELL it to." pain-perdu reaches the same song-screen layout from the workflow side: empty rows between sections air the screen out visually and buy thinking time, "if I'm looking for the next section to jump to, I have time to decide" (source: s-painperdu-05-shortcuts-and-workflow). Chains of deliberately mismatched lengths, left to cycle, then generate material nobody wrote — "string quartet-like" — and H turns the mismatch into polyrhythm. Design the save for the set before the gig; see live-tracking and orderlist. (The chain-loop passage is quoted from an older edition of the manual, "3.5.1 Chain Loops"; the 9.2.6 manual's current wording and section number have not been checked (unverified).)

In use from the start. goto80 "made one of the first Gameboy live performances with LSDj together with Role Model" around 2001, and Wikipedia calls him "an early adopter of live Game Boy music"; when his laptop broke before a Gothenburg show in 2007 he played the whole set on a Game Boy (sources: s-wikipedia-goto80, s-goto80-site-defmon-posts). Sync modes: LSDJ (two Game Boys on a link cable, LEAD/SYNC/WAIT, clipboard transfer between them), MIDI, ANALOG IN/OUT, KEYBD — see sync. A C64 running defmon can act as LSDj's sync master through Scannerboy's user-port adapter, which outputs the LSDj sync signal among others — it shipped on 2015-03-07 at 36 EUR, handling LSDj sync, nanoloop sync, MIDI clock, DIN sync and 24–2 ppqn analogue clock, with a second batch in 2017 (sources: s-defmon-wiki-sync-and-stereo, s-chipmusic-defmon-thread).

On the wire: LSDj syncs on the link connector's SC (serial clock) pin — nanoloop uses SI instead — with a 22k–100k pull-down to ground on the slave side. In master mode it drives that same line at 32 clock transitions per sixteenth-note step, enough for a plain CMOS counter to run an LED or a step sequencer off it. Slaved to an external MIDI clock a DMG tracks "from around 35 to over 200 beats per minute"; press START and the screen shows WAIT until the clock arrives, and after a stop LSDj does not resume where it stopped — reselect the position first (sources: s-little-scale-arduino-gameboy-sync-boxes, s-little-scale-syncing-things-to-lsdj, s-little-scale-teensy-usb-midi-sync; the device landscape is on sync).

Noise shape cheat sheet (versions up to 9.0)#

The NOISE instrument's shape byte: first digit = octave, second digit = clock divisor and loop mode; S, P, C and transposes act on it as described in pitch-slide-and-portamento (source: s-intense-tech-17-the-joys-of-noise).

digitas first digit: octaveas second digit: divisor (8–F long-loop = white-noise-like, 0–7 short-loop = tonal, metallic)
Fhighest×2, long-loop
Eone lower×1, long-loop
Dtwo lower÷2, long-loop
Cthree lower÷3, long-loop
Bfour lower÷4, long-loop
Afive lower÷5, long-loop
9six lower÷6, long-loop
8seven lower÷7, long-loop
7eight lower×2, short-loop
6nine lower×1, short-loop
5ten lower÷2, short-loop
4eleven lower÷3, short-loop
3twelve lower÷4, short-loop
2thirteen lower÷5, short-loop
1no sound÷6, short-loop
0no sound÷7, short-loop

Before 8.6.0 the octave of the phrase note selected the first digit (octave 5 = the instrument's digit; octave 6 before 5.1.6) and the pitch class did nothing; since 8.6.0 shapes go directly into phrases. Short-loop pitches follow a "negative harmonic series" (the base frequency divided by 1, 2, 3 …), nearest to C, F, A♭ and D. Going from long-loop to short-loop has a 1-in-256 chance of muting the channel; the instrument's S MODE (earlier S CMD; FREE/STABLE) set to STABLE blocks that direction. 9.1.0 removed FREE/STABLE, and 9.1.3 added PITCH FREE/SAFE after mutes were found to happen even inside one loop mode: FREE behaves like the old STABLE, SAFE restarts the noise on every change and never mutes (sources: s-intense-tech-19-new-noise-and-910-news, s-intense-tech-21-whats-new-in-lsdj-92). The hardware behind it is on game-boy-apu.

Since 9.1.0: ordered noise notes#

Version 9.1.0 replaced the shape byte with values ordered by frequency: the long-loop noises first, lowest to highest, as 003B; above them the short-loop noises as note names C, D, F and G# (the pitches each frequency is closest to) in octaves −9 to 8 — all four notes in octaves −9…4, only C in octaves 5–8 plus an extra F in octave 5. Old songs are converted on loading except their transposes and S values; Defense Mechanism's converter (defensem3ch.github.io/noise-convert) maps them. Read from its table: old short-loop shapes X0X7 become D, F, G#, C, F, C, C, C in rising octaves (90D-2, 93C-1, 95C 0, 97C 2, A5C 1, 80D-3, 70D-4), and old long-loop shapes X8XF become 4·(X−2) plus 0, 1, 2, 3, 5, 7, 11, 15 (981C, 9F2B), compressed near the top (FF3B). P, C and V work on the new notes (see the command table) (source: s-intense-tech-19-new-noise-and-910-news).

Version history (from the sources)#

versionchangesource
≈ 2000first release, for the Game Boy Color; cartridges sold online and through a Stockholm record stores-intense-tech-13-kotlinski-interview
2001-01live mode, inspired by Ableton Live's betas-intense-tech-13-kotlinski-interview
1.4.0optimised dual-kit sample mixing, fast enough for the DMGs-intense-tech-13-kotlinski-interview
3.0.0file screen with RLE compression: many songs per cartridges-intense-tech-13-kotlinski-interview
3.9.2 (2008-12-26)"purge sequencer/instruments" becomes "free unused data" (also frees tables, synths, waves)s-chipmusic-lsdj-faq
3.9.5prelistens-intense-tech-13-kotlinski-interview
3.9.e (2009-07-26)"free unused data" split into CLEAN SONG DATA and CLEAN INSTR DATAs-chipmusic-lsdj-faq
5.1.0new pitch engine; the old logarithmic slides were lost until version 6s-intense-tech-13-kotlinski-interview, s-intense-tech-10-kicks-part-1
5.1.6the phrase octave that selects a noise shape's first digit moves from 6 to 5s-intense-tech-17-the-joys-of-noise
6.x (6.9.0, 2019-10)instrument setting P/L/V: FAST (formerly HF), TICK, STEP, DRUMs-intense-tech-10-kicks-part-1
7.0 (7.0.6, 2019-11)P/L/V renamed PITCH; transpose works with DRUMs-intense-tech-11-kicks-part-2
7.7.4 (2020-01)B (mayBe) probability command; FX/SPEED (later CMD/RATE); wave-channel oscilloscope; silky wave — click-free wave switching, SPEED 01 synths audible; R8x super-fast retrig; wave FINETUNE ±F; maximum tempo 295 (T00–T27); fast load/save. Still crashy: 6.9.0 stayed the stable releases-intense-tech-12-scoping-out-new-features
8 stable (2020)accurate vibrato, de-clicked WAV playback, slowed-down C, probability sequencing, higher maximum tempo, wave finetune, optimised playback, high-speed retrigs-intense-tech-13-kotlinski-interview
8 (2020-03)two-row screen map; ADSR replaces ENVELOPE on pulse and noise; Z on every command but H; tables PLAY/STEP (STEP = the old Automate); FX/SPEED renamed CMD/RATE; wave LOOP POS instead of REPEAT; R restarts the wave synth from its first frame; wave instruments default to MANUAL; xF in the table volume column hops to row x; synth cloning from the instrument screen; CLEAN SONG/INSTR DATA remove duplicates; V in three channels no longer crashess-intense-tech-14-lets-appreciate-version-8
8.1.0ADSR for pulse and noise instruments (8.1.8 by 2020-02)s-intense-tech-18-adsr-makes-life-easier, s-intense-tech-13-kotlinski-interview
8.5.1 stable / 9.2.A devthe pair Infu's course was written against; noise notes and the envelope differ between thems-infu-getting-started-with-lsdj
8.1.9Z works with H, G and D (a note added to article 03; article 14 says every command except H — the wiki records both)s-intense-tech-03-dont-sleep-on-z
8.6.0noise shapes can be typed directly in phrasess-intense-tech-17-the-joys-of-noise
8.8.0software volume for pulse and noise: click-free E, table volume column and Ks-intense-tech-18-adsr-makes-life-easier
8.9.3R01 retrigs every ticks-intense-tech-17-the-joys-of-noise
9.0.1sprite-based play-position indicators at 60 Hzs-intense-tech-19-new-noise-and-910-news
9.1.0 (2021-01)noise channel reorganised into ordered notes (long-loop 00–3B, then short-loop C/D/F/G# by octave); P, C and V on noise; TICK vibrato rates match phrase steps; two-digit FINETUNE and LIMIT (overdrive above 0F); wave F immediate again; FREE/STABLE removed; row bookmarkss-intense-tech-19-new-noise-and-910-news
9.1.3noise PITCH FREE/SAFEs-intense-tech-21-whats-new-in-lsdj-92
8.5.1 stable / 9.1.8 dev / 8.4.1 Arduinoboy (2021-02)the builds LSDPatch 1.10.4 offered for ROM upgradess-intense-tech-20-lsdpatch
9.2.H (2021-08)rewritten kit timing (kits from LSDPatcher ≥ 1.11.5); synth PHASE modes PINCH/WARP/RESYNC/RESYN2; waves no longer inverted; noise TRANSP; ENV visualiser and A,A tooltips; wave instrument RESYNC play mode; LEFT+START queues song rows in SONG mode; song rows FFBF, 14 speech words; 60 fps screen; needs BGB ≥ 1.5.9, SameBoy, Gambatte or Emuliciouss-intense-tech-21-whats-new-in-lsdj-92
9.2.6 (2021-05)the manual ingested in this wiki (its version number precedes 9.2.H in the letter-suffixed 9.2 series)s-lsdj-manual

Later than the manual (source: s-defensemech-every-lsdj-kick): the wiki's version history above ends at 9.2.6 because that is where the ingested manual and articles end. A February 2024 video works in 9.4.0 and demonstrates one change directly — the R retrig command now resets the pitch, so the L 00 00 workaround for stutter kicks is no longer needed (retrigger). Nothing else about 9.3 or 9.4 is documented in the sources.

Hardware behind the parameters#

How the instrument screen and commands map onto the game-boy-apu registers documented in pan-docs. The correspondences are inferred from the two descriptions (LSDj's source is not ingested); the hardware column is sourced (sources: s-lsdj-manual, s-pandocs-audio-registers, s-pandocs-audio-details).

LSDjhardware
PULSE instrument WAVE, Wxy on pulseNRx1 bits 7–6: 12.5 / 25 / 50 / 75 % duty — 25 and 75 % sound the same; the duty shares the register with the length timer, hence the LENGTH reset
LENGTHthe length timer: 1/256 s ticks, cuts at 64 steps (256 on WAV)
ENV first pair, ExyNRx2: initial volume 0–F, direction, pace 1–7 (× 1/64 s); the second and third ENV pair and speeds above 7 are beyond the hardware ramp, so software
SWEEP (PU1), Sxy on pulseNR10: pace, direction, step — an upward sweep that overflows silences the channel
WAVE VOLUME 0/25/50/100 %, E00E03NR32 output level (a bit shift); the wave channel has no envelope
synth waves, F frames, kits, speechwave RAM $FF30–$FF3F, 16 bytes = 32 × 4-bit samples, rewritable only while the channel is stopped
NOISE instrument 7-bit / 15-bit values, PITCH FREE / SAFENR43 bit 3 LFSR width; switching 15 → 7 can lock the LFSR silent, a retrigger resets it
OUTPUT, Oxx, B+LEFT/RIGHTNR51 left/right bits per channel; a change while the channel plays pops
MxyNR50 master volume, 0 = 1/8 … 7 = full per side, never mutes
Kxx click vs E00/E11switching a DAC off pops; volume 0 with the DAC on is silent
any new note, R retrigbit 7 of NRx4: switch on, reload period, restart envelope and sweep, reset the LFSR; a pulse channel's phase is never reset

The scale of what is software here is worth stating plainly: two pulse channels with four timbres each, one wave channel, one noise channel and a master-volume-plus-panning stage is the whole palette, so LSDj's multi-stage envelopes, duty "sweeps", vibrato and tables are all software rewriting a handful of registers every tick — lengths in 1/256 s, envelope steps in 1/64 s. Two hardware notes that surface in the tracker: the cartridge's analog VIN input could have been a fifth channel but "no licensed games used this feature, and it was omitted from the Game Boy Advance"; and a Super Game Boy 1 plays sharp, which is why the ROM carries a second 216-byte note table recomputed for its 2.4 % fast clock (source: s-pandocs-audio-overview).

game-boy · game-boy-apu · pan-docs · nanoloop · rom-retuning · alternative-tunings · abrasive · little-scale · johan-kotlinski · intense-tech · defense-mechanism · infu · chipmusic-org · instrument-tables · chord-arpeggio · shuffle-funktempo · wavetable-programming · instrument-design · retrigger · randomization-and-probability · liblsdj · lsdpatch · lsdj-wave-cruncher · sabrepulse · hypnogram · 4ntler · pain-perdu · roboctopus · live-tracking · levels-and-headroom · lead-articulation · fake-echo · ghost-channel · sidechain-pump · sync

Sources#

s-lsdj-manual · s-pandocs-audio-registers · s-pandocs-audio-details · s-intense-tech-09-lets-table-this-discussion · s-intense-tech-10-kicks-part-1 · s-intense-tech-11-kicks-part-2 · s-intense-tech-13-kotlinski-interview · s-intense-tech-17-the-joys-of-noise · s-intense-tech-18-adsr-makes-life-easier · s-intense-tech-01-wave-synth-deep-dive-part-1 · s-intense-tech-02-wave-synth-deep-dive-part-2 · s-intense-tech-06-groove-and-tick-tricks-part-1 · s-intense-tech-07-groove-and-tick-tricks-part-2 · s-infu-getting-started-with-lsdj · s-chipmusic-lsdj-faq · s-chipmusic-lsdj-advanced-tricks · s-chipmusic-noise-drum-threads · s-chipmusic-tables-and-chords-threads · s-chipmusic-kotlinski-interviews · s-intense-tech-03-dont-sleep-on-z · s-intense-tech-04-liblsdj · s-intense-tech-05-wave-cruncher-instrument-library · s-intense-tech-08-dotcnts-wave-cruncher · s-intense-tech-12-scoping-out-new-features · s-intense-tech-14-lets-appreciate-version-8 · s-intense-tech-15-lets-mix-it-up-and-down · s-intense-tech-16-cartridge-family · s-intense-tech-19-new-noise-and-910-news · s-intense-tech-20-lsdpatch · s-intense-tech-21-whats-new-in-lsdj-92 · s-sabrepulse-getting-started-with-lsdj · s-defmon-wiki-sync-and-stereo · s-little-scale-lsdj-tuning-tables · s-little-scale-underclocking-and-retuning · s-little-scale-abrasive-lsdj-tune · s-little-scale-arduino-gameboy-sync-boxes · s-little-scale-syncing-things-to-lsdj · s-little-scale-teensy-usb-midi-sync · s-little-scale-sync-options-for-game-boys · s-little-scale-lsdj-kit-releases · s-little-scale-chip-sample-packs · s-little-scale-all-4-bit-waveforms · s-painperdu-01-instrument-retriggering · s-painperdu-02-wav-channel-walkthrough · s-painperdu-03-isometric-sav-walkthrough · s-painperdu-04-sidechaining · s-painperdu-05-shortcuts-and-workflow · s-painperdu-06-grooves · s-defensemech-learning-lab-shorts · s-defensemech-ghost-channel-allpass · s-tylerbarnes-ghost-channel-tutorial · s-chipmusic-lsdj-wav-instrument-tutorials · s-chipmusic-lsdj-live-performance · s-chipmusic-lsdj-kit-threads · s-lsdj-and-you-collapse-of-the-waveform · s-lsdj-and-you-pwm · s-lsdj-and-you-supersaw-bass · s-lsdj-and-you-echo-chamber · s-little-scale-lsdj-kits · s-little-scale-koto-tuning · s-little-scale-microtonal-compilation · s-little-scale-rom-sample-extraction · s-pandocs-audio-overview · s-wikipedia-goto80 · s-goto80-site-defmon-posts · s-chipmusic-defmon-thread · s-chipmusic-lsdj-ghost-channel · s-defensemech-wave-channel-ramble · s-chipmusic-lsdj-wav-channel-release · s-defensemech-every-lsdj-kick · s-defensemech-noise-channel-92l · s-chipmusic-lsdj-speech-synthesis

source file wiki/entities/lsdj.md · 2 unverified · graph