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 <noreply@anthropic.com>
adminandClaude Opus 5.5 committed 2026-10-07 07:09:49 +02:00
1 parent 57df8825bc
commit fbe7d68b22
2 files changed
+34 -7

No files matched your search

+1 -1
@@ -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
+33 -6
@@ -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