Sound FX: Saturation #323

Closed
opened 2026-10-05 22:37:52 +02:00 by meleki · 3 comments
Owner

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.

Ein Sound wird angezerrt, wärmer und lauter wirkend, bis hin zur Verzerrung.

Vorschlag:

  • WaveShaperNode mit fester tanh-Kurve und oversample = '4x' gegen Aliasing.
  • Drive (dB) ist ein Gain vor der Kurve, nicht ein Tausch der Kurve. Dadurch lässt er sich rampen.
  • Ein Gain nach der Kurve gleicht die Lautstärke aus, dazu kommt Mix (dry/wet).
  • Wie bei Gain und 5-Band-EQ: Jeder Wert kann von einem Parameter des Input-Nodes kommen und lässt sich mit Set sound FX parameters samt time und Easing an einer laufenden Stimme ändern.

Rückfragen:

  • Reicht eine weiche Sättigung (tanh), oder soll es Typen geben, etwa Hard clip, Tube (asymmetrisch) oder Foldback? Jeder Typ ist eine eigene feste Kurve und billig.
  • Soll die Lautstärke automatisch ausgeglichen werden, oder lieber ein eigenes Feld Output (dB)?
  • Soll ein Filter nach der Kurve (Tone) dabei sein, oder baut man das mit dem Filter-Node #318 selbst dahinter?
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*. Ein Sound wird angezerrt, wärmer und lauter wirkend, bis hin zur Verzerrung. Vorschlag: - `WaveShaperNode` mit fester `tanh`-Kurve und `oversample = '4x'` gegen Aliasing. - **Drive** (dB) ist ein Gain *vor* der Kurve, nicht ein Tausch der Kurve. Dadurch lässt er sich rampen. - Ein Gain *nach* der Kurve gleicht die Lautstärke aus, dazu kommt **Mix** (dry/wet). - Wie bei *Gain* und *5-Band-EQ*: Jeder Wert kann von einem Parameter des Input-Nodes kommen und lässt sich mit *Set sound FX parameters* samt `time` und Easing an einer laufenden Stimme ändern. Rückfragen: - Reicht eine weiche Sättigung (`tanh`), oder soll es Typen geben, etwa *Hard clip*, *Tube* (asymmetrisch) oder *Foldback*? Jeder Typ ist eine eigene feste Kurve und billig. - Soll die Lautstärke automatisch ausgeglichen werden, oder lieber ein eigenes Feld **Output** (dB)? - Soll ein Filter nach der Kurve (*Tone*) dabei sein, oder baut man das mit dem Filter-Node #318 selbst dahinter?
meleki added the new label 2026-10-05 22:37:52 +02:00
admin added this to the Development project 2026-10-06 15:56:09 +02:00
admin moved this to Next in Development on 2026-10-07 14:01:14 +02:00
  • je mehr typen desto besser
  • beides, wie potentiell beim compressor, auto-gain als weight 0-1, output feld soll es aber auch geben => auto-gain blendet dann einfach zwischen output-gain und errechnet dem gain
  • ich denke tone brauchen wir beim compressor nicht, oder ist es sinnvoll wenn das mit integriert ist?
- je mehr typen desto besser - beides, wie potentiell beim compressor, auto-gain als weight 0-1, output feld soll es aber auch geben => auto-gain blendet dann einfach zwischen output-gain und errechnet dem gain - ich denke tone brauchen wir beim compressor nicht, oder ist es sinnvoll wenn das mit integriert ist?
admin removed the new label 2026-10-07 15:30:24 +02:00
Author
Owner

Plan

Deine Antworten: möglichst viele Typen, Auto-gain als Gewicht von 0 bis 1 zusätzlich zu Output. Tone baue ich ein, so wie ich es empfohlen habe („passt alles“).

  • Neuer Node Saturation auf einem WaveShaperNode mit oversample = '4x'.
  • Type: Soft (tanh), Cubic, Hard clip, Tube (asymmetrisch), Fuzz, Foldback, Sine fold, Rectify. Jeder Typ ist eine feste Kurve, die einmal gerechnet wird.
  • Drive (dB, 0 bis 48) ist ein Gain vor der Kurve und lässt sich rampen.
  • Tone (0 bis 1, Standard 1 = offen): ein sanfter Tiefpass hinter der Kurve, von 1 kHz bei 0 bis 20 kHz bei 1.
  • Output (dB) und Auto-gain (0 bis 1): Hinter der Kurve gilt (1 - Auto-gain) · Output + Auto-gain · berechneter Wert. Der berechnete Wert hält einen Sinus bei -12 dBFS so laut, wie er hereinkam.
  • Mix (0 bis 1): Anteil des gesättigten Klangs, der Rest ist der trockene Klang.
  • Asymmetrische Kurven erzeugen Gleichspannung. Ein Hochpass bei 10 Hz nimmt sie heraus.
  • Falls das Oversampling im Browser verzögert, messe ich das und verzögere den trockenen Weg genauso, damit beim Mischen kein Kammfilter entsteht.
  • Alle Zahlen kommen auf Wunsch von einem Parameter des Inputs und lassen sich mit Set sound FX parameters samt time und Easing ändern.
## Plan Deine Antworten: möglichst viele Typen, Auto-gain als Gewicht von 0 bis 1 zusätzlich zu *Output*. *Tone* baue ich ein, so wie ich es empfohlen habe („passt alles“). - Neuer Node **Saturation** auf einem `WaveShaperNode` mit `oversample = '4x'`. - **Type:** Soft (tanh), Cubic, Hard clip, Tube (asymmetrisch), Fuzz, Foldback, Sine fold, Rectify. Jeder Typ ist eine feste Kurve, die einmal gerechnet wird. - **Drive** (dB, 0 bis 48) ist ein Gain vor der Kurve und lässt sich rampen. - **Tone** (0 bis 1, Standard 1 = offen): ein sanfter Tiefpass hinter der Kurve, von 1 kHz bei 0 bis 20 kHz bei 1. - **Output** (dB) und **Auto-gain** (0 bis 1): Hinter der Kurve gilt `(1 - Auto-gain) · Output + Auto-gain · berechneter Wert`. Der berechnete Wert hält einen Sinus bei -12 dBFS so laut, wie er hereinkam. - **Mix** (0 bis 1): Anteil des gesättigten Klangs, der Rest ist der trockene Klang. - Asymmetrische Kurven erzeugen Gleichspannung. Ein Hochpass bei 10 Hz nimmt sie heraus. - Falls das Oversampling im Browser verzögert, messe ich das und verzögere den trockenen Weg genauso, damit beim Mischen kein Kammfilter entsteht. - Alle Zahlen kommen auf Wunsch von einem Parameter des Inputs und lassen sich mit *Set sound FX parameters* samt `time` und Easing ändern.
Author
Owner

Erledigt mit d3a4cb7 „Warm up or distort a sound with a Saturation node“.

Gebaut

  • Acht Typen, jeder eine feste, einmal gerechnete Kurve: Soft (tanh), Cubic, Hard clip, Tube, Fuzz, Foldback, Sine fold und Rectify.
  • Drive (0 bis 48 dB) verstärkt vor der Kurve. Die Kurve reicht bis zum 256-Fachen der Vollaussteuerung, Drive gleitet also wie jeder Gain.
  • Output und Auto-gain werden übergeblendet wie beim Compressor. Auto-gain bringt einen Sinus mit -12 dBFS auf den RMS zurück, mit dem er hineinging.
  • Tone (deine Rückfrage, wie im Plan empfohlen): ein Tiefpass nach der Kurve, 1 kHz bei 0 bis 20 kHz bei 1. Ein Hochpass bei 10 Hz nimmt den Gleichanteil heraus, den die schiefen Typen erzeugen.
  • Mix blendet mit dem trockenen Signal. Das 4-fache Oversampling ist in Chrome 192 Samples spät, der trockene Weg wird um genau so viel verzögert. Für Stimmen, Mix und Busse zählt der Node mit dieser Laufzeit.

Tests

  • Unit: saturation (neu) 5, soundfx 51 (2 neu), sound-library 101 (1 neu), grün.
  • Gegenproben: trockener Weg ohne Verzögerung (1 rot), Level ohne Auto-gain (2 rot).
  • e2e 34 (melektaus-atx): ALL PASSED, 79 Checks (1 neu). Chrome offline: 192 Samples spät bei 48 und 44,1 kHz. Halb trocken bei 1125 Hz (dort würden 192 Samples Versatz auslöschen): 0,00 dB. Sinus mit -12 dBFS, 24 dB in Soft gefahren, kommt mit vollem Auto-gain bei 0,00 dB heraus.
  • Gate (melektaus-atx) über den Endstand der Serie: CHECK EXIT 0, 267 Dateien, 4134 Tests.

Nicht geprüft: wie es klingt, die Tests laufen stumm. Die 192 Samples sind nur in Chrome gemessen.

Wiki: Sounds (Abschnitt Saturation) und Instruments, Wiki-Commit 892ae19.

Erledigt mit `d3a4cb7` „Warm up or distort a sound with a Saturation node“. ## Gebaut - **Acht Typen**, jeder eine feste, einmal gerechnete Kurve: Soft (tanh), Cubic, Hard clip, Tube, Fuzz, Foldback, Sine fold und Rectify. - **Drive** (0 bis 48 dB) verstärkt vor der Kurve. Die Kurve reicht bis zum 256-Fachen der Vollaussteuerung, Drive gleitet also wie jeder Gain. - **Output** und **Auto-gain** werden übergeblendet wie beim Compressor. Auto-gain bringt einen Sinus mit -12 dBFS auf den RMS zurück, mit dem er hineinging. - **Tone** (deine Rückfrage, wie im Plan empfohlen): ein Tiefpass nach der Kurve, 1 kHz bei 0 bis 20 kHz bei 1. Ein Hochpass bei 10 Hz nimmt den Gleichanteil heraus, den die schiefen Typen erzeugen. - **Mix** blendet mit dem trockenen Signal. Das 4-fache Oversampling ist in Chrome 192 Samples spät, der trockene Weg wird um genau so viel verzögert. Für Stimmen, Mix und Busse zählt der Node mit dieser Laufzeit. ## Tests - Unit: saturation (neu) 5, soundfx 51 (2 neu), sound-library 101 (1 neu), grün. - Gegenproben: trockener Weg ohne Verzögerung (1 rot), Level ohne Auto-gain (2 rot). - e2e 34 (melektaus-atx): ALL PASSED, 79 Checks (1 neu). Chrome offline: 192 Samples spät bei 48 **und** 44,1 kHz. Halb trocken bei 1125 Hz (dort würden 192 Samples Versatz auslöschen): 0,00 dB. Sinus mit -12 dBFS, 24 dB in Soft gefahren, kommt mit vollem Auto-gain bei 0,00 dB heraus. - Gate (melektaus-atx) über den Endstand der Serie: CHECK EXIT 0, 267 Dateien, 4134 Tests. **Nicht geprüft:** wie es klingt, die Tests laufen stumm. Die 192 Samples sind nur in Chrome gemessen. Wiki: *Sounds* (Abschnitt *Saturation*) und *Instruments*, Wiki-Commit `892ae19`.
admin moved this to Done in Development on 2026-10-07 21:32:13 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#323