From fbe7d68b22148e547023c3d215101cbe6149c088 Mon Sep 17 00:00:00 2001 From: MelekTaus Date: Wed, 7 Oct 2026 07:09:49 +0200 Subject: [PATCH] List the 14 instrument presets in Instruments (#329) The Preset menu now has playable instruments on top and the sfxr sounds below a separator. - Instruments: the menu is described in two parts, with a table of the 14 instruments and what each one sounds like. - Development: the check count is 1848. Co-Authored-By: Claude Opus 5.5 --- Development.md | 2 +- Instruments.md | 39 +++++++++++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/Development.md b/Development.md index 50be2d6..13ce8f9 100644 --- a/Development.md +++ b/Development.md @@ -18,7 +18,7 @@ php tests/php/accounts.test.php # the API's accoun # has and the web server's container has not (SKIP there) php tests/php/snapshots.test.php # the snapshot store (#231), the same way php tests/php/releases.test.php # the release store (#266), the same way -node tools/seed-e2e.mjs && node tools/e2e.mjs # 1847 editor checks, screenshots in /tmp/gm-e2e-*.png +node tools/seed-e2e.mjs && node tools/e2e.mjs # 1848 editor checks, screenshots in /tmp/gm-e2e-*.png GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step ./e2e.sh start [GM_STEPS] # the same run detached, see below ./e2e.sh status # live progress, or the last run's result diff --git a/Instruments.md b/Instruments.md index f9cf615..314b997 100644 --- a/Instruments.md +++ b/Instruments.md @@ -223,12 +223,16 @@ heard at once on what is playing. Those values are the tab's own and never writt Three buttons in the header make 8-bit sounds the way sfxr does (#329). Each is one undo step and plays the note last played at once (C4 before any), for up to 2 s. -- **Preset** opens a menu: *Pickup*, *Laser*, *Explosion*, *Powerup*, *Hit*, *Jump*, *Blip*. It - puts a new graph in place of the instrument's: Notes for all 128 notes → [Chip](#chips) → - Envelope → Filter → Bitcrusher → Output. Groups and notes on the canvas stay. Every click draws - the sound anew within its kind, with sfxr's generator for it. The Chip plays at its own - frequency, *Follow note* off, so every key plays the same sound, as an effect does; turn it on to - play the sound as a melody. The Envelope has *Sustain* 0, so the sound ends by itself. +- **Preset** opens a menu in two parts. Either kind puts a new graph in place of the + instrument's; groups and notes on the canvas stay. + - **Instruments** to play tunes on, at the top (see the table below). Their [Chips](#chips) + follow the note, so every key plays at its own pitch, and most hold the note while the key is + held. They come out the same every time they are picked: Randomize and Mutate make a variant. + - **Effects** below the line: *Pickup*, *Laser*, *Explosion*, *Powerup*, *Hit*, *Jump*, *Blip*. + Each is Notes for all 128 notes → Chip → Envelope → Filter → Bitcrusher → Output. Every click + draws the sound anew within its kind, with sfxr's generator for it. The Chip plays at its own + frequency, *Follow note* off, so every key plays the same sound, as an effect does; turn it on + to play the sound as a melody. The Envelope has *Sustain* 0, so the sound ends by itself. - **Randomize** draws every number of the Chips, Envelopes, Filters and Bitcrushers in the graph anew, as sfxr's randomizer does: most of them wild. It leaves the wave, *Follow note*, the type of a Filter, the *Mix* of a Bitcrusher, an Envelope's *From* and *To* and every other node as @@ -241,6 +245,29 @@ plays the note last played at once (C4 before any), for up to 2 s. plays the note last played again, 150 ms after it rests, so dragging a number is heard once you let it be. Moving a node is no change. +The instruments, all on every note unless the table says otherwise: + +| Preset | Made of | Note | +|---|---|---| +| *Square Lead* | Square with a slight vibrato → Envelope → Low-pass 6 kHz | held | +| *Pulse Lead* | Square at duty 0.13 (about an eighth), thin and nasal, with vibrato → Envelope | held | +| *Echo Lead* | Square at duty 0.25 → Envelope → Delay, a dotted eighth, ping-pong | held | +| *Octave Arp* | Square that jumps an octave up and back 12.5 times a second (Arpeggio 12, Repeat 0.08 s) | held | +| *Synth Brass* | Saw → Envelope with a slow attack → Low-pass that an Envelope opens from 400 Hz to 3.5 kHz | held | +| *Detuned Saws* | Two saws a tenth of a semitone apart (Pitch 0.1) → Mix → Envelope → Low-pass 7 kHz | held | +| *String Pad* | As *Detuned Saws* with vibrato, attack 0.5 s, release 1 s, Low-pass 2.2 kHz | held | +| *Organ* | Square and the square an octave up → Mix → Envelope at full sustain → Low-pass 4.5 kHz | held | +| *Flute* | Triangle with vibrato, a breath of noise through a Band-pass at 2.5 kHz → Mix → Envelope | held | +| *Bell* | Two sines 17.6 semitones apart (a ratio of 2.76), each with its own Envelope → Mix → Delay | dies away in 2 s | +| *Pluck* | Square at duty 0.3 → Envelope → Low-pass that snaps shut from 6 kHz to 600 Hz | dies away | +| *Triangle Bass* | The triangle of the NES → Envelope at full sustain | held | +| *Pluck Bass* | Saw → Envelope → resonant Low-pass that snaps open to 2.4 kHz and falls back towards 180 Hz | held | +| *Drum Kit* | *Single notes* 36 to 46: Kick on C2, Snare on D2, Closed hat on F#2, Open hat on A#2, as in General MIDI | each ends by itself | + +The kick is a sine that drops from 160 Hz until it is below 30 Hz, the snare a falling triangle and +high-passed noise, the hi-hats noise above 6 or 7 kHz, short and long. A filter that sweeps has its +own Envelope under it, wired to *Cutoff*: its *From* and *To* are the cutoff at rest and at the top. + sfxr counts its sliders from 0 to 1; the presets turn them into Hz, semitones and seconds with sfxr's own formulas. Its envelope holds a sound and lets it fall in a straight line, an Envelope falls away quick at first, so the decay is three times sfxr's hold and fall. sfxr's punch and its