LSDj (Little Sound Dj) cheat sheet

From LSDj (Little Sound Dj) · print · built 2026-08-31

Reference

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).

Techniques

Channel interleaving (one channel, two jobs) › LSDj #

The Game Boy scene's rule, from the LSDJ Advanced Tricks thread (source: s-chipmusic-lsdj-advanced-tricks): never dedicate a channel to one job. "You can have kicks, snares, toms, lead, bass and chords all in one channel and in one pattern if you mix it up and alternate" (SketchMan3); the wave channel carries kick, bass and snare (Saskrotch, Zef); arps and echoes go between pulse kicks (roboctopus); envelopes (E) let a note ring through an instrument switch (defiantsystems); "you'd be surprised at how many gaps in the music the listener's brain fills in on its own" (Victory Road); and "Dont be afraid of silence" (herr_prof). The noise-drum threads add the percussion side: one drum at a time per channel, so introduce instruments one by one and let the ear keep them (Vegasdiamond, borrowed from beatboxing), fit hi-hats on the step before with D02/D05, use the noise channel to accent a pulse bass instead of spending a channel on it (herr_prof), and layer three-channel kicks and snares (Analog) (source: s-chipmusic-noise-drum-threads).

sabrepulse's beginner tutorial teaches the trick in the very first song (source: s-sabrepulse-getting-started-with-lsdj): because the wave-channel kit kicks are "really weak and not very loud", a PULSE kick instrument (envelope F1, duty 50 %, a table with PF1 and a K00 near its end) goes on rows 0, 4, 8, C of PU1 and the bass C3 on rows 2, 6, A, E — "Kick, Bass, Kick, Bass" — leaving PU2 for the lead and NOI for snare and hats; the K00 clears the channel before each bass note (instrument-design).

Chord arpeggio (the 0 3 7 trick) › LSDj #

  • Cxy chord command: runs an arpeggio of base, +x, +y semitones once per tick: C37 plays 0, 3, 7, 0, 3, 7… (minor), C47 major, C0C = 0, 0, C (octave on every third step), CC0 = 0, C alternating, CCC = 0, C, C; C00 resets. The instrument's CMD/RATE slows it down (0 fastest, F slowest).
  • Table arpeggios for anything longer than three notes or with its own rhythm: put semitone offsets in the table's transpose column (the manual's example forms a major chord) and loop with H; the table speed follows the groove selected with G (instrument-tables).
  • Chains carry a transpose per phrase, so the same arp phrase serves every chord of a progression (orderlist).

(source: s-lsdj-manual)

Before 9.1.0, C on noise instruments alternates between the base shape and base + value on every tick (C01 on shape FF gives FF, F0, FF …) rather than a pitch interval; the table transpose column is 01–7F up, 80–FF down (sources: s-intense-tech-17-the-joys-of-noise, s-intense-tech-09-lets-table-this-discussion). From 9.1.0, with the noise channel reorganised into ordered notes, C on noise arpeggiates like on pulse and wave, limited to the notes the channel has: F 5 with C12 gives F, G# and C — an F minor triad — and larger values span octaves (source: s-intense-tech-19-new-noise-and-910-news).

Two more intense-tech details: the speed setting began as FX/SPEED in version 7 (7.7.4), renamed CMD/RATE in version 8 (sources: s-intense-tech-12-scoping-out-new-features, s-intense-tech-14-lets-appreciate-version-8); and C37 followed by Z10 on later steps plays the chord randomly as minor or major, possible since version 6 made the Z digits independent (randomization-and-probability; source: s-intense-tech-03-dont-sleep-on-z). sabrepulse's tutorial introduces the command with C07 on the first note of the lead — "magically transformed into a chord" — and suggests trying it on a couple more notes (source: s-sabrepulse-getting-started-with-lsdj).

Community practice (sources: s-chipmusic-tables-and-chords-threads, s-infu-getting-started-with-lsdj, s-intense-tech-06-groove-and-tick-tricks-part-1): LazierGunz's cheat sheet writes chords as hex transposes — the values are interval positions counted from 0, so a major-seventh table is 00 04 07 0B 0C 07 04 00 (C E G B C B G E); slow it with G01 on the table's first line and groove 01 = 2/2 rather than doubling rows; 00 04 00 07 00 0B 00 0C is a texture. The C command's speed is fixed, which is why tables win for anything expressive; danimal cannon: go down, out of order, add octave notes, use five-note patterns over more than an octave — "just don't go up the chord every time the same way". Arpeggios can also be phrases: a 3-tick groove and H71/H5A loops turn one phrase into a long arp. Infu's beginner pair: C47 major, C37 minor.

Grooves are the table's speed control (source: s-painperdu-06-grooves, credited to Joe Toye of Chiptune Belgium). "By default tables run at one tick per step", but a G command inside a table sets that table's speed — which 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". A faster groove does the reverse, packing more commands into the same time for a percussion table. The workflow consequence is worth stating: with per-channel grooves, arps can live in phrases instead of tables — "if you're like me and you overuse tables for arps, using grooves and phrases might be a better idea". defense-mechanism makes the same point from the timing side: a table groove of 2, 3 or more ticks slows a table down for arpeggios and duty changes, and groove plus H combine "to create complex timing changes in both phrases and tables" (source: s-intense-tech-07-groove-and-tick-tricks-part-2; shuffle-funktempo).

Why the arpeggio exists at all, on this machine. Asked why C alternates instead of sounding a chord, the chipmusic-org answer is flat: "each channel is really just one channel"; slower table arpeggios come closest; "that's how the medium works, boss" (source: s-chipmusic-lsdj-faq). Hackaday's framing of the same constraint names the two classical escapes side by side — "clever composers evoke the feeling of multiple notes by quickly switching between pitches to make arpeggios that sound convincingly like chords, or switch between very different sound parameters to allow two different 'instruments' to share the same channel" — arpeggio and channel-interleaving, with the ghost-channel as the third (source: s-hackaday-gameboy-channelhacking).

Four notes, then five, then two channels (pain-perdu, source: s-painperdu-03-isometric-sav-walkthrough). C gives three notes at one tick each; writing the arp into a table at two ticks per note (00 44 77 CC — root, major third, fifth, octave) buys a fourth note and enough time to hear each one: "faster arps, you can just hear the click noise between each note and not really the note itself". Put the bass on the relative minor third instead of the root and the same table sounds a five-note chord. Then run both pulse channels on that table, one at 25 % duty and the other at 50 %, with the second offset by three ticks — at two ticks per note there are five usable offsets — and the pair reads as one wide sustained chord: "your brain just kind of glues them all together … you don't even hear the note switch in the arp, you just hear chords." Keeping the same instrument and swapping only the table (the same shape with a minor third for the minor chord) avoids one instrument per chord.

On the wave channel there is a way to get a second note without arpeggiating at all: draw it into the wave. The ghost-channel sounds base + harmonic simultaneously, which no C command can do — at the cost of being limited to the octave and the octave + fifth (source: s-chipmusic-lsdj-ghost-channel).

Detune › LSDj #

The pulse instrument's FINETUNE detunes PU1 downwards and PU2 upwards, and PU2 TSP. transposes pulse 2 — the manual notes these "create interesting phase effects when the same phrase is played on both pulse channels", which is the standard fat-lead recipe: one chain in both pulse columns. Fxy on a pulse instrument sets PU2 TSP (x) and finetune (y, 1/32 semitone per step) from a phrase or table; WAVE instruments have their own FINETUNE (source: s-lsdj-manual).

Version notes: the wave instrument got its own FINETUNE (-F+F) in lsdj 7.7.4, and from 9.1.0 instrument FINETUNE has two digits — an old value of 01 equals the new 10 (sources: s-intense-tech-12-scoping-out-new-features, s-intense-tech-19-new-noise-and-910-news).

Fake echo / delay › LSDj #

Two native shortcuts: Rxy retrig with a decreasing volume digit — the manual's RF4 "retrig the sound every fourth tick, decreasing amplitude (echo effect)" — gives a same-channel echo without extra rows (retrigger); and a second pulse channel playing the same chain a few steps later with a lower E amplitude or a quieter instrument, panned to the other side with O (stereo-panning). Dxx delays a note by ticks for finer offsets than a step (source: s-lsdj-manual).

Hypnogram's groove delay: give the echoing pulse channel a groove whose first line lasts 0A ticks, so every note after it arrives 4 ticks late; the next phrase returns to groove 0 and keeps the offset; a second groove whose last line lasts 2 ticks cancels it — finetune the two pulses apart to thicken (source: s-intense-tech-07-groove-and-tick-tricks-part-2). danimal cannon's rule for a spare channel: double, echo, octave or detune what is already there, "compensate volume to taste" (source: s-chipmusic-lsdj-advanced-tricks).

A delay inside one channel (source: s-painperdu-03-isometric-sav-walkthrough): two instruments that differ only in panning — one L, one R — alternating in a single channel, playing the same phrase offset by three notes. "It's like a delay of this, offset by three, all in one channel." The alternative he names is an AUTOMATE table with L/R and an H (stereo-panning); he used two instruments because those instruments' tables were already busy with pulse-width modulation and a slight vibrato.

Typed echoes, and the two-position lag (source: s-lsdj-and-you-echo-chamber). Write the echo as notes in the gaps, played by a second instrument with the same sound at a lower volume and a shorter envelope — and pitch each echo to the note before last, not to the note it follows: in a C – B – G – E run, the echo after B is the C, the echo after G is the B. Carry the previous phrase's last note in as the first echo of the next so the loop stays continuous. From there: pan the echo instrument to one side ("panned echoes are often used in professionally produced tracks, and the trick works well in LSDJ"), or run an automated table that pans it left and right on alternate notes. Spending a second channel buys a chorus rather than an echo — copy the phrases into pulse 2, shift them one tick later, lower the volume and set PU FINE TUNE to 2, which "will create a sort of chorus effect when the notes play in unison with pulse channel one" (detune). roboctopus's habit is to leave the echoes to the end: "in the final stages of working on a track, I often look for every bit of free space in the patterns and see if I can add an echo here and there."

Filter programming on the SID › LSDj (the wave synth's filter) #

Not a filter on the output like the sid's, but a filter applied when the synth generates its 16 waves, so what it shapes is the wavetable itself. FILTER is Lowp / Highp / Bandp / Allp, with CUTOFF 00FF and Q; both interpolate from the synth's first wave to its last (source: s-lsdj-manual).

These are not filters in the sid sense at all — nothing is filtered on the way out: "this is a wavetable synthesizer, it's not a subtractive synthesizer, so the filters that you see here are actually just kind of emulated … it will just generate what you might expect to see from these kinds of filters" (source: s-defensemech-wave-channel-ramble). What they shape is the 16 waves the synth writes.

Two things make it unusually literal. First, CUTOFF is calibrated in harmonics: every multiple of 10 is one partial, so bandpass at 20 sounds the octave, 30 the octave + fifth, 40 two octaves — the filter selects an interval (harmonic-series). Second, lowpass at CUTOFF 10 with Q 3 and VOLUME 08 leaves the fundamental alone, which is how you get a sine out of a channel that has no sine setting (source: s-intense-tech-01-wave-synth-deep-dive-part-1).

Walked up by ear on a bandpass with high Q, the whole series is audible: 10 fundamental, 20 octave, 30 fifth, 40 octave, 50 major third, 60 fifth, 70 an out-of-tune seventh, 80 octave, then 90 a major second, A0 a major third, B0 a sharp fourth, C0 a fifth, D0 a flattened sixth-to-seventh, and nothing much above that — "it probably only generates up to here really". On a square signal the even harmonics are simply absent: CUTOFF 20 changes the volume and nothing else, and the first thing that speaks is the fifth at 30 (source: s-defensemech-wave-channel-ramble). A sweep that must outlast one synth's sixteen waves is built as a chain of synths, one CUTOFF slice each, played in sequence (wavetable-programming; source: s-defensemech-learning-lab-shorts). A sweeping CUTOFF with a high Q is the channel's wah — start high, end low, PLAY ONCE, SPEED 3, LENGTH F.

Q is what makes a sweep audible rather than merely dark: "if you're just going to have a standard lowpass you're just gonna hear more and more bass and less and less treble; with the resonance you're gonna actually have some kind of a sonic cursor" (source: s-painperdu-02-wav-channel-walkthrough).

Because the synth screen is editable while the song runs, Q is also a performance control and not only an instrument setting: "altering Q in wave instruments while a song is playing is a lot of fun for sweepy type stuff" — and Lazerbeat notes it works in song mode, not just live mode (live-tracking; source: s-chipmusic-lsdj-live-performance).

Allpass is the odd one and the useful one for two-note sounds: it passes everything and shifts phase around the cutoff, so a high Q promotes one partial to near-melodic prominence while "no matter how much you boost this Q you really never lose the root note" — defense-mechanism's route to a power chord on one channel, with Q around 89 for the fifth. Lowpass gives a cleaner but thinner version of the same, with the harmonics above the fifth rolled away (source: s-defensemech-ghost-channel-allpass; the technique is ghost-channel). Whether the filter overdrives is decided by DIST and LIMIT rather than by the filter itself (wavetable-programming).

Ghost channel (two notes in one wave) › LSDj — drawn by hand (the original method) #

  1. Draw the base. A sine (Lowp, CUTOFF 10, Q 3, VOLUME 08 is the cleanest sine the channel makes — source: s-intense-tech-01-wave-synth-deep-dive-part-1, collected on wavetable-programming) or any smooth wave, at every volume you want the base to take: "starting from silence all the way to the maximum volume".
  2. Add the rider. On a copy of each base wave, push runs of samples up by a uniform amount — the same operation that turns silence into a square, applied to the sine as a baseline. Tyler Barnes counts "1 2 3, 1 2 3" for a rider three units high; the run length is the 16/x above. Repeat for each rider octave.
  3. Add rider volumes. From each superimposed wave, "decrease those Peaks by one pixel every time until you get back to that original sine wave". A three-pixel rider gives three ghost volumes — the rider's dynamic range is its height.
  4. Play it. The wave instrument's PLAY is MANUAL; the note in the phrase sets the base's pitch, the wave frame sets the ghost. "If I want to change the Octave of that square wave I'm going to be changing the frame … the sine wave stays the same octave but only the square wave moves." To move the base under a fixed ghost, do it in reverse: raise the note an octave and step the frame back by the compensating amount. Fxx steps frames relatively, F10 jumps a whole synth (source: s-lsdj-manual).

Labour savers from the thread (source: s-chipmusic-lsdj-ghost-channel): SELECT+B starts a selection, the cursor extends it and UP/DOWN offsets the whole run — this also copies, and SELECT+A pastes; holding A with LEFT/RIGHT or UP/DOWN mirrors the selection. "By using these tricks and abusing symmetries in the waveforms, you can speed up the manual labor a lot." A saw rider works too (steps of 1, 2, 3, 4), but a square rider was found to give "more octaves and a louder sine".

Ghost channel (two notes in one wave) › LSDj — with the filter (the cheap route) #

Boost the wanted overtone instead of drawing it. In the synth screen, Allp with a low CUTOFF and a high Q lifts one partial into audibility: "the idea that you can have extra notes in the wave channel — it's really talking about this overtone emphasis that sounds like almost two notes … you've got the low note but then also that octave, or three if you use allpass with Q boosting that fifth: the power chord" (source: s-defensemech-ghost-channel-allpass). Allpass over lowpass, because "no matter how much you boost this Q you really never lose the root note"; lowpass when you want the fifth alone and the top rolled off, which is cleaner but thinner. A Q around 89 is where the fifth sat for defense-mechanism — lower is "kind of subtle", higher "too much".

CUTOFF is calibrated in overtones, so the interval is choosable rather than hunted: every multiple of 10 is one harmonic — 20 the octave, 30 the octave + fifth, 40 two octaves (source: s-intense-tech-01-wave-synth-deep-dive-part-1). That also makes bandpass at CUTOFF 30 with a high Q a third route to the same power chord (inference from the same source — untested here).

Ghost channel (two notes in one wave) › LSDj — crunched from audio #

Render the two-note chord you want in any synth or DAW, then let lsdj-wave-cruncher reduce it to a 16-frame synth and liblsdj's lsdj-wavetable-import patch it into the song. This is exactly what the 2013 thread asked for and did not have — "i wonder if there's a tool that can autogenerate these waves and spit out an lsdsng" (source: s-chipmusic-lsdj-ghost-channel); the tooling arrived later (sources: s-intense-tech-05-wave-cruncher-instrument-library, s-intense-tech-08-dotcnts-wave-cruncher). The harmonic constraint still applies: a crunched interval that is not a harmonic of the played note will beat against it.

Instrument design beats note count › LSDj #

The manual's synthetic drum recipes (chapter 3.6) — they free the wave channel's kits for other duties:

drumchannelrecipe
bass drumPU1ENV C3/0/0 (strong attack, fast decay), WAVE 50-50, SWEEP 63 (high start, fast decay), play at C-6; TRANSP. OFF so chain transposes don't move it; tweak ENV/LENGTH for snap
snareNOIENV F1/D3/0, note value around 30 sets the timbre; P/V make it livelier
hi-hats / cymbalsNOInote value around 38 for high-frequency content, shape with ENV; lower notes for rougher cymbals
wave bass drum (best)WAVPITCH = DRUM, TRANSP. OFF, synth SIGNAL triangle, VOLUME 30; instrument table: step 0 P C0, step 1 transpose 80 + L 30 (slides to the lowest possible note without wrapping); play at C-5/C-6 or above

Envelopes are ENV. triples of amplitude + speed (32/AD/10: attack from 3 to A at speed 2, slow decay to 1, hold); E and the table envelope column override per note. Kit instruments give real drum-machine samples (TR-808/909/606/707/727, CR-78, LinnDrum, DMX…) with OFFSET/LOOP/CLIP and the S loop-point and F offset commands for timbral tricks. Dxx delays and Rxy retrigs help flams and rolls (retrigger) (source: s-lsdj-manual).

What the chip adds to these recipes (sources: s-pandocs-audio-registers, s-pandocs-audio-details): the noise channel is a 15-bit LFSR clocked at 262144 ÷ (divider × 2^shift) Hz — a lower clock sounds "harder", a higher one "softer" — and its 7-bit mode gives "more regular output; some frequencies sound more like pulse than noise", LSDj's pitched noise. Switching from 15- to 7-bit mode can lock the generator into silence until it is retriggered: the hardware reason for PITCH = SAFE. The PU1 bass drum's SWEEP is register NR10; an upward sweep that overflows switches the channel off, a downward one stops at period 0 (pitch-slide-and-portamento). K clicks because switching a channel's DAC off pops, while volume 0 with the DAC alive is silent — presumably what the click-free E00/E11 do (inference).

Defense Mechanism's recipes (intense-tech, LSDj 6–9; sources: s-intense-tech-10-kicks-part-1, s-intense-tech-11-kicks-part-2, s-intense-tech-17-the-joys-of-noise, s-intense-tech-18-adsr-makes-life-easier, s-intense-tech-12-scoping-out-new-features, s-intense-tech-15-lets-mix-it-up-and-down):

drumchannelrecipe
wave kickWAVa kit kick, or a sine/square-like synth wave with PC0, note C5–C7 or higher for the attack; PITCH = DRUM for the logarithmic fall; table P (fast) then L with transpose 80 (wavetable-programming)
Kyoto kickWAVa noisy wave in slot 00 for one tick, clean waves after (F01, or PLAY LOOP / LENGTH 1 / REPEAT 0 / SPEED 01)
kick → bassWAVLSDj 7: DRUM, start two octaves up, L with transpose E8; LSDj 6: FAST + TRANSPOSE ON, octave transposes in the table; or just a groove
wave snareWAVP then L to a tuned note, E commands for the decay, layered with a noise snare
pulse kick / snare / tomsPU1, PU2DRUM pitch; 50 % duty "to get the most impact"; snare = the wave snare table without E (instrument envelope for the decay); toms = shorter LENGTH and P directly in the phrase
sweep drumsPU1the hardware sweep: S F4 kick, S E3 snare, similar E-values for toms
noise kickNOIshapes ending in 0–7 (short-loop) are tonal; base shape 95, table transpose 10 on tick one (= A5), then 93, 91, 90, 80, 70, 60; S MODE STABLE; "noise kicks sound great when they are LOUD"
layered kickNOI + PUa very short noise kick in the lowest octave for the lows plus a pulse kick for the falling pitch and tone (Dox The Fash remix)
hi-hat with transientNOIADSR: volume 6 quickly down to 4, then fade — cuts through better than a plain fade from 4; maybe only on downbeats
snare (LSDj 8.8+)NOItransient stages in the ADSR instead of E commands in a table; stage length 1 = instant decay
random crashNOIZ after the shape or S command: first digit +0…4 capped below F, second digit F (randomization-and-probability)
pitched noise "pulse"NOIR01 (8.9.3) or R80R8F; pitch from rate × tempo × shape; LENGTH or ADSR for loudness (retrigger)
deeper pulse kick (7.7.4+)PUR8x, the super-fast retrig, on a pulse kick reaches "about 3 whole tones lower than the pulse channel is normally capable of" (source: s-intense-tech-12-scoping-out-new-features)
snare with transient (Pain Perdu)NOIinstrument volume around 90, the table's E pulling it down after the first tick, an E beside the note in the phrase to scale the burst — cuts through "without overpowering the other channels"; works on other noise and even pulse instruments (source: s-intense-tech-15-lets-mix-it-up-and-down)

The noise shape chart (first digit octave, second digit divisor, 0–7 short-loop, 8–F long-loop) is on lsdj. Heard in: .exe's NOIZE JAMS and a demo by they/them use the noise channel alone (source: s-intense-tech-17-the-joys-of-noise).

Noise drums since 9.1.0 (sources: s-intense-tech-19-new-noise-and-910-news, s-intense-tech-21-whats-new-in-lsdj-92): the shape bytes became ordered notes — long-loop noise as 003B from low to high, short-loop noise as the note names C, D, F and G# in octaves −9 to 8 — and P now sweeps them smoothly (P01 applies S01 every 4 ticks, P04 every tick), so a kick, a hi-hat and a crash can come from one instrument with P in the phrase instead of a hand-made S table. Old songs convert their noise notes but not their transposes or S values; read from the article's converter, the noise-kick recipe above becomes C 0 for the base 95, C 1 for the tick-one A5, then C-1, F-2, D-2, D-3, D-4, D-5 — a plain descending line. S MODE FREE/STABLE was removed in 9.1.0 and, after random mutes turned out to happen inside one loop mode as well, replaced in 9.1.3 by PITCH FREE (the old STABLE: restart only when going from long-loop to short-loop) and PITCH SAFE (restart on every value change — rougher, but "guaranteed never to mute"); noise instruments also gained TRANSP, C arpeggios limited to the available notes (F 5 with C12 = F, G#, C) and a tick-based V. Emulators (BGB, SameBoy) and most Game Boy Advance models never mute; many Game Boy models still can.

A beginner's set from sabrepulse's tutorial (undated, pre-8.1 ENVELOPE field; source: s-sabrepulse-getting-started-with-lsdj):

soundchannelrecipe
pulse kickPU1, shared with the bassKICK: envelope F1, duty 50 %, TABLE 00; table: PF1 in the first command row bends the pitch down, K00 on the second-to-last row kills the tail "to avoid clicking"; C5 on rows 0, 4, 8, C, the bass C3 on 2, 6, A, E (channel-interleaving) — chosen because the kit kicks are "really weak and not very loud"; credited to a recipe on the LSDj wiki
bassPU1BASS: envelope D3 ("short and punchy"; the default is A9), duty 50 % ("a good low bassy sound")
leadPU2LEAD1: envelope C2, duty 25 %; C07 on a note makes a chord
snareNOISNARE: envelope about C3, a snappy LENGTH, shape (the tutorial says "sweep") EF
hi-hatNOIHAT: envelope A1 or A2, length and shape untouched, before and after each snare

Community recipes (sources: s-infu-getting-started-with-lsdj, s-chipmusic-noise-drum-threads, s-chipmusic-tables-and-chords-threads, s-chipmusic-kotlinski-interviews):

soundchannelrecipe
hi-hat (Infu)NOIENV 75/00/--, R02 on the notes; cymbals from a high metallic note such as C 7
noise kick (Infu)NOIENV F4/00/--, note D 0, PF0 beside it (or in a table); a long release keeps the punch
snare (Infu)NOIENV 88/00/-- at volume 9 plus the snare table (instrument-tables)
noise kick (Mrwimmer)NOIenvelope decay 1, shape FC, table --, SF0, SF0, SE0, --, H05 — a quick downward sweep
snare (Mrwimmer)NOIdecay 1–2, shape FE or FD
snare (metatronaut)NOIENV A3, shape AE, played at C6; table rows F0 OL-, F0 O-R, -- OLR, H03 on row 8
snare (Victory Road)NOIa toned noise (C3/C4) morphed into white noise with a quick S, noise type FREE; a fast L→R pan flick at the top of the table, then centre
wave kick → bass (SketchMan3)WAVtable 12 PEE / 00 / 00 / 00 P00 / 01 / 00 …; snare companion 24 PEE / 12 / 12 / 00 P00 / 01 / 00
wave kick (Infu)WAVa high note, table PD0, PITCH DRUM so low notes do not wrap, K00 on step 6 to clear the way for the bass
pulse bass (Kotlinski)PUduty 15 or 25 on the first tick, then 50
pulse cymbal (Monodeer, per Dire Hit)PUVFF — vibrato so fast it becomes a tone, "noise percussion out of a pulse channel"

Layering advice from the same threads: a high-toned wave kick under a noise snare "gives a really full and thick tone"; a wave-bass table with a short attack layered under the snare; noise + pulse snares "à la C64"; a loud hi-hat-like first row before a kick's sweep makes hi-hat + kick in one instrument; and "a noise kick is never going to blow out your subwoofer".

Where the wave-channel instrument material lives. Designing a WAV instrument is mostly designing its synth, so that whole body — the synth's SIGNAL/FILTER/DIST/PHASE chain read as harmonic content, LIMIT as the volume control the hardware lacks, the LENGTH interpolation chart, hand-drawn banks, and the sixteen-hand-narrowed-waves PWM instrument — sits on wavetable-programming (sources: s-intense-tech-01-wave-synth-deep-dive-part-1, s-intense-tech-02-wave-synth-deep-dive-part-2, s-lsdj-and-you-pwm). Two design decisions worth restating here: an instrument's envelope can be its own sidechain — on the wave channel E02 is 50 % and E03 100 %, so 02 then 03 on the steps after the kick is an audible pump locked to the 16th, and on the pulse and noise channels a per-beat envelope "that starts from zero and rises at the speed of A" makes hats and pads pump even where no kick plays (sidechain-pump; source: s-painperdu-04-sidechaining) — and the kick and bass sharing WAV is already a sidechain, so what you actually design is the recovery.

The noise channel after 9.1.0 (source: s-defensemech-noise-channel-92l). The channel was rebuilt, so older tutorials no longer apply: shapes now run ordered low to high (00~$3B are the long-loop, noisy ones; past either end you cross into short-loop pitched noise, labelled with the nearest note name), and C chords, P pitch bends, V vibrato and S all work on it. Design consequences:

  • Set the envelope instead of chaining E commands — "a much faster and easier way … and then I can just work on setting transpose commands". A snare is that envelope plus a couple of rising transposes, stopped with A20 or K.
  • R is the dynamics tool the hardware envelope cannot be. Hardware envelopes are one smooth slope, so a decaying repeat cannot be written with E; R with a volume digit "will reduce this by one level and keep these numbers" — ghost snares, quieter repeats, and triplet fills at a four-tick retrig (retrigger).
  • Hardware LENGTH still has one job: it overrides an E command, "so it kind of puts a cap on how long this envelope can actually be" — useful under a rising envelope.
  • Why PITCH SAFE exists, in hardware terms: the LFSR "sometimes … creates zeros, and that results in silence", so on real hardware (DMG, old CGB, some GBA units, the GameCube Game Boy Player) a pitch slide can simply cut out with no K. SAFE re-initialises the channel on every pitch change so it never cuts out, at the cost of a harsher texture — recoverable in part by slowing COMMAND RATE. Current SameBoy and BGB emulate the cutout; older builds do not, so a patch that works in an old emulator can die on hardware.

The SPEECH instrument, from people who have used it (source: s-chipmusic-lsdj-speech-synthesis). Jotie, who has shipped several: "It's slow, difficult and in my opinion, flawed. You can't delete wrong letters." The workflow that makes it tractable is to compose the allophones outside LSDj — "download an Atari ST emulator and write your lines in STSPEECH — it will show you how to do what you just wrote in allophones" (Steem SSE) — and transcribe the result into the word screen. Two craft notes: speech sits in the centre with everything else panned away from it, because "mixing is the only thing that is going to make your speech stand out" (stereo-panning); and phrase it musically — "don't put them on every downbeat tick, try and give them space and change the syllable when it's natural to do so". Scale the ambition to the tool: a hook, not a monologue.

An echo is an instrument, not an effect (source: s-lsdj-and-you-echo-chamber): a second instrument on the same channel, same sound, lower volume and a shorter envelope, with the echo notes typed into the gaps. The pitch rule is what makes it read as an echo — "the echoed note corresponds to not the note it immediately follows but the one before that" — a two-position lag, and the echo of the previous phrase's last note opens the next phrase so a loop stays continuous. Pan the echo instrument to one side, or table-pan it side to side for ping-pong. The expensive version is a chorus: copy the phrases into PU2 shifted one tick, drop the volume and set PU FINE TUNE to 2, "which will create a sort of chorus effect when the notes play in unison with pulse channel one" (fake-echo, detune).

Designing instruments that have to share a channel (source: s-chipmusic-lsdj-advanced-tricks). The thread's consensus is "definitely don't use one channel for just kick drums" (Saskrotch) — the wave channel does kick, bass and snare — which puts requirements on the instruments themselves: E commands so a ringing note survives an instrument switch, tables that end in "wild pitch commands … to add subtle little bleeps and bloops" (defiantsystems), and drums layered across channels rather than owned by one. danimal cannon's use for a free channel is entirely instrument design: double, echo, octave or detune what is already there, volume-compensated. Victory Road's caveat is the reason it works at all — "you'd be surprised at how many gaps in the music the listener's brain fills in on its own" (channel-interleaving).

Lead articulation (velocity, legato, late vibrato, drop-off) › LSDj (wave channel) #

The wave instrument's table does the articulating, and the trick is that a note without an instrument number does not restart the table (source: s-chipmusic-lsdj-wav-instrument-tutorials):

  • Attack / tonguing. Make the synth's first frame noticeably louder than the rest, set PLAY to MANUAL and put F01 on the first tick of the instrument's table. Every note that carries the instrument number gets the loud frame as its attack; notes typed without it are slurred into the previous one.
  • Flutter tonguing. Give a third frame a slightly different volume and shape and alternate between two frames from a second table — F01 forward, FFF back (FFF is −1 in F's relative arithmetic) — started from the phrase with an A command.
  • Breath. A frame or two of near-noise at the start "simulate[s] the attack phase of a musician blowing into the flute" (tyler-barnes); a very quiet noise-channel layer with a slow decay underneath does the same job from outside.
  • Vibrato with varied Vxx speeds rather than one fixed setting (vibrato). Victory Road's verdict: "it's all about articulation, really. LSDJ is really good for flutey articulation."

Worth reading against the counter-argument in the same thread: chasing an orchestral instrument on the Game Boy mostly disappoints, and "other people will only hear '8bit' anyway" (an0va) — the articulation is worth more than the timbre.

Multisampling and drum-kit instruments › LSDj kits #

The Game Boy's version of a drum-kit instrument, and it is a real map, not a metaphor. A kit instrument names two kits: "the first kit will be used in the left note column in the phrase screen; the second kit will be used in the right note column" — so one instrument addresses two banks of samples, selected by which column the note is typed in (source: s-lsdj-manual). Each kit holds 15 sample slots inside 3FA0 bytes — "just over two seconds worth of audio per kit, so whatever you put in has to count!" — at 11.468 kHz (source: s-little-scale-lsdj-kits; preparation is on chip-samples, patching on lsdpatch).

What that budget forces is the opposite of the IT piano: a themed set is split across slots, not crammed into one. little-scale's own releases show the convention — Mario Paint, "29 samples from the SNES program spread across two kits"; Street Fighter 2, "17 samples in 6 kits"; Street Fighter Alpha, "34 samples in 4 kits with one kit per character". Budget two to six kit slots for a voice or sample set and split by character or function (source: s-little-scale-lsdj-kit-releases).

Octave bass › LSDj #

Two rows of C-2 C-3 work as anywhere else, but the chord command does it in one column: CC0 "plays 0, C, 0, C, 0, C, …" — a true octave alternation at tick rate, slowed with CMD/RATE in the instrument screen. Neighbouring values give the variants: C0C = 0, 0, C (octave every third tick), CCC = 0, C, C, and C00 resets the chord (source: s-lsdj-manual).

The wave channel can also play the octave inside the note: a ghost-channel wave carries a rider at 2× the fundamental, so bass and octave sound together and the octave can be faded or stepped away without touching the bassline (source: s-chipmusic-lsdj-ghost-channel).

A related use of the same interval is the kick that turns into a bass note — start two octaves above and slide down with a P/L pair, or split the two with a groove; the recipes are on wavetable-programming and instrument-design (sources: s-intense-tech-10-kicks-part-1, s-defensemech-every-lsdj-kick).

Pitch slides and tone portamento › LSDj #

  • Lxx slide: slides to the note in the row over a duration xx — in ticks if the instrument's PITCH is TICK, otherwise in xx/360 seconds. Manual example: C-4, then F-4 L40, then C-4 L10 bends up to F and snaps back. In a table, L in the left command column uses the transpose column as target relative to the base note; transposes and slides add independently.
  • Pxx pitch bend: continuous bend at the given speed (P02 up 2, PFE down 2). Behaviour follows PITCH: DRUM = logarithmic at 360 Hz (kicks), FAST = linear at 360 Hz, TICK = per tick, STEP = instant pitch change without bend. On noise instruments P applies S every tick.
  • Legato: cut the instrument column with B+A to change the note without retriggering.
  • Fxy on pulse instruments sets PU2 transpose and finetune in 1/32-semitone steps — micro-detune rather than a slide (detune).

(source: s-lsdj-manual)

Hardware limits (source: s-pandocs-audio-registers): pitch is an 11-bit "period value" 0–$7FF; pulse frequency = 131072 ÷ (2048 − value) Hz, wave = 65536 ÷ (2048 − value) Hz (one octave lower at the same value). The scale is not linear in pitch: one step at value $500 changes the pitch by about 2 cents, at $7D0 by about a third of a semitone, and near the top by whole semitones (computed from the formula) — high slides step audibly, low ones are smooth. Period writes only take effect when the current sample ends. PU1's hardware sweep (NR10, LSDj's SWEEP and S on pulse): every 1–7 ticks of 1/128 s the period value changes by ± value ÷ 2^step; in the upward direction a result past $7FF switches the channel off (even with the pace at 0), and a downward sweep can never underflow — a rising sweep that goes too far ends in silence rather than at the top.

PITCH modes and their history (sources: s-intense-tech-10-kicks-part-1, s-intense-tech-11-kicks-part-2, s-intense-tech-13-kotlinski-interview): the pitch engine changed in 5.1.0 (johan-kotlinski: "actually a total disaster" at first — "it took way too long until it was on par with what was there before in terms of kick crafting"), losing the old logarithmic slides until version 6 added the instrument setting P/L/V — renamed PITCH in 7.0 — which governs P, L and V: FAST (formerly "HF") at the fastest rate, TICK much slower and tempo-dependent, STEP makes P a pitch offset (fun on kit snares), DRUM emulates the pre-5.1.0 logarithmic slides through a separate frequency lookup table and is not affected by tempo. In version 6 DRUM broke transposes in phrases and tables (turn the instrument's TRANSPOSE off); 7.0 (7.0.6 in November 2019) made transpose work with DRUM. L with transpose 80 in a table slides to the lowest note and stops there without wrapping. On noise instruments the commands act on the shape instead: S adds per digit (S01 on 4F gives 40, SFF gives 3E) and accumulates, whereas a phrase or table transpose changes the whole byte (4F + 01 = 50, + FF = 4E) and reverts when its row ends; P keeps adding every tick (FF, F0, F1, F2 …), C alternates base and added shape per tick (C01: FF/F0); CMD/RATE slows both. Smooth noise sweeps therefore need hand-made S tables (source: s-intense-tech-17-the-joys-of-noise) — that description holds up to 9.0.x; see the next paragraph for 9.1.0.

Later versions (intense-tech): version 7 (7.7.4, January 2020) added the FX/SPEED setting — renamed CMD/RATE in version 8 — which stretches each step of P (in TICK pitch only, like V), a wave-instrument FINETUNE of -F+F, and the R8x super-fast retrig that restores the old wave-channel pitch wrap: on wave the pitch becomes tunable instead of relying on P, and a pulse kick reaches "about 3 whole tones lower than the pulse channel is normally capable of" (retrigger; sources: s-intense-tech-12-scoping-out-new-features, s-intense-tech-14-lets-appreciate-version-8). In 9.1.0 the noise channel became an ordered scale (long-loop values 003B, then short-loop notes by octave), so P on noise now sweeps smoothly through it without a table, with a new speed scale — P01 applies S01 every 4 ticks, P04 every tick — enough for kicks, hi-hats and crashes from one instrument; the instrument FINETUNE also gained a second digit (old 01 = new 10) (source: s-intense-tech-19-new-noise-and-910-news). Contradiction: the 9.2.6 manual as read above says P on noise "applies S every tick", whereas article 19 gives P04 as the every-tick speed from 9.1.0 on (sources: s-lsdj-manual, s-intense-tech-19-new-noise-and-910-news). A beginner's pulse kick from sabrepulse: PF1 in the first command row of the instrument's table, K00 near its end (instrument-design; source: s-sabrepulse-getting-started-with-lsdj).

Forum practice for L (source: s-chipmusic-lsdj-faq): the command goes on the target note — "it bends the previous note to the new one" (A#6C 6 L02 down, C 5A#5 L02 up); L on an empty step bends the note "down to nil"; in the 2010 versions only L01/L02 sounded musical, and slides ignore the vibrato waveform (only the HF/non-HF setting matters). Without PITCH = DRUM a kick slide played on a low note wraps back to the highest octave (source: s-infu-getting-started-with-lsdj).

Slides as drum design (defense-mechanism, 2024–25; sources: s-defensemech-every-lsdj-kick, s-defensemech-noise-channel-92l):

  • P alone slides down and wraps if pushed too far, while L with transpose 80 always lands on the lowest note, C1 — so the two together separate the transient's speed from the body's slope, and the note written in the phrase only sets where the slide starts. That is the tuning control: "that allows me to actually tune the transient of the kick using the starting pitch in the note column", with higher octaves adding high end and the difference growing as the slide slows.
  • Stutters used to need an L 00 00 on the tick where the kick restarts, because R did not reset the pitch; in 9.4.0 R retriggers the pitch too, so a plain R in the table is enough (retrigger). (The version is read off screen in an auto-transcribed video; the wiki's LSDj version history otherwise stops at 9.2.6 — (unverified).)
  • Why PITCH SAFE exists, in hardware terms: the noise channel is a linear-feedback shift register that "sometimes … creates zeros, and that results in silence", so on real hardware — "especially like the original brick DMG", old CGBs and some Game Boy Advance units — a pitch slide on noise can simply cut out with no K. SAFE re-initialises the channel at every pitch change so it never drops out, at the price of texture: "it creates a harsher sound, it's just a totally different texture". Slowing the rate of change, or lowering COMMAND RATE with PITCH set to TICK, buys some smoothness back — and on a kick the restart is the sound, giving "almost a tonal aspect" where FREE "just completely loses its impact" (game-boy-apu, instrument-design).
  • P on noise keeps running after the note ends, so stop it deliberately.

Pulse width modulation (PWM) › LSDj #

The pulse instrument's WAVE parameter selects the duty ("typically 50-50 high/low", other waves for a more distorted sound); the Wxy command changes it from a phrase or table — with the hardware oddity that the instrument's LENGTH timer is reset, possibly extending the sound. A duty sweep is therefore a table with W on successive rows, looped with H (source for the commands: s-lsdj-manual).

What the hardware allows (sources: s-pandocs-audio-registers, s-pandocs-audio-overview): bits 7–6 of NR11/NR21 select one of exactly four duties — 00 12.5 %, 01 25 %, 10 50 %, 11 75 % — and Pan Docs notes that "there is no audible difference between the 25 % and 75 % duty cycle settings", so a W sweep has three timbres to step through; it is a stepped effect, never the continuous sweep of the sid. The W-resets-LENGTH oddity follows from the duty and the initial length timer sharing that register (inference). A pulse channel's phase is "only ever reset by turning the APU off" and the duty setting shifts the phase, which is "usually not noticeable unless changing the duty cycle mid-note" — a duty step can land anywhere in the cycle, so listen to the transition rows.

The W values count 00 = 12.5 %, 01 = 25 %, 02 = 50 %, 03 = 75 %, which is what makes a random duty possible: W on the note and Z03 on its repeats picks any of the four, and Z02 (12.5 / 25 / 50 %) is the better choice because 25 % and 75 % "effectively sound identical"; an added value past the range wraps to the remainder after dividing by 4 (randomization-and-probability; source: s-intense-tech-03-dont-sleep-on-z). A beginner's defaults from sabrepulse's tutorial: 50 % ("a good low bassy sound") for the bass, 25 % for the lead (source: s-sabrepulse-getting-started-with-lsdj).

Three more sources: the wave channel does the sweep the pulse channels cannot — Square with PHASE Normal from 00 to 1F is "a smoothly modulated pulse lead (commonly associated with the C64 SID)" (source: s-intense-tech-02-wave-synth-deep-dive-part-2); johan-kotlinski's own bass duty "depends on the octave. For the base, I go for 15 or 25 first tick, then switch to 50" — a W on the first tick of a table (source: s-chipmusic-kotlinski-interviews); and Dire Hit's reading of Trey Frey's "Dreaming": at the fade-out an H loop over two table steps flips the pulse width while an E release runs (source: s-chipmusic-tables-and-chords-threads).

On the pulse channels themselves the duty is also a drum parameter: for a pulse kick, 50 % is "the beefiest", and the channel's floor of C2 is what makes the wave channel the better home for a kick with real low end (source: s-defensemech-every-lsdj-kick).

A cheaper approximation of the same motion: VSHIFT combined with FOLD or WRAP, where the shifted part of the wave folds or wraps back in — "that's almost like a pulse-width modulation thing happening" (source: s-defensemech-learning-lab-shorts; wavetable-programming).

Hand-drawn PWM on the wave channel#

Before the synth screen could sweep PHASE, the wave channel got its PWM by hand, one wave at a time (source: s-lsdj-and-you-pwm): draw a square in wave 0 at VOLUME 10, then narrow the pulse a little more in each of the synth's remaining fifteen waves — copy a whole wave with SELECT+B twice and paste it into the next frame with SELECT+A, then edit, rather than redrawing. Play it with PLAY PINGPONG, REPEAT F, LENGTH F and a slow SPEED, and the pulse narrows and widens continuously: "PWM will allow your game boy to sound a bit more like a C64, though nowhere near as smooth and classy." The steps are audible — "you can hear the synth stepping through each frame" — but "less noticeable on leads/basses in a full mix … and barely discernible when used in a fast arpeggio". roboctopus's verdict: "It's great for giving a lead line a more organic feel, and it makes a pretty massive bass."

The article predates LSDj 7's silky wave, which removed the click from frame changes (wavetable-programming), so on a current version the stepping should be gentler than he describes (inference).

Randomization and probability (MayBe, RandomiZe) › LSDj #

  • Bxy MayBe in a phrase: probability that the note (or kit sample) to its left plays — first digit for the left kit, second for notes and the right kit. B00 never, B0F always, B08 about half the time.
  • Bxy in a table: a hop to row y that only happens with probability x (BF5 15 times out of 16, B84 about 50 %) — a table that sometimes takes a different path.
  • Zxy RandomiZe: repeats the last command that is not Z or H, adding a random 0..x to its first digit and 0..y to its second (Z02 adds 0, 1 or 2; Z22 any of 0,1,2,10,11,12,20,21,22). Put it after a V, P, E or F command for humanised vibrato, pitch, volume or sample offset.

(source: s-lsdj-manual)

  • Worked Z examples from hypnogram's 2016 post as rewritten by defense-mechanism for intense-tech (source: s-intense-tech-03-dont-sleep-on-z): random vibratoV00 on the note, Z03 on every repeat of the note, each acting as V00V03; random dutyW values count 00 = 12.5 %, 01 = 25 %, 02 = 50 %, 03 = 75 %, and Z02 beats Z03 because 25 % and 75 % "effectively sound identical"; random panningO values count OLR = 00, O__ = 01, OL_ = 02, O_R = 03, so OL_ followed by Z02 chooses among left, right and both while a start from OLR would include the mute; for these four-valued commands an added value wraps to the remainder after dividing by 4 (Z11 = 17 acts as 01); since version 6 Z also works in tables, and alternating OLR/O__ in an Automate table gives a random gate; random melodyFxy's first digit is PU2's transpose in semitones, so ZF0 after an F re-pitches pulse 2 anywhere up to an octave plus a major third above the note; random chordsC37 with Z10 yields minor or major, possible since version 6 made the digits independent (in version 4 they were not); random sweep — Hypnogram's signature lead (Phantasm Dragon, at 1:30) randomises a sweep, which only pulse 1 can do. A Z never randomises another Z.
  • Version notes: B arrived with version 7 (toured at 7.7.4 in January 2020) with the values B05 never hops, B85 about half the time, BF5 about 15 times in 16, and on notes B04 25 %, B08 50 %; on kit instruments the digits are the left and right samples separately — B48 = left 25 %, right 50 % (source: s-intense-tech-12-scoping-out-new-features). Since version 8 Z works with every command except H (and Z), which makes randomised straight-or-swung grooves possible (source: s-intense-tech-14-lets-appreciate-version-8). Contradiction: the version-6 manual said Z does not work with Hop, Groove and Delay; article 03's later footnote claims it does "as of version 8.1.9" including Hop, while article 14 and the 9.2.6 manual (s-lsdj-manual, above) exclude H (sources: s-intense-tech-03-dont-sleep-on-z, s-intense-tech-14-lets-appreciate-version-8).
  • Z on noise shapes for random crash cymbals (a trick defense-mechanism credits to an Exploring Chip Tunes video): because Z randomises each digit independently, the variation can be confined to one loop mode and octave — first digit +0…4 at most so it never wraps past F to 0 (silence), some rows with a first digit of 0, second digit F for a completely random divisor (source: s-intense-tech-17-the-joys-of-noise). "Probability sequencing" is one of the features johan-kotlinski lists for the stable LSDj 8 (source: s-intense-tech-13-kotlinski-interview).

Retrigger and resync › LSDj #

Rxy: x changes pulse/noise volume per retrig (0 none, 1–7 increase, 9–F decrease), y sets the rate (1 fastest, F slowest, 0 = retrig once). R8x is resync: R80 resyncs at 360 Hz, R8F stops it. Examples from the manual: R01 retrig every tick, RF4 retrig every fourth tick with decreasing amplitude (echo effect). CMD/RATE in the instrument slows R down. Dxx delays a note by ticks, which combines with retrigs for flams (source: s-lsdj-manual).

What a hardware trigger does (bit 7 of NRx4; sources: s-pandocs-audio-registers, s-pandocs-audio-details): the channel is switched on (unless its DAC is off), an expired length timer is reset, the period divider is reloaded, the envelope timer is reset and the volume set from NRx2; on CH1 the sweep restarts, on CH4 the LFSR is reset to 0, on CH3 the wave read index restarts while the last sample stays in the output buffer. A pulse channel's duty step is not reset — only its timer is — so "retriggering a pulse channel often enough will cause its 'duty step' to never advance": very fast retrigs freeze the waveform, which is presumably the mechanism behind the resync pitch drop (inference). Because a trigger zeroes the noise LFSR, retriggering CH4 at a steady rate repeats the same noise burst and turns it into a pitched, pulse-like tone (inference from the LFSR reset); a retrigger is also the cure for a noise generator locked up by a 15→7-bit switch (game-boy-apu).

From Intense Tech (sources: s-intense-tech-17-the-joys-of-noise, s-intense-tech-18-adsr-makes-life-easier): depending on the version R00 retrigs once or every tick — in 8.9.3 R01 retrigs every tick. On the noise channel a fast retrig chops the noise into a pulse wave: the pitch follows the R rate, the tempo (tick length) and the noise shape; a shorter LENGTH or ADSR controls the loudness; R80R8F, "the super-fast retrig", ignores tempo and LENGTH. With the 8.1.0 ADSR, R's per-retrig volume change gives a tremolo. Infu's hi-hat is a noise instrument with R02 on its notes (source: s-infu-getting-started-with-lsdj); Dire Hit's late discovery: "the first number of an R command is an envelope" (source: s-chipmusic-tables-and-chords-threads).

Version history of R (sources: s-intense-tech-12-scoping-out-new-features, s-intense-tech-14-lets-appreciate-version-8): the "super-fast retrig" R8x arrived in the 7.7.4 development version as the much-requested return of the old wave-channel pitch wrap — the sound generator restarting at a very fast rate; on the wave channel the resulting pitch can be tuned by the R value rather than left to P, and on a pulse kick it reaches "about 3 whole tones lower than the pulse channel is normally capable of" (three whole tones = the manual's half octave). FX/SPEED, the 7.7.4 setting that slows C, P, R and V, became CMD/RATE in version 8; version 8 also made R on the wave channel restart the synth from its first wave frame, and with the version-8 ADSR RFx behaves like a tremolo.

R as the noise channel's dynamics control (source: s-defensemech-noise-channel-92l): the hardware envelope is a single smooth slope, so a decaying repeat cannot be written with E at all. R with a volume digit "will reduce this by one level and keep these numbers" — ghost snares, quieter repeats, and triplet fills from a four-tick retrig; leaving the instrument untriggered and changing only the shape is the variant. On kicks, R did not reset the pitch before LSDj 9.4.0, so a stutter needed an L 00 00 on the restarting tick; since 9.4.0 a plain R retriggers the pitch and the workaround is gone (source: s-defensemech-every-lsdj-kick).

The instrument number is itself a retrigger (source: s-painperdu-01-instrument-retriggering). A note plays without one; what the instrument number does is restart everything the instrument owns — the envelope, its table, and on the wave channel the synth's wave cycle. "It's really important to know that instrument and note are actually independent." Leave it off and a rising envelope keeps rising across the following notes, so triggering once per beat turns a run into a swell that resets on the beat, and a long PINGPONG wave instrument (LENGTH F, slow SPEED) finally gets to complete its cycle instead of restarting every note. With a table set to AUTOMATE the table advances per instrument value rather than per tick, so the stock L/R panning table gives L R L R when every note carries the number and L L R R when only every second one does (stereo-panning). It also costs less: fewer instrument numbers means fewer blocks and less CPU. The trap is drums — a kick on the wave channel is another instrument, so it re-triggers the lead that follows; the fix is to fit the synth's cycle between the hits (LENGTH 3 at SPEED 6 steps a frame every 16th note).

ROM retuning — patching a tracker's pitch table › LSDj — by hand #

Offsets verified on 3.8.9 only (source: s-little-scale-lsdj-tuning-tables):

whatoffsetsizenotes
GB / GBC / GBA pitch table$6D3A (27,962)216 bytes = 108 × 2starts with the bytes 2C 00 9C 00 06 01
Super Game Boy pitch table$6E12 (28,178)216 bytesimmediately after the first, recomputed for the SGB1's ~2.4 % fast clock
  1. Open the ROM in a hex editor in overwrite mode (little-scale uses Hex Fiend on OS X). Do not insert — the ROM must stay 1,048,576 bytes.
  2. Find the table: "starts just after location $6D30 with the bytes 2C 00 9C 00 06 01. Select 216 bytes starting with 2C and 00" (source: s-little-scale-underclocking-and-retuning).
  3. Paste your 108 little-endian values over it.
  4. Patch the second block too. KiGB reads only the SGB table "regardless of emulator settings", so a ROM patched in one place will test wrong there and play wrong under a Super Game Boy (source: s-little-scale-lsdj-tuning-tables).
  5. Save, flash, play.

ROM retuning — patching a tracker's pitch table › LSDj — with lsdj_tune #

abrasive's Perl script does all of the above from the command line and, uniquely, rewrites the note names as well, so the display matches the tuning. Built for LSDJ 3.9.9 (source: s-little-scale-abrasive-lsdj-tune):

lsdj_tune --et 24 --base A5 440 --rom lsdj.gb --out lsdj_et24.gb
lsdj_tune --cstep 78 --base 0 70 --rom lsdj.gb --out lsdj_alpha.gb      # Wendy Carlos alpha
lsdj_tune --ratio 1,256/243,9/8,32/27,81/64,4/3,729/512,1024/729,3/2,128/81,27/16,16/9,243/128,2 \
          --names D,Eb,E,F,F#,G,G#,Ab,A,Bb,B,C,C# --base 0 73.42 --rom lsdj.gb --out lsdj_pyth.gb

Modes: --et n, --cents, --cstep, --ratio; all 108 notes may also be given explicitly. Its stated limitation is that the base-frequency option "won't take custom note names, and sequences always start on the base note".

Sample looping (perfect loops, sustain loops, long loops) › LSDj: the loop points are a pattern command #

The Game Boy's kit samples loop too, and LSDj is unusual in letting the pattern move the loop while the sample plays (source: s-lsdj-manual).

  • The kit instrument's LOOP is three-way: OFF does not loop, ON loops and starts playing from OFFSET, ATK loops the sample but starts playing from the beginning — so ATK keeps the attack and repeats the body, the shape a sustaining instrument needs. OFFSET is the loop start (or, with LOOP off, a plain sample-offset) and LEN the length.
  • Sxy on a kit instrument "changes the loop points. The first digit modulates the offset value; the second digit modulates the loop length. (17 = increase, 9F = decrease.)" — the manual's own note is that "used creatively, this command can be very useful for creating a wide range of percussive and timbral effects". Walking the loop length down over a few rows turns any sampled tail into a pitched buzz; walking the offset along it granulates (retrigger, wavetable-programming).

The budget behind all of it: 3FA0 bytes per kit at 11,468 Hz, so a loop measured in time is measured in tens of milliseconds, and the sample must be lowpassed at 5,734 Hz and faded at both ends before it ever gets there (source: s-little-scale-lsdj-kits; chip-samples).

Sample offset tricks › LSDj #

The Game Boy has sample memory after all — the kit ROM — and LSDj offsets into it two ways (source: s-lsdj-manual).

  • Fxx on a kit instrument "modifies the sample position. 007F steps forward, 80FF steps back". Unlike 9xx/Oxx it is relative and it goes backwards, so a column of small F values walks a sample forwards and back — stutter and grain rather than a jump to a fixed point. (The same command means PU2 transpose + finetune on a pulse instrument and a wave-frame step on a wave instrument, so it only reads as an offset in a kit.)
  • The instrument's OFFSET parameter sets a static start point: with LOOP OFF it "can be used for skipping the initial part of a sound", the classic snare-tail-becomes-a-hi-hat trick that ST3's manual also documents; with LOOP ON it is the loop start. LEN cuts the other end (chip-samples, instrument-design).

Shuffle, swing and FunkTempo › LSDj #

Grooves are the native mechanism: each groove lists how many ticks every phrase (or table) step lasts. Groove 0 defaults to 6/6; 8/5 makes even steps last 8 ticks and odd steps 5 — swing; other lists give triplets and complex rhythms. In the groove screen A+UP/DOWN changes the swing percentage while keeping the total ticks, so the song speed stays constant (6/6 = 50 % → 7/5 = 58 %). Gxx selects a groove in a phrase or a table (SELECT+DOWN on it edits the groove); tables can run their own groove for rhythmic envelopes. The T tempo command is exact only for 6-tick grooves — otherwise use bpm = desired × ticks/step ÷ 6 — and sync modes expect 6-tick grooves (source: s-lsdj-manual).

Grooves also solve arrangement problems: to shorten the gap between a kick and the bass note that follows it, give the row pair its own groove — in defense-mechanism's example the first tick count of groove 10 is how long the kick lasts and the second how long the bass lasts, "No fancy kick transposition needed!" (source: s-intense-tech-10-kicks-part-1).

Defense Mechanism's groove practice (sources: s-intense-tech-06-groove-and-tick-tricks-part-1, s-intense-tech-07-groove-and-tick-tricks-part-2): a tick is the smallest time unit, its length set by the tempo; a G on a line makes that line last the groove's first value and the following lines the next values. Hypnogram's convention — grooves 010C set to 1…12 ticks so G03 reads "three ticks per line", 101F for custom feels (G10 = 7/5) — keeps commands legible. Swing lives per channel: 7/5 on the wave channel (kick and bass) against 6/6 elsewhere sits "in-between swung and straight"; 8/4 and 9/3 swing harder; 8/5/7/4 mixes two feels in 24 ticks for a human lead; 3/9 (or 3/9/6/6) makes room for note bends or a three-tick kick before a bass note. LSDj 6 restarts a groove on a repeated G, older versions do not. A 3-tick groove doubles phrase resolution at half the phrase length — H gives it back (H71 = hop to line 1 seven times). Triplets: G08 (8 ticks = 24 ÷ 3) for the three notes, then H00 to skip the last 6-tick line so the next phrase lands on the beat; 3/4 time can be a groove alone (a trick from Zef). Tables take grooves too (2 or 3 ticks for arps and duty changes), and Hop + Groove inside a table gives Hypnogram's dramatic "Zenarchy" sound. Mrwimmer's version of the same idea: G01 on a table's first line with groove 01 = 2/2 halves an arpeggio's speed without doubling rows (source: s-chipmusic-tables-and-chords-threads); aphasia's live tip: with a MIDI keyboard, the lowest possible groove and a high tempo minimise quantisation (source: s-chipmusic-lsdj-faq).

Tempo is not BPM (source: s-painperdu-06-grooves). The TEMPO field sets the tick rate; the groove decides how many ticks a step lasts, so the groove is what sets the musical speed and the feel. Picture the song as an hourglass: "tempo says how fast they will fall, but grooves say how many of them will be in each note" — hold TEMPO at 255 and the music still speeds up, slows down and changes feel as the grooves change. Consequences worth keeping:

  • A 16-step phrase is a bar only at groove 6; at groove C (12 ticks) it is half a bar, at groove 3 two bars. A ternary bar is 12 steps, not 16, so end it with an H hop.
  • A groove needs only one value if the speed is constant — the list wraps. A longer list is a per-step tempo map: 12 6 12 6 6 6 2 3 is two long notes, two short, two long, and so on, and nothing stops you writing 1 6 3 4 F A for experimental work.
  • Grooves are per channel, so pulse 1 can run at groove 3 while the wave channel runs at 6 — as long as the tick totals match (eight phrases at 3 = four phrases at 6), "at the end of the day they still sing together".
  • Triplets by arithmetic: double the tempo and the groove together to keep the BPM (groove C = 12 ticks), then run the triplet channel at groove 8 — 12 ÷ 3 × 2.
  • Tables take grooves too, and that is the space saver: "by default tables run at one tick per step", so a G in a table halves what a slow arpeggio costs and lets a percussion table pack more commands into the same time. Pain Perdu credits the trick to Joe Toye of Chiptune Belgium; Mrwimmer describes the same thing above.

Three more things pain-perdu does with grooves, from the walkthroughs:

  • The groove reaches into the instruments. A wave-synth instrument's SPEED is ticks per wave frame, so it should be set to the groove's tick count: at groove 6/6, SPEED 6 puts exactly one wave frame on every step — "this is relevant to the groove, so if you're in groove 5 5 this is going to be 5, for groove 7 7 this is going to be 7" (source: s-painperdu-02-wav-channel-walkthrough; wavetable-programming).
  • The groove is a resolution knob, not only a feel. For a sidechain recovery, halving the groove to 3 makes each step a 32nd, so the same two E commands recover twice as fast — "it's almost as if you hear the bass being triggered at the same time as the kick, but this is an illusion being made possible by the fast groove" (source: s-painperdu-04-sidechaining).
  • Two grooves at once, with the hop that keeps them honest. A chord section at groove C C (12 ticks per step) against another channel at groove 2 "time together perfectly, you just have to be a bit of math" — six to one — but the fast channel needs an H hop at the end of its phrase or the two do not land together. In the same song the tempo itself is written as a curve, a new T value per phrase from 100 up through 142 and 150 to 180 and back down to 80: "each phrase I'll have a new tempo that goes slightly up very organically … this was really painstaking … [but it] really pays off". T affects the whole song from whichever channel carries it, so it goes on the second tick of a phrase when a G has taken the first (source: s-painperdu-03-isometric-sav-walkthrough; arrangement).

defense-mechanism's 2024 version of the kick-into-bass groove is two instruments and two grooves: a wave kick and a separate 808 bass, with a groove of 3 9 — "I want this kick to play for three ticks and then the bass for the next nine" — and a second groove 3 9 6 so the following bar's timing works, returning to groove 0 after. It costs two groove slots and buys independent control of both sounds, plus the W command for how fast the bass decays (source: s-defensemech-every-lsdj-kick; the values are spoken over an auto-transcribed video and are (unverified); instrument-design).

Since version 8 the Z command also randomises a preceding G, so a phrase can switch between a straight and a swung groove by chance — Defense Mechanism expected "very interesting rhythmic consequences" (source: s-intense-tech-14-lets-appreciate-version-8); see randomization-and-probability.

Sidechain pump › LSDj #

The table envelope column is a custom amplitude envelope (amplitude digit + duration in ticks, loop with H in the second digit — the manual's tremolo example); a table that starts low and rises over a beat, run with a groove of the beat length, pumps any instrument that uses it. Exy on pulse/noise sets amplitude x with release y per row for hand-drawn ducks (source for the mechanics: s-lsdj-manual).

In a full arrangement it comes out as an envelope on every chord instrument: each arp note triggers a rising envelope so the chords give way on the beat — "kind of your poor man's sidechain compression emulation in LSDj, with just volume" — timed so the kick lands in the dip (source: s-painperdu-03-isometric-sav-walkthrough).

pain-perdu builds the whole effect out of those pieces (source: s-painperdu-04-sidechaining). Half of it is free: kick and bass share the wave channel anyway, so they cannot sound together — what has to be written is the recovery. Put E02 (50 %) and then E03 (100 %) on the steps after the kick and the bass swells back in on the 16th-note grid. Then halve the groove: at groove 3 each step is a 32nd, the same two commands recover twice as fast, and the pump stops announcing itself — "it's almost as if you hear the bass being triggered at the same time as the kick, but this is an illusion being made possible by the fast groove" (shuffle-funktempo). Duck the channels the kick never touches as well: an envelope command rising from 0 at speed A once per beat on the pulse channel "gives a little bit more of a four-to-the-floor groove … and it helps the kick stand out", and it carries the feel through bars with no kick at all — "even if you have no kick playing you still have the feel of the song". The same command on the noise channel gives the house-record hat that pumps instead of hitting. Two kick patches with different kill points and pitch-drop speeds (his verse kills at 4, his chorus at 6 with more low end) turn the same trick into a section contrast.

On the wave channel E is too coarse to pump with — E01/E02/E03 are 25 / 50 / 100 %, and "there's nothing between fifty and a hundred percent … sometimes 2 is too soft for an instrument and 3 is too loud in the context of your mix". Ramp LIMIT instead: 0 on the synth's first wave, F on its last, PLAY LOOP with the loop point at the end so the instrument sustains once it has recovered — "now we can have this going from zero to F and have this kind of naturally do its own sidechaining". SPEED and LENGTH set how fast the duck recovers, and a start value above 0 keeps it from ducking to silence; VOLUME and Q can ride the same ramp for a filter-and-volume pump (source: s-defensemech-wave-channel-ramble). Before LSDj 7's silky wave this was impractical — every frame change clicked (wavetable-programming).

Song initialisation and looping › LSDj #

Playback only stays in sync if every channel has something to play from the top: Infu keeps silent chains — chain 7F holding the empty phrase FE, used as 7E (a short bridge) and 7D (a full-length chain) — in every gap of the song screen, with the same number of phrases as the neighbouring chains, so START works from any row (source: s-infu-getting-started-with-lsdj). Grooves added at the end of a phrase must be taken back (H00, or a G back to the default) so the next phrase starts on beat 1 (source: s-intense-tech-07-groove-and-tick-tricks-part-2).

H is both the loop and the ending: in a phrase H00H0F hop to the next phrase at the given step (H00 on step C is how you compose in 3/4), H10HFE hop back within the phrase — first digit how many times, second digit the destination step — and HFF stops the song, or just that channel in live mode (source: s-lsdj-manual). Without an HFF the song screen simply plays its chain lists top-down and comes round again, so the sticky-state rule above applies to LSDj too: a T, M or G set late in the song is still set on the next lap.

Stereo panning › LSDj #

Instrument OUTPUT parameter (L/R/both/none); Oxx command to pan a channel from a phrase or table; B+LEFT/RIGHT in the song screen pans a channel live; Mxy sets or nudges the master volume per side (source: s-lsdj-manual). Classic use: the same chain on PU1 and PU2, one left, one right, slightly detuned (detune).

The hardware: NR51 ($FF25) has one left bit and one right bit per channel — a channel is hard left, hard right, centre (both) or absent, nothing in between — and NR50 scales each side in eight steps (0 = 1/8, 7 = full) without ever muting, which is what Mxy writes. Changing NR51 for a channel whose DAC is on causes a pop, so make panning moves on silent rows; the built-in speaker merges both sides to mono (sources: s-pandocs-audio-registers, s-pandocs-audio-details, s-pandocs-audio-overview).

One table for both pulses: when PU1 and PU2 play the same instrument with its table set to Automate at the same time, channel 1 receives the even-numbered table rows and channel 2 the odd-numbered ones, so alternating O values pan the two channels apart from a single table, instrument and phrase (source: s-intense-tech-09-lets-table-this-discussion).

Clicks and tricks from the forum: on pre-8.8.0 versions an O change clicks, so "fade the instrument off before doing the panning" (herr_prof; source: s-chipmusic-lsdj-faq); the stereo snare trick is the opposite use — a very quick left-to-right flick at the top of the snare table, then centre (Victory Road; source: s-chipmusic-noise-drum-threads); Infu's snare table opens with alternating O rows to make the snare "wide on the speakers" (source: s-infu-getting-started-with-lsdj); "Use O command to create stereo space" (SketchMan3; source: s-chipmusic-lsdj-advanced-tricks).

Random and alternating panning (intense-tech): the O values count OLR = 00, O__ = 01, OL_ = 02, O_R = 03, so OL_ followed by Z02 on later steps chooses among left, right and both — starting from OLR would include the mute — and a value added past the range wraps to the remainder after dividing by 4; since version 6 Z works in tables too, and alternating OLR/O__ in an Automate table gives a random gate (randomization-and-probability; source: s-intense-tech-03-dont-sleep-on-z). defense-mechanism counts stereo placement as one of three mixing levers beside volume and register: alternating left/right on pulse notes or noise hi-hats creates "a sense of space and ambience" even with only left, right or both available (source: s-intense-tech-15-lets-mix-it-up-and-down). sabrepulse's beginner pattern puts the O commands on the empty rows between the lead's notes — OL_ on rows 1, 5, 9 and D, O_R on rows 3, 7, B and F, notes on the even rows — which "gives a better stereo effect" than panning on the note rows and leaves those rows free for other commands such as C (source: s-sabrepulse-getting-started-with-lsdj).

Vibrato and delayed vibrato › LSDj #

Vxy: x = 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 resets. Shape and speed depend on the instrument's PITCH setting: with PITCH = TICK the vibrato is synced to the music (assuming 6 ticks/step) and CMD/RATE slows it; A+LEFT/RIGHT on PITCH chooses the shape (triangle, saw or square, upward or downward). Delayed vibrato: put V a few steps after the note, or in the instrument's table on a later row so every note gets it automatically. The manual also suggests V (and P) on noise snares to liven them up (source: s-lsdj-manual).

Dire Hit's account of the digits: the first is the modulation speed (0 slow … F "so fast it almost becomes audible as a tone"), the second the depth; VFF is FM in all but name — Monodeer's pulse-channel cymbals are a single V command, "if you ever need noise percussion out of a pulse channel" (source: s-chipmusic-tables-and-chords-threads). SketchMan3: "High frequency V effects can give you a more complex raspy sound" (source: s-chipmusic-lsdj-advanced-tricks); a fast V on a table's first tick, cancelled by V00 on the second, sharpens an attack (source: s-intense-tech-09-lets-table-this-discussion).

More from intense-tech: random vibrato is V00 on the note and Z03 on each repeat of it, so every repeat acts as V00V03 (randomization-and-probability; source: s-intense-tech-03-dont-sleep-on-z). The slowing setting was introduced as FX/SPEED in version 7 (7.7.4) — it lengthens each step of C, P, R and V, the V only when PITCH is TICK — and renamed CMD/RATE in version 8 (sources: s-intense-tech-12-scoping-out-new-features, s-intense-tech-14-lets-appreciate-version-8). Since 9.1.0 the TICK vibrato rates are rhythmic at the default groove — one cycle per V0x 16 steps, V1x 12, V2x 32/3, V3x 8, V4x 6, V5x 16/3 … VFx 1/2 step — and V also works on noise instruments, always tick-based (source: s-intense-tech-19-new-noise-and-910-news).

Pushed far enough, a V on the wave channel stops being vibrato: with the right combination of speed and depth a bass note "kind of self-resonates with itself", a sound defense-mechanism rates highly and uses rarely — "I honestly don't use enough V commands on the wave channel". It belongs to one note, so a different pitch needs the values retuned, and silky wave may have softened it (source: s-defensemech-learning-lab-shorts).

Two wave-channel notes from pain-perdu (source: s-painperdu-02-wav-channel-walkthrough): in the instrument screen, LEFT/RIGHT cycles the vibrato type while A+UP/DOWN inverts the vibrato's phase; and a fast V on a wave instrument — normally a pulse-channel trick, since wave instruments are raspy already — turns a raspy hand-drawn wave into "a kind of flanger filtery modulation effect" with no synth movement at all. It costs CPU, and because the modulation interacts with the note's pitch the value that works on one note will not work on the next, so it belongs on the note rather than in the table. A slow vibrato does the opposite job: it detunes a held pulse note enough to "fight off the really robotic feel" (source: s-painperdu-03-isometric-sav-walkthrough).

Two more places V earns its keep. On the noise channel it has worked since 9.1.0, alongside C and P, and combines with P — a bend and a wobble on the same hit; the pitched (short-loop) noise shapes make that read as a tonal snare rather than as noise (source: s-defensemech-noise-channel-92l). And on a wave instrument imitating an acoustic one, V is most of the imitation: "using a variety of vibrato speeds (Vxx commands) will also help make a flutey tone sound more convincing. It's all about articulation, really. LSDJ is really good for flutey articulation though!" — varied speeds across a phrase, not one setting held (Victory Road, source: s-chipmusic-lsdj-wav-instrument-tutorials; lead-articulation).

Volume slides, fades and effect memory › LSDj #

No slide command: volume is shaped per note by Exy (x = level 0–F; y = 1–7 decrease from fastest to slowest, 9–F increase from slowest to fastest, 0/8 hold), by the instrument ENV/ADSR and by the table volume column (level + ticks, looping when all 16 rows are used). Until 8.8.0 every pulse or noise volume change reset the hardware envelope with a click; since 8.8.0 a software volume makes E, the table column and K click-free, with speeds from 1 (shorter than any hardware speed) to F. Mxy moves the master volume per side (9–B up, D–F down). Global fades and ducks are therefore tables and M, not slides — and the four wave-channel steps are enough for a rhythmic one: because E02 is 50 % and E03 100 %, an 02 followed by an 03 on the next step is an audible pump locked to the 16th note, which is how pain-perdu writes the recovery half of a sidechain. On the pulse and noise channels he instead runs an envelope that starts from zero and rises once per beat, so the pump is there even in bars where the kick is not (sidechain-pump; source: s-painperdu-04-sidechaining). (adsr-envelope, sidechain-pump; sources: s-intense-tech-18-adsr-makes-life-easier, s-intense-tech-09-lets-table-this-discussion, s-lsdj-manual).

Mixing levers beyond E (source: s-intense-tech-15-lets-mix-it-up-and-down; the headroom argument behind them is on levels-and-headroom): when E03 (100 %) is too loud and E02 (50 %) too soft on the wave channel, cap the synth's LIMIT instead — at instrument VOLUME 3, LIMIT 8 gives about 50 %, 9 ≈ 56 %, E ≈ 94 % — and different LIMIT values on the synth's first and last wave, run with W (speed, length), make a wave-channel volume envelope (wavetable-programming). On pulse and noise the version-8 ADSR chains E-like stages and can fade in to a chosen lower maximum, where a rising E climbs to F or the next E; E commands and the table volume column override the ADSR (source: s-intense-tech-14-lets-appreciate-version-8). A transient beats a louder level: instrument volume around 90 with the table's E pulling it down after the first tick lets a snare cut through "without overpowering the other channels" (Pain Perdu's trick; instrument-design).

Before software volume the clicks were the topic of the LSDJ FAQ thread (source: s-chipmusic-lsdj-faq): a table fade-in 01 21 41 61 81 A1 clicks on every step because "to change the volume, the phase of the waveform needs to be restarted" (nitro2k01 — the hardware behaviour Pan Docs describes, adsr-envelope); fixes of the time were chained E commands that continue where the previous one stops, aphasia's stepped fade (a short loud 0F, then a sustain at the wanted level, repeated), or spacing the steps to the groove's ticks so the clicks fall on the beat. Infu's reading of ENV: each box is a level and the speed to the next box's level, 0 holds, lower speeds are shorter — a fade-in starts at 0: 07/88/-- (source: s-infu-getting-started-with-lsdj).

LIMIT is the wave channel's volume fader, and VOLUME is not. The two do different jobs and only one of them is safe to move: VOLUME scales the signal before CUTOFF, Q, PHASE and DIST, so turning it down also destroys the clipping or wrapping that made the sound — "what if you want to keep the same wave shape … I really like this sound, but it's too loud, and this was the bane of my existence in the early versions of LSDj, because you're just stuck — you can't get it to wrap if the volume isn't high". LIMIT (added in synth version 6) constrains the samples after all of that: F allows the full 0F, 5 allows only 5A, and whatever exceeds the window is handled by the DIST type. It exists precisely because the hardware's four steps leave the channel "often being too loud at 100% volume but too quiet at 25% or 50%". defense-mechanism's verdict: "LIMIT, I think, is almost more useful than anything else on this entire thing." Because the synth interpolates across its 16 waves, different start and end LIMIT values (say F4) are a fade — "a nice gradual fade without having to use the E commands, which only give you 100, 50, 25 or zero" (sources: s-defensemech-learning-lab-shorts, s-intense-tech-02-wave-synth-deep-dive-part-2; wavetable-programming, levels-and-headroom).

The wave channel is the exception (sources: s-chipmusic-lsdj-wav-channel-release, s-defensemech-wave-channel-ramble): E gives four steps only (0 / 25 / 50 / 100 %), and they are a bit shift, so the quiet settings also lose resolution. Three ways around it, in the order they were found — draw the fade into the waves themselves and step frames with F01 from a table (16 steps per synth, 32 across two); pan the channel alone to one side and use M, which has 8 steps and does move it; or, from LSDj 8, ramp LIMIT across the synth's waves, which is the smoothest of the three and doubles as a sidechain-pump.

Wavetable programming (waveform / arp tables) › LSDj #

Two different things are "wavetables" on the Game Boy:

  • Instrument tables — six columns (amplitude envelope, transpose, two command/value pairs), one tick per step by default, started by the instrument's TABLE setting or Axx, looped with H, with probabilistic hops via B. They do what the SID-Wizard wave/arp table does: pitch drops for drums (transpose column + L/P), noise-then-tone attacks (switch instruments/E per row), custom envelopes (tremolo example in the manual). With TABLE set to STEP the table advances one row per note trigger — a per-note sequence.
  • The wave channel's synth: 16 synth sounds × 16 four-bit waves. The synth screen generates them from a SIGNAL (square, saw, triangle, custom), FILTER (low/high/band/all-pass), DIST (CLIP/FOLD/WRAP), PHASE (PINCH/WARP/RESYNC), fading VOLUME, CUTOFF, Q, VSHIFT, LIMIT and PHASE from the first wave to the last. WAVE instruments play them ONCE, LOOP, PINGPONG or MANUAL; Fxx steps through frames by hand (F10 = next synth sound), Wxy changes synth speed/length. The wave screen edits single waves.

(source: s-lsdj-manual)

LIMIT is not a volume control, and that is the point (source: s-defensemech-learning-lab-shorts): 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. Ramped across a synth's 16 waves it is also the fade the E command cannot give (E steps 0 / 25 / 50 / 100 %). There is no LIMIT command for the phrase screen, so different levels mean different synths. VSHIFT finally has a rule from the same clip: it is to DIST what Q is to the filter — with CLIP it merely squashes the wave against the ceiling ("a sound-bad button", "just a way to make it quieter"), but with FOLD or WRAP the shifted part folds or wraps back in and "that's almost like a pulse-width modulation thing happening" (pulse-width-modulation). 10 lifts the wave about one step; FF is silence. In older versions VSHIFT wrapped regardless of the DIST setting.

Sweeps longer than one synth (same source, credited to hypnogram): slice the CUTOFF range across consecutive synths — synth 1 12, synth 2 2030, synth 3 3040, Q around 57 — and play the matching instruments in sequence, each PLAY ONCE at a slow SPEED. The sweep then continues past the sixteen-frame limit, at the cost of a synth per slice.

The instrument side of the synth (source: s-painperdu-02-wav-channel-walkthrough): LENGTH is how many of the 16 waves the cycle uses, REPEAT is 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 groove 5/5, and so on. SPEED 1 "is more clipping than actual modulation". MANUAL is the quiet mode because only one wave is ever read, so no frame change occurs. Two corrections from the same source: 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" — and 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.

Hand-drawn banks and their hazards (source: s-chipmusic-lsdj-wav-channel-release): the synth screen is a generator, the wave screen an editor, and re-entering the synth screen overwrites all 16 of that synth's waves — later versions warn first ("are you sure you want to override hand-drawn waveforms?"), older ones do it silently. F is relative and accumulates, so F05 F05 lands on frame 0A; a wave — a section of one or a whole one — can be copied and pasted between waves in the WAVE screen (SELECT+B, highlight, B, then SELECT+A on the target), which is what makes a 16-wave hand-drawn bank affordable at all (source: s-painperdu-05-shortcuts-and-workflow); F10 steps into the next synth, which is also how two synths are chained into a 32-frame animation. Frame changes clicked on hardware until LSDj 7's silky wave; the standing advice was to set the frame rate so the clicks fall on 16ths, where percussion masks them.

A wave can also hold two notes at once: draw a second waveform at 2× or 3× the fundamental on top of the first and the channel sounds a bass note plus an independently steerable higher one — the ghost-channel (sources: s-chipmusic-lsdj-ghost-channel, s-tylerbarnes-ghost-channel-tutorial). The 2020 answer needs no drawing at all: an allpass filter with a low CUTOFF and a high Q (around 89) lifts one overtone into audibility while passing everything else — "the nice thing about the allpass is that no matter how much you boost this Q you really never lose the root note", where lowpass isolates the fifth but throws away the edge. Both give "this overtone emphasis that sounds like almost two notes … the power chord" (source: s-defensemech-ghost-channel-allpass).

The hardware under the wave channel (sources: s-pandocs-audio-registers, s-pandocs-audio-details): wave RAM ($FF30–$FF3F) holds 16 bytes = 32 four-bit samples, played upper nibble first at 32 × the tone frequency (65536 ÷ (2048 − period value) Hz — one octave below a pulse channel at the same value, which is why WAV is the bass channel). There is no envelope, only the NR32 output level 100 / 50 / 25 % (a right shift of the samples) or mute — LSDj's VOLUME setting and E00E03. Wave RAM can only be rewritten while the channel is inactive (on the DMG only in step with the channel's own reads; on the Color a write lands on the byte being played), so every wave or synth-frame change means stopping and retriggering the channel; a retrigger resets the read index but keeps the last sample in the output buffer, and on monochrome consoles retriggering while a byte is being read corrupts the first bytes of wave RAM. Pan Docs names the two classic uses: "shortening" the wave by repeating a pattern or doubling samples and read rate, and "lengthening" it by reloading wave RAM as soon as it has been read once — "sometimes used for full-on sample playback", which is presumably how LSDj's kits and speech play on this channel (inference).

Drum tables from Intense Tech (sources: s-intense-tech-10-kicks-part-1, s-intense-tech-11-kicks-part-2): the wave kick table is a fast P on the first line (how quickly the pitch falls from the played note) and on the second an L with transpose 80 — the slide stops at the lowest note instead of wrapping to the top, survives tempo changes (DRUM-mode P/L ignore tempo) and leaves the attack tunable by the note (C5–C7) and the P speed. The "Kyoto kick" (popularised by Toriena) puts a noisy, gritty wave in slot 00 and the clean kick in 01–0F, switching with F01 on the second table line — or without any command by setting PLAY LOOP, LENGTH 1, REPEAT 0, SPEED 01, which plays wave 00 for one tick and then jumps to 0F. A kick that becomes a bass note: in LSDj 7 with DRUM pitch, start two octaves up and let the L line carry transpose E8 (−24); in LSDj 6 it needs FAST pitch and instrument TRANSPOSE ON — line 1 transpose 0C with a two-tick P down, line 3 transpose F4 with an L. A wave snare is the same shape, P then L to the note the snare is tuned to, E commands trimming the decay, layered with a noise snare.

The wave synth in depth (sources: s-intense-tech-01-wave-synth-deep-dive-part-1, s-intense-tech-02-wave-synth-deep-dive-part-2, s-infu-getting-started-with-lsdj): a wave is 32 four-bit samples, and the number of cycles inside the frame is the harmonic that sounds, so the synth's CUTOFF reads as harmonic numbers — every multiple of 10 is one overtone (20 the octave, 30 octave + fifth, 40 two octaves). SIGNAL saw = all harmonics, square = odd harmonics (the pulse channels' 50 % sound), triangle = odd harmonics falling off faster (the deep NES-style bass); there is no sine, but Lowp with CUTOFF 10, Q 3 and VOLUME 08 extracts one — the lowest, cleanest bass and kick wave the channel can make. PHASE Normal compresses the wave and pads it with silence, so Square with Phase 001F is a pulse-width sweep ("SID lead"; Triangle gives a vocal-like lead); Resync repeats the compressed wave to fill the frame (new overtones), Resync2 repeats without compressing (quieter). DIST governs overflow when VOLUME or Q exceed 0–F: Clip squares the wave off, Fold (version 6) mirrors the excess for resonant highs, Wrap throws it to the opposite edge for buzz; VSHIFT follows the DIST type in version 6 (FF with Fold inverts the wave). LIMIT (version 6) clamps the samples afterwards (5 = 5–A) — the fine volume control the hardware's four levels lack, and with different start and end values a volume fade. Infu's rules of thumb: Q does little until CUTOFF moves, VOLUME above 20 triggers DIST, LIMIT above 0F rarely helps, instrument LENGTH skips waves, and W sets SPEED and LENGTH from a phrase. A synth's parameters interpolate from the first to the last of its 16 waves, so a kick and a bass can share one synth: the kick plays the first wave, the bass loops the rest.

LENGTH changes resolution, not the endpoint (source: s-defensemech-wave-channel-ramble). The synth always travels from wave 0 to wave F; LENGTH decides how many of the sixteen are generated and spreads them evenly — "it actually always plays from zero to F, but it will only play as many frames and it will interpolate those … it kind of skips frames in the middle to equalize them". The chart, written out by defense-mechanism himself (so not subject to transcript error):

LENGTHwaves generatedLENGTHwaves generated
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

Three more from the same source. The filters are not filters: "this is a wavetable synthesizer, it's not a subtractive synthesizer — so the filters that you see here are actually just kind of emulated" — the filtering happens when the sixteen waves are generated, not on the output, which is why CUTOFF behaves like a harmonic selector rather than a tone control. The harmonic ladder runs further than the 20/30/40 rule above: with bandpass and a high Q, CUTOFF 10 is the fundamental, 20 the octave, 30 the fifth above it, 40 two octaves, 50 a major third, 60 another fifth, 70 "an out-of-tune kind of seventh", 80 another octave, 90 "like a major second", A0 "another major third", B0 "a sharp fourth", C0 a fifth, D0 "almost like a sixth … kind of a flat seventh" — above that the synth "probably only generates up to here really" (harmonic-series). And adding an overtone is multiplying the wave: on the oscilloscope, raising CUTOFF from 10 to 20 "kind of replicate[s] your waveform … every time you add an extra overtone you multiply the waveform", which is also what PHASE RESYNC does by another route — the mechanism the ghost-channel exploits, stated from the outside.

LIMIT ramped into a self-sidechain (same source): with LIMIT 0 on the first wave and F on the last, PLAY LOOP and the loop point at the end, the instrument ducks and recovers on every note — "now we can have this going from zero to F and have this kind of naturally do its own sidechaining", SPEED and LENGTH setting the recovery time and a start value above 0 keeping the duck out of silence. "You could do more than LIMIT too — you could do VOLUME here, you could do Q." He notes this only became practical once the wave channel stopped clicking (sidechain-pump).

How the wave channel changed from version 7 to 9.2 (sources: s-intense-tech-12-scoping-out-new-features, s-intense-tech-14-lets-appreciate-version-8, s-intense-tech-19-new-noise-and-910-news, s-intense-tech-21-whats-new-in-lsdj-92): version 7 introduced silky wave — a timer moves the wave-RAM rewrite to "a more opportune time", so the hardware click of every frame change disappears and a synth at SPEED 01 becomes "eminently more audible at its intended frequency"; version 7 also brought a wave-channel oscilloscope, a wave instrument FINETUNE of -F+F and the R8x super-fast retrig, which brings the old wave-channel pitch wrap back as a tunable effect (retrigger). Version 8 renamed REPEAT to LOOP POS (the position of the loop point; 0 repeats every frame within LENGTH), made R restart the synth from its first frame, made MANUAL the default play mode and allowed cloning a synth from the wave instrument screen with SELECT+(A,B) on the synth number. Version 9.1.0 gave FINETUNE two digits (an old 01 equals a new 10), gave LIMIT two digits so that values above 0F overdrive — with CLIP the samples wrap and new higher harmonics appear — and made wave F commands immediate again: silky wave had delayed them since version 7, so the slight click returns but frame changes land exactly on the tick. Contradiction: Infu's rule that LIMIT above 0F "rarely helps" (source: s-infu-getting-started-with-lsdj) vs Defense Mechanism presenting the overflow of 9.1.0 as a deliberate overdrive worth trying. Version 9.2 fixed waves that had been inverted and displaced by one sample and rebuilt PHASE: PINCH and WARP are the old NORMAL with better interpolation (PINCH also with less DC offset), the new RESYNC is a smoother version of the old RESYNC that sounds close to the old RESYN2, and the new RESYN2 is the old RESYNC "for when you really want to get dirty with aliasing" — which is how the Normal/Resync/Resync2 description above maps onto the manual's PINCH/WARP/RESYNC/RESYN2; the synth screen also swapped the positions of CUTOFF and Q. A new WAVE instrument play mode RESYNC is PINGPONG without silky wave: SPEED 1 gives the low undertone of versions up to 7.3.3, and slower speeds switch frames exactly in time, which is audible on low bass notes.

LIMIT as a volume control (source: s-intense-tech-15-lets-mix-it-up-and-down): where E02 (50 %) is too soft and E03 (100 %) too loud, LIMIT caps the waveform regardless of the instrument VOLUME — 8 gives about 50 % at VOLUME 3, 9 about 56 %, E about 94 % — and different LIMIT values on the synth's first and last wave, run by W (speed and length), make a volume envelope (volume-slides).

Sample-derived wavetables — the wave cruncher (sources: s-intense-tech-05-wave-cruncher-instrument-library, s-intense-tech-08-dotcnts-wave-cruncher): lsdj-wave-cruncher (by DOTCNT) reduces one tonal note to a series of 4-bit waveforms, one reduced cycle per wave, that fill the 16 frames of a synth — it "turns the wave synth itself into a rudimentary sampler". Command line: crunch SAMPLE.WAV A4 (or the frequency in Hz, or auto, which takes 30–60 s and can fail on complex waveforms) with --normalize, and --linear (one cycle from each of 16 equal slices of the sample) or --exp (more frames from the attack, fewer from the decay) instead of the default first 16 cycles; --channel=0|1 picks a side of a stereo file, --output= names the .snt, --analyze only reports the detected pitch. Bells, FM electric pianos and steel drums work; snares and other non-tonal sounds do not. The .snt is written into a synth slot of a save or an .lsdsng with liblsdj's lsdj-wavetable-import savefile.sav synth.snt 0 (a save is patched only in its working-memory song), so the instrument travels with the song, unlike kit samples in the ROM; play it as a WAVE instrument with PLAY ONCE, LENGTH 3, SPEED 3 as a starting point and adjust to the tempo. Ready-made .snt files are collected in the lsdjsynths repository (psgcabal on GitHub).

Articulating a wave instrument — the flute problem, "all the tutorials I find are just about kick drums and snares" (source: s-chipmusic-lsdj-wav-instrument-tutorials). Victory Road's recipe is a table trick, not a waveform trick: start from a sine or triangle "maybe with a couple notches in it for some extra harmonics", make the first frame of the synth quite a bit louder than the rest, set PLAY to MANUAL, and put an F01 on the first tick of the instrument's table. The loud first frame is the attack, and because a table only restarts when the note carries the instrument number, omitting the instrument number slurs — "you can imitate tonguing and slurring in the phrases by removing the instrument number from notes that you want slurred" (lead-articulation). Flutter tonguing: give the third frame a slightly different volume and shape, then alternate frames two and three from a separate table started with A — "F01 to move ahead, FFF to move back" (FFF is −1 in F's relative arithmetic). tyler-barnes adds noise-burst frames for the breath of the attack; an0va argues against imitation altogether and works subtractively: "Start with sine or a thick square so you have a lot of bass — then mess with parameters and chip away at the bass frequencies until you get something you like. It's like ice sculptures then." (He also settles which end of CUTOFF is which: 00 is the low end, FF the high, which is why a high-pass instrument at the default FF seems silent.)

The instrument number is what retriggers the wave cycle (source: s-painperdu-01-instrument-retriggering). A note without an instrument number plays with whatever is already running; the number re-reads the settings and restarts envelope, table and the synth's wave cycle. So a PINGPONG instrument with LENGTH F and a slow SPEED never gets heard in full if every note is triggered — "I cannot actually hear the full range of wave cycles" — but trigger it once every four notes and the whole cycle plays: "if you have something that cycles through waves really slowly you can have rhythmically evolving waves that are really interesting". The practical wrinkle is that kicks usually live on the wave channel too, and a kick is a different instrument, so it retriggers the lead when the lead returns; the fix is to size the cycle to the gap — LENGTH 3 at SPEED 6 completes between 16th-note kicks. The same rule reshapes tables: with TABLE set to AUTOMATE the table advances per instrument value, so an L/R panning table gives L R L R when every note is triggered and L L R R when only every second one is (stereo-panning).

Two more instrument-level moves: 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"; and a filter sweep can be built into the synth itself — high cutoff on the first wave, low cutoff with high resonance on the last, so the note "cycles through a very abrasive squarey sound" on its own (source: s-painperdu-03-isometric-sav-walkthrough).

Nesting tables with A (source: s-intense-tech-09-lets-table-this-discussion): tables are "arguably the sole most useful feature to shape your sounds" and there is never a spare one — there is nothing beyond table 1F. The volume column is level + hold ticks (36 = volume 3 for six ticks; on the wave channel the level is only 0–3), and a completely filled column loops from the top while a partly filled one holds its last level. A in the command column stacks a second table under Automate — one command in the phrase, one in table 01, A02 in its second column and two more in table 02 gives "a total of four commands at once"; without Automate it simply extends the current table into the named one. A20 or higher stops the table without needing a K, "since no tables beyond 1F exist". And a quirk worth a free stereo widener: two channels playing the same Automate instrument at the same time split the table between them — channel 1 takes the even-numbered rows, channel 2 the odd ones, "easy stereo panning or similar effects using only one table, one instrument, and one phrase".

Transients by waveform switch (source: s-defensemech-every-lsdj-kick): put a harsh wave in the synth's first frame and step off it with an F on the first tick — and copy the frame you want to keep before editing the synth, because the synth screen regenerates the whole bank. The same trick on the pulse channel is offered untested; the wave channel's advantage is simply that it reaches lower (the pulse channels stop at C2).