Aus der Einschätzung der Sound-FX-Nodes nach #317 (Gespräch 2026-10-05). Heute gibt es Input, Output, Gain, Pitch, 5-Band-EQ und Mix.
Bittiefe und Abtastrate senken, für den typischen Retro- und 8-bit-Klang.
Vorschlag:
Bits (1 bis 16): WaveShaperNode mit einer Treppenkurve. Das ist klein.
Rate (Abtastrate, zum Beispiel 1 bis 48 kHz): Sample-and-Hold. Das kann Web Audio nicht fertig, dafür braucht es ein AudioWorklet oder eine Rechnung am Puffer beim Start.
Mix wie beim Mix-Node.
Haken:
Eine Kurve im WaveShaperNode lässt sich nicht rampen. Ändern sich die Bits mitten im Sound, wird die Kurve getauscht, und das kann knacken.
Rechnen am Puffer beim Start hieße: Bits und Rate gelten nur beim Start.
Rückfragen:
Reicht die Bittiefe, oder ist die Rate der eigentliche Wunsch? Erst die Rate klingt wirklich nach 8-bit.
Ist es in Ordnung, wenn Bits und Rate nur beim Start gelten? Mit Worklet ließen sie sich rampen, dafür kostet es Rechenzeit, solange die Stimme läuft. Das Worklet wäre dasselbe Thema wie #317.
Aus der Einschätzung der Sound-FX-Nodes nach #317 (Gespräch 2026-10-05). Heute gibt es *Input*, *Output*, *Gain*, *Pitch*, *5-Band-EQ* und *Mix*.
Bittiefe und Abtastrate senken, für den typischen Retro- und 8-bit-Klang.
Vorschlag:
- **Bits** (1 bis 16): `WaveShaperNode` mit einer Treppenkurve. Das ist klein.
- **Rate** (Abtastrate, zum Beispiel 1 bis 48 kHz): Sample-and-Hold. Das kann Web Audio nicht fertig, dafür braucht es ein `AudioWorklet` oder eine Rechnung am Puffer beim Start.
- **Mix** wie beim *Mix*-Node.
Haken:
- Eine Kurve im `WaveShaperNode` lässt sich nicht rampen. Ändern sich die Bits mitten im Sound, wird die Kurve getauscht, und das kann knacken.
- Rechnen am Puffer beim Start hieße: Bits und Rate gelten nur beim Start.
Rückfragen:
- Reicht die Bittiefe, oder ist die Rate der eigentliche Wunsch? Erst die Rate klingt wirklich nach 8-bit.
- Ist es in Ordnung, wenn Bits und Rate nur beim Start gelten? Mit Worklet ließen sie sich rampen, dafür kostet es Rechenzeit, solange die Stimme läuft. Das Worklet wäre dasselbe Thema wie #317.
meleki
added the new label 2026-10-05 22:37:52 +02:00
Gehört jetzt zum Plan von #329 und kommt dort als erster Commit.
Ein FX-Node Bitcrusher mit drei Werten, im Sound FX und im Instrument:
Bits 1 bis 16, stufenlos. Bei 3,5 Bits wird auf 2^3,5 ≈ 11 Stufen gerundet.
Rate 100 Hz bis 48 kHz, als Sample-and-Hold.
Mix wie beim Mix-Node.
Als AudioWorklet, im selben Modul wie der Chip aus #329. Damit sind beide Rückfragen oben beantwortet:
Es gibt Bits und Rate.
Beide gelten nicht nur beim Start. Sie sind AudioParams, lassen sich rampen und von einem Envelope bewegen. Weil die Bits stufenlos sind, knackt eine Rampe nicht wie ein Kurventausch im WaveShaperNode.
Die Rechenzeit im Audio-Thread wird gemessen wie bei #317.
## Entscheidungen (Gespräch 2026-10-06)
Gehört jetzt zum Plan von #329 und kommt dort als erster Commit.
- **Ein FX-Node *Bitcrusher*** mit drei Werten, im Sound FX und im Instrument:
- **Bits** 1 bis 16, stufenlos. Bei 3,5 Bits wird auf 2^3,5 ≈ 11 Stufen gerundet.
- **Rate** 100 Hz bis 48 kHz, als Sample-and-Hold.
- **Mix** wie beim *Mix*-Node.
- **Als AudioWorklet**, im selben Modul wie der Chip aus #329. Damit sind beide Rückfragen oben beantwortet:
- Es gibt **Bits und Rate**.
- Beide gelten **nicht nur beim Start**. Sie sind `AudioParam`s, lassen sich rampen und von einem Envelope bewegen. Weil die Bits stufenlos sind, knackt eine Rampe nicht wie ein Kurventausch im `WaveShaperNode`.
- Die Rechenzeit im Audio-Thread wird gemessen wie bei #317.
Erledigt mit 165f022 „Crush a sound to fewer bits and a lower rate with a Bitcrusher (#322)“, Wiki 5ea149c.
Was drin ist
Node Bitcrusher im Sound FX und im Instrument, mit drei Reglern:
bits 1–16 (Standard 8, auch Kommawerte, damit eine Rampe nie springt)
rate 100 Hz bis 48 kHz (Standard 8000, Sample-and-Hold)
mix (Standard 1, fest auf 0 fällt der Node ganz weg)
Alle drei bewegen sich während des Spielens: Set sound FX parameters (rate in Oktaven) und im Instrument per Envelope.
Läuft als zweiter Prozessor im selben Worklet-Modul wie der Pitch, das Modul heißt jetzt src/viewport/fxWorklet.ts. Die Rechnung steckt in der Klasse Crusher (src/core/soundfx/crusher.ts) und ist in Node getestet. Ohne Worklet geht der Klang unverändert durch.
Gemessen auf melektaus-atx: etwa 68 Stimmen mit Bitcrusher gleichzeitig (64 Stereo-Stimmen, 2 s Audio in 1,9 s gerendert). Zum Vergleich Pitch: etwa 24.
Tests
Unit: 176 Dateien, 2934 grün (9 neue Fälle). Gegenprobe ohne Runden: 2 von 4 Crusher-Tests rot.
e2e 34: ALL PASSED, 58 Checks (1 neu, rendert offline in Chrome: 2 Bits bei 4 kHz ergeben 5 Stufen, je 12 Samples gehalten).
Der Aufräum-Check in e2e 64 aus af9b202 hat Suite 553 rot gemacht. Er prüft jetzt nur noch sein eigenes Behavior und gibt aus, welche Editor-Vorschau noch läuft. Welches frühere Modul seine stehen lässt, steht dann in der nächsten Suite.
Nicht geprüft
Wie ein Envelope die Regler im Instrument im Browser bewegt. Das deckt nur der Unit-Test ab.
Erledigt mit `165f022` „Crush a sound to fewer bits and a lower rate with a Bitcrusher (#322)“, Wiki `5ea149c`.
## Was drin ist
- Node **Bitcrusher** im Sound FX und im Instrument, mit drei Reglern:
- `bits` 1–16 (Standard 8, auch Kommawerte, damit eine Rampe nie springt)
- `rate` 100 Hz bis 48 kHz (Standard 8000, Sample-and-Hold)
- `mix` (Standard 1, fest auf 0 fällt der Node ganz weg)
- Alle drei bewegen sich während des Spielens: *Set sound FX parameters* (`rate` in Oktaven) und im Instrument per Envelope.
- Läuft als zweiter Prozessor im selben Worklet-Modul wie der Pitch, das Modul heißt jetzt `src/viewport/fxWorklet.ts`. Die Rechnung steckt in der Klasse `Crusher` (`src/core/soundfx/crusher.ts`) und ist in Node getestet. Ohne Worklet geht der Klang unverändert durch.
- Gemessen auf melektaus-atx: etwa 68 Stimmen mit Bitcrusher gleichzeitig (64 Stereo-Stimmen, 2 s Audio in 1,9 s gerendert). Zum Vergleich Pitch: etwa 24.
## Tests
- Unit: 176 Dateien, 2934 grün (9 neue Fälle). Gegenprobe ohne Runden: 2 von 4 Crusher-Tests rot.
- e2e 34: ALL PASSED, 58 Checks (1 neu, rendert offline in Chrome: 2 Bits bei 4 kHz ergeben 5 Stufen, je 12 Samples gehalten).
- e2e 64: ALL PASSED, 30 Checks. Gate: CHECK EXIT 0, 3946 Tests.
## Nebenbei
Der Aufräum-Check in e2e 64 aus `af9b202` hat Suite 553 rot gemacht. Er prüft jetzt nur noch sein eigenes Behavior und gibt aus, welche Editor-Vorschau noch läuft. Welches frühere Modul seine stehen lässt, steht dann in der nächsten Suite.
## Nicht geprüft
Wie ein Envelope die Regler im Instrument im Browser bewegt. Das deckt nur der Unit-Test ab.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Aus der Einschätzung der Sound-FX-Nodes nach #317 (Gespräch 2026-10-05). Heute gibt es Input, Output, Gain, Pitch, 5-Band-EQ und Mix.
Bittiefe und Abtastrate senken, für den typischen Retro- und 8-bit-Klang.
Vorschlag:
WaveShaperNodemit einer Treppenkurve. Das ist klein.AudioWorkletoder eine Rechnung am Puffer beim Start.Haken:
WaveShaperNodelässt sich nicht rampen. Ändern sich die Bits mitten im Sound, wird die Kurve getauscht, und das kann knacken.Rückfragen:
Entscheidungen (Gespräch 2026-10-06)
Gehört jetzt zum Plan von #329 und kommt dort als erster Commit.
AudioParams, lassen sich rampen und von einem Envelope bewegen. Weil die Bits stufenlos sind, knackt eine Rampe nicht wie ein Kurventausch imWaveShaperNode.Erledigt mit
165f022„Crush a sound to fewer bits and a lower rate with a Bitcrusher (#322)“, Wiki5ea149c.Was drin ist
bits1–16 (Standard 8, auch Kommawerte, damit eine Rampe nie springt)rate100 Hz bis 48 kHz (Standard 8000, Sample-and-Hold)mix(Standard 1, fest auf 0 fällt der Node ganz weg)ratein Oktaven) und im Instrument per Envelope.src/viewport/fxWorklet.ts. Die Rechnung steckt in der KlasseCrusher(src/core/soundfx/crusher.ts) und ist in Node getestet. Ohne Worklet geht der Klang unverändert durch.Tests
Nebenbei
Der Aufräum-Check in e2e 64 aus
af9b202hat Suite 553 rot gemacht. Er prüft jetzt nur noch sein eigenes Behavior und gibt aus, welche Editor-Vorschau noch läuft. Welches frühere Modul seine stehen lässt, steht dann in der nächsten Suite.Nicht geprüft
Wie ein Envelope die Regler im Instrument im Browser bewegt. Das deckt nur der Unit-Test ab.