Compressor: eigener Tab mit Knobs, Pegel-Verlauf und Kennlinie #378

Closed
opened 2026-10-09 21:47:56 +02:00 by meleki · 2 comments
Owner

Wunsch: Der Compressor (#326) bekommt einen eigenen Editor-Tab, so wie der Parametric EQ. Dazu kommt ein neues Control-Widget Knob, ein Slider in Kreisform.

Der Limiter bleibt, wie er ist.

Entscheidungen

  1. Nur der Compressor. Der Tab heißt wie der Node und öffnet sich wie beim Parametric EQ.
  2. Knobs für alle sieben Parameter: Threshold, Knee, Ratio, Attack, Release, Makeup, Auto-Gain.
  3. Pegel-Verlauf: Zwei Linien laufen von rechts nach links über die letzten ~4 s, Pegel in dB.
    • Eingang grau, Ausgang farbig.
    • Wo der Compressor arbeitet, liegt die Ausgangslinie darunter. Die Lücke dazwischen ist leicht eingefärbt.
    • Eine waagrechte Linie zeigt den Threshold.
  4. Kennlinie: Eingang → Ausgang in dB, mit dem Knick bei Threshold und Knee und einem Punkt für den aktuellen Pegel. Threshold und Ratio lassen sich direkt an der Kurve ziehen.
  5. Bedienung des Knobs:
    • senkrecht ziehen, mit Shift fein
    • Mausrad = ein Schritt
    • Doppelklick = Standardwert
    • Klick auf die Zahl = tippen
  6. Der Knob kommt nur in diesen Tab. Das Widget ist allgemein gebaut, Inspector und Node-Zeilen bleiben Zahlenfelder.

Nicht dabei

  • Spektrum (war im ersten Wunsch, ist mit Punkt 3 ersetzt)
  • Limiter-Tab
Wunsch: Der Compressor (#326) bekommt einen eigenen Editor-Tab, so wie der Parametric EQ. Dazu kommt ein neues Control-Widget **Knob**, ein Slider in Kreisform. Der Limiter bleibt, wie er ist. ## Entscheidungen 1. **Nur der Compressor.** Der Tab heißt wie der Node und öffnet sich wie beim Parametric EQ. 2. **Knobs für alle sieben Parameter:** Threshold, Knee, Ratio, Attack, Release, Makeup, Auto-Gain. 3. **Pegel-Verlauf:** Zwei Linien laufen von rechts nach links über die letzten ~4 s, Pegel in dB. - Eingang grau, Ausgang farbig. - Wo der Compressor arbeitet, liegt die Ausgangslinie darunter. Die Lücke dazwischen ist leicht eingefärbt. - Eine waagrechte Linie zeigt den Threshold. 4. **Kennlinie:** Eingang → Ausgang in dB, mit dem Knick bei Threshold und Knee und einem Punkt für den aktuellen Pegel. **Threshold und Ratio lassen sich direkt an der Kurve ziehen.** 5. **Bedienung des Knobs:** - senkrecht ziehen, mit Shift fein - Mausrad = ein Schritt - Doppelklick = Standardwert - Klick auf die Zahl = tippen 6. **Der Knob kommt nur in diesen Tab.** Das Widget ist allgemein gebaut, Inspector und Node-Zeilen bleiben Zahlenfelder. ## Nicht dabei - Spektrum (war im ersten Wunsch, ist mit Punkt 3 ersetzt) - Limiter-Tab
Author
Owner

Erledigt mit 1df38bd und 2d4909d, Wiki 5b9343f und a51884f (Sounds, Architecture, Development).

Was gebaut ist

  • Eigener Tab per Doppelklick auf den Compressor-Node, ein Tab je Node. Seit #380 ist das wieder der Weg in den Tab.
  • Knob (src/ui/widgets/Knob.ts) als allgemeines Widget: senkrecht ziehen (Shift = fein), Mausrad = ein Schritt, Doppelklick = Standardwert, Klick auf die Zahl = tippen. Ein verbundener Eingang graut seinen Knob aus. Eingesetzt nur im Compressor, wie entschieden.
  • Pegel der letzten 4 s: Eingang grau, Ausgang farbig, die Lücke ist eingefärbt, wo mehr als 0,5 dB weggenommen wird. Dazu eine Linie für den Threshold. Jeder Messpunkt merkt sich die Verstärkung, die zu seiner Zeit galt.
  • Kennlinie von −60 bis 0 dB mit Punkt für den aktuellen Pegel. Den Knick zieht man für den Threshold, das Kurvenende für die Ratio.
  • Layout nach deinem Wunsch aus der zweiten Runde: Knobs immer unten, der Pegelverlauf füllt die Höhe, die Kennlinie steht rechts als Quadrat in der Mitte (180 bis 360 px, höchstens 40 % der Breite). Das schwebende Fenster hat eine Mindestgröße, die der Tab selbst angibt (im Test-Chrome 560 x 414).

Auto-gain (zweite Runde)

Frage Entscheidung
Was gleicht Auto-gain aus? Bezugspegel −18 dB: ein Signal mit −18 dB bleibt so laut, wie es war
Bedienung Schalter statt Regler, Makeup bzw. Output kommt obendrauf, gleich bei Compressor, Limiter und Saturation
  • Bei −40 dB / 4:1 / Knee 6 gibt Auto-gain jetzt +14,6 dB statt +28,1 dB.
  • Alte Zahlenwerte gelten als an, sobald sie über 0 liegen. Nie gesetzte Nodes behalten ihren Standard (Compressor aus, Limiter und Saturation an).

Selbst entschieden

  • Die Kennlinie zeigt nur das Komprimieren, ohne Makeup und Auto-gain, damit die Griffe genau ziehbar bleiben.
  • Bei Attack, Release und Ratio liegt der meiste Drehweg im unteren Bereich.
  • EQ- und Compressor-Tab lassen sich gleichzeitig abhören.

Tests

  • Gate (atx): CHECK EXIT 0, 282 Dateien, 4344 Tests
  • e2e 34 (atx): ALL PASSED, 118 Checks
  • Offline in Chrome: ein Sinus mit −18 dB durch −24 dB und 4:1 kommt mit Auto-gain bei −17,92 dB raus, ohne bei −22,42 dB (Kurve: −22,5).
  • Gegenproben: umgedrehte Ratio-Suche, stop() lässt alle Nodes los, fehlender Mindestschritt, Kennlinie oben statt mittig, Pegelbild mit Verstärkung 0. Jedes Mal wurde genau der passende Test rot.

Nicht geprüft

  • wie es klingt
  • Limiter und Saturation mit dem Schalter im Browser (nur Unit-Tests und der Offline-Check)
  • der angedockte Tab in einer sehr schmalen Spalte: dort gibt es keine Mindestgröße
Erledigt mit `1df38bd` und `2d4909d`, Wiki `5b9343f` und `a51884f` (*Sounds*, *Architecture*, *Development*). ## Was gebaut ist - **Eigener Tab** per Doppelklick auf den Compressor-Node, ein Tab je Node. Seit #380 ist das wieder der Weg in den Tab. - **Knob** (`src/ui/widgets/Knob.ts`) als allgemeines Widget: senkrecht ziehen (Shift = fein), Mausrad = ein Schritt, Doppelklick = Standardwert, Klick auf die Zahl = tippen. Ein verbundener Eingang graut seinen Knob aus. Eingesetzt nur im Compressor, wie entschieden. - **Pegel der letzten 4 s:** Eingang grau, Ausgang farbig, die Lücke ist eingefärbt, wo mehr als 0,5 dB weggenommen wird. Dazu eine Linie für den Threshold. Jeder Messpunkt merkt sich die Verstärkung, die zu seiner Zeit galt. - **Kennlinie** von −60 bis 0 dB mit Punkt für den aktuellen Pegel. Den Knick zieht man für den Threshold, das Kurvenende für die Ratio. - **Layout** nach deinem Wunsch aus der zweiten Runde: Knobs immer unten, der Pegelverlauf füllt die Höhe, die Kennlinie steht rechts als Quadrat in der Mitte (180 bis 360 px, höchstens 40 % der Breite). Das schwebende Fenster hat eine Mindestgröße, die der Tab selbst angibt (im Test-Chrome 560 x 414). ## Auto-gain (zweite Runde) | Frage | Entscheidung | |---|---| | Was gleicht Auto-gain aus? | Bezugspegel −18 dB: ein Signal mit −18 dB bleibt so laut, wie es war | | Bedienung | Schalter statt Regler, Makeup bzw. *Output* kommt obendrauf, gleich bei Compressor, Limiter und Saturation | - Bei −40 dB / 4:1 / Knee 6 gibt Auto-gain jetzt +14,6 dB statt +28,1 dB. - Alte Zahlenwerte gelten als an, sobald sie über 0 liegen. Nie gesetzte Nodes behalten ihren Standard (Compressor aus, Limiter und Saturation an). ## Selbst entschieden - Die Kennlinie zeigt nur das Komprimieren, ohne Makeup und Auto-gain, damit die Griffe genau ziehbar bleiben. - Bei Attack, Release und Ratio liegt der meiste Drehweg im unteren Bereich. - EQ- und Compressor-Tab lassen sich gleichzeitig abhören. ## Tests - Gate (atx): CHECK EXIT 0, 282 Dateien, 4344 Tests - e2e 34 (atx): ALL PASSED, 118 Checks - Offline in Chrome: ein Sinus mit −18 dB durch −24 dB und 4:1 kommt mit Auto-gain bei −17,92 dB raus, ohne bei −22,42 dB (Kurve: −22,5). - Gegenproben: umgedrehte Ratio-Suche, `stop()` lässt alle Nodes los, fehlender Mindestschritt, Kennlinie oben statt mittig, Pegelbild mit Verstärkung 0. Jedes Mal wurde genau der passende Test rot. ## Nicht geprüft - wie es klingt - Limiter und Saturation mit dem Schalter im Browser (nur Unit-Tests und der Offline-Check) - der angedockte Tab in einer sehr schmalen Spalte: dort gibt es keine Mindestgröße
admin added this to the Development project 2026-10-10 12:00:00 +02:00
admin moved this to Next in Development on 2026-10-10 12:00:08 +02:00
admin moved this to Done in Development on 2026-10-10 12:00:11 +02:00
Author
Owner

Nachtrag mit 3f7eb03: Der Speicher-Check zum Streaming hat in CI weiter gewackelt (Tasks 611, 614, 617 und zuletzt 66,7 MB gestreamt gegen 95,9 MB dekodiert). Allein wuchs der Renderer beim Streamen um 1 bis 8 MB, nach den 33 Modulen davor um 25 bis 66 MB.

  • Jetzt entscheidet die Zählung der Bibliothek: stats() liefert decodedBytes (Samples aller ganz dekodierten Dateien) und streaming.held (Heads der Kopien plus was an den Worklet vorausgeschickt ist).
  • Der Check verlangt: gestreamt weniger als 4 MB mehr als vorher und nichts ganz dekodiert, dekodiert mehr als 40 MB (die 5 Minuten sind bei 44,1 kHz 50,5 MB).
  • Der Prozess-RSS steht weiter im Log des Checks, entscheidet aber nicht mehr. Der Gegenbeweis „dekodiert wächst der Renderer um mehr als 40 MB“ bleibt unverändert.
e2e 34 (atx) → ALL PASSED, 136 Checks: gestreamt 0,76 MB mehr, dekodiert 50,5 MB
Gate (atx)   → CHECK EXIT 0, 288 Dateien, 4416 Tests

Nicht geprüft: der volle CI-Lauf mit dem neuen Check.

Nachtrag mit 3f7eb03: Der Speicher-Check zum Streaming hat in CI weiter gewackelt (Tasks 611, 614, 617 und zuletzt 66,7 MB gestreamt gegen 95,9 MB dekodiert). Allein wuchs der Renderer beim Streamen um 1 bis 8 MB, nach den 33 Modulen davor um 25 bis 66 MB. - **Jetzt entscheidet die Zählung der Bibliothek:** `stats()` liefert `decodedBytes` (Samples aller ganz dekodierten Dateien) und `streaming.held` (Heads der Kopien plus was an den Worklet vorausgeschickt ist). - **Der Check verlangt:** gestreamt weniger als 4 MB mehr als vorher und nichts ganz dekodiert, dekodiert mehr als 40 MB (die 5 Minuten sind bei 44,1 kHz 50,5 MB). - **Der Prozess-RSS steht weiter im Log** des Checks, entscheidet aber nicht mehr. Der Gegenbeweis „dekodiert wächst der Renderer um mehr als 40 MB“ bleibt unverändert. ``` e2e 34 (atx) → ALL PASSED, 136 Checks: gestreamt 0,76 MB mehr, dekodiert 50,5 MB Gate (atx) → CHECK EXIT 0, 288 Dateien, 4416 Tests ``` **Nicht geprüft:** der volle CI-Lauf mit dem neuen Check.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#378