Firmament — Bedienungsanleitung

Öffne den Himmel — ein Stereo-Widener und Imager für üppige orchestrale Layer.

Was Firmament ist

Firmament ist ein Mid/Side-Stereo-Widener und -Imager. Es ist eines von zwölf Plugins in der Heavy-Music-Suite von Basilica Audio, und seine Aufgabe in dieser Suite (und in jedem Mix) ist es, Inhalte, die bereits Stereoinformation besitzen — Streicher, Chöre, Synth-Pads, gedoppelte/geschichtete Gitarren, Ambience-Returns —, zu nehmen und zu steuern, wie breit sie sich anfühlen, ohne je zu beeinträchtigen, wie der Mix auf Mono zusammenfällt (Club-PA, Handylautsprecher, ein Broadcast-Mono-Check, ein Bassist, der seinen Part in Mono prüft).

Firmament erzeugt keine Stereobreite aus einem echt monofonen Signal von sich aus (Width und Low Width können nur skalieren, welche Stereo-Differenz im Input bereits vorhanden ist) — die Ausnahmen sind Haas Mode und Decorrelate, die aus nahezu monofonem Material tatsächlich ein Breitegefühl erzeugen können. Haas Mode und Classic Decorrelate tun das auf Kosten eines Teils der exakten Mono-Summen-Garantie, die der Rest des Plugins bietet (Haas kostet am meisten, Classic Decorrelate deutlich weniger — siehe unten). Die Velvet-Dense-/Sparse-Decorrelate-Modi aus v0.3.0 schließen diese Lücke vollständig: Sie synthetisieren Breite aus veröffentlichten Velvet-Noise-Dekorrelator-Designs und lassen dabei den Mono-Fold-down Bit für Bit identisch mit dem des Inputs — Verbreiterung aus Mono mit null Mono-Kompatibilitätskosten.

v0.2.0 hat außerdem überarbeitet, wie Auto Mono Safety reagiert (ruhigere Ballistik, eine Totzone um die Nullkorrelation, ein nutzerseitig einstellbarer Floor und ein optionaler Per-Band-Modus) und den Bereich von Bass Mono Freq erweitert — die vollständige Recherche hinter diesen Änderungen findest du in der Parameterreferenz sowie in docs/design-brief.md/docs/research-notes.md. Jeder neue Parameter startet mit einem Standardwert, der das Verhalten von v0.1.1 exakt reproduziert, sodass sich nichts ändert, sofern du nicht ausdrücklich eingreifst.

v0.3.0 rüstet Decorrelate mit zwei Velvet-Noise-Modi auf (veröffentlichte Dekorrelator-Designs von der DAFx-Konferenz), die — anders als Classic Decorrelate und anders als jeder Haas-Trick — konstruktionsbedingt vollständig mono-summensicher sind: Falte den Output auf Mono und du bekommst Bit für Bit die Mono-Summe des Inputs, bei jedem Velvet-Anteil. Hinzu kommen ein Bass Mono Mode-Wahlschalter (Phase Matched für einen nahtlosen Übergang; Linear Phase für mastering-taugliche Phasendrehungsfreiheit, auf Kosten von Latenz), ein drittes Width-Band (High Split / High Width), eine schnellere Dynamic-Safety-Reaktion mit kompressorartiger Ballistik, optional zuschaltbare Width Compensation (gleichbleibende Lautheit über den Width-Bereich) und ein Mono Audition-Monitorschalter. Wie immer entspricht jeder neue Parameter per Default exakt dem Verhalten von v0.2.0.

Wo es in einer Heavy-Music-Produktionskette sitzt

Firmament ist ein Width-/Imaging-Werkzeug, was es eher ans hintere Ende einer Kanal- oder Bus-Kette rückt, nachdem Tone-Shaping und Dynamik bereits entschieden sind:

  1. Korrektives/tonales EQ, Kompression, Saturation (z. B. overture, tenebrae, andere Suite-Mitglieder) — zuerst den Klang formen.
  2. Firmament — entscheiden, wie breit es sich anfühlen soll, sobald der Ton steht.
  3. Reverb-/Delay-Sends, finale Bus-Bearbeitung — Width-Entscheidungen vor dem Reverb beeinflussen, wie der Reverb-Tail selbst wahrgenommen wird; manche Engineers verbreitern lieber erst nach dem Reverb-Return, was je nach Quelle eine valide Alternative ist.

Typische Platzierungen in einer Heavy-Music-Produktion:

Signalfluss (Klartextversion)

Die vollständige technische Aufschlüsselung (Mermaid-Diagramm, exakte Mathematik, das reale Magnitude-/Phasenverhalten der Linkwitz-Riley-Crossover, Real-Time-Safety-Details) findest du in docs/architecture.md. Kurz gesagt:

  1. Der Input wird in Mid (Mono-Inhalt, (L+R)/2) und Side (Stereo-Differenz-Inhalt, (L-R)/2) aufgeteilt.
  2. Ist Bass Mono aus, skaliert Width das gesamte Side-Signal um einen einzigen Betrag.
  3. Ist Bass Mono aktiviert, wird Side in ein tiefes Band (unterhalb der Bass-Mono-Frequenz) und den Rest aufgeteilt; Low Width skaliert das tiefe Band. Ist zusätzlich High Split (v0.3.0) aktiviert, wird der Rest erneut in ein Mittenband (Width) und ein hohes Band (High Width) geteilt — ein 3-Band-Imager. Bass Mono Mode (v0.3.0) entscheidet, wie der Mid-Pfad zur Aufteilung steht: unangetastet (Classic), phasenangepasst über einen begleitenden Allpass (Phase Matched) oder zeitlich ausgerichtet über eine linearphasige FIR-Aufteilung (Linear Phase, mit gemeldeter Latenz).
  4. Ist Auto Mono Safety aktiviert, wird Side zusätzlich automatisch abgeschwächt, sobald der Input so stark phasenversetzt ist, dass die Korrelation die kleine Totzone um die Nullkorrelation verlässt (ein Sicherheitsnetz gegen Mono-Auslöschung) — zusätzlich zu dem, was die Width-Regler bereits getan haben —, entweder als eine globale Messung, oder (wenn Auto Mono Safety Multiband ebenfalls aktiviert und Bass Mono eingeschaltet ist) unabhängig pro Band, und entweder mit ruhiger Meter-Ballistik (Smooth) oder mit schneller, kompressorartiger Ballistik (Dynamic, v0.3.0).
  5. Mid und das prozessierte Side werden wieder zu Left/Right zusammengeführt. Im Classic-Bass-Mono-Modus wird Mid von alldem nie angetastet — und die Modi Phase Matched/Linear Phase ändern immer nur Mids Phase/Timing, nie seinen Inhalt — das garantiert die weiter unten beschriebene Mono-Fold-down-Sicherheit.
  6. Ist Width Comp (v0.3.0) aktiviert, gleicht ein Equal-Power-Makeup-Gain die von Width eingebrachte Pegeländerung aus.
  7. Ist Decorrelate aktiviert: Im Modus Classic wird der rechte Kanal durch ein Allpass-Netzwerk verarbeitet und per Decorrelate Amount eingemischt; in den Velvet-Modi (v0.3.0) erhalten stattdessen beide Kanäle velvet-noise-diffundierten Stereo-Differenz-Inhalt — vollständig mono-summensicher. Andernfalls wird, falls Haas Mode aktiviert ist, der rechte Kanal leicht relativ zu Left verzögert (Decorrelate und Haas schließen sich gegenseitig aus) — zuletzt angewendet, vor dem finalen Trim.
  8. Output trimmt den Gesamtpegel; Mono Audition (v0.3.0) ersetzt, wenn aktiviert, beide Kanäle durch den exakten Mono-Fold-down zur Kontrolle.

Gemeldete Latenz

Firmament ist latenzasymmetrisch nach Modus, und nur bei einem Modus. getLatencySamples() meldet exakt das:

Bass Mono Mode Gemeldete Latenz
Classic 0
Phase Matched 0
Linear Phase N/2 Samples — 2048 bei 48 kHz

Überall sonst in der Kette lautet die Zahl gleichermaßen null: Die Crossover sind Linkwitz-Riley-IIR-Strukturen, die Classic-Decorrelate-Allpass-Kaskade ist eine Direct-Form-Biquad-Kette, die Velvet-Dense/Sparse-Dekorrelatoren sind latenzfreie sparse FIRs, und die Delay von Haas Mode ist ein bewusster relativer Kanal-Offset statt eines Verarbeitungsartefakts, das ein Host kompensieren müsste — keines davon fügt gemeldete Latenz hinzu, bei keinem Setting, bei keiner Samplerate. Nur Linear Phase Bass Mono weicht ab: Sein FIR-Komplementär-Crossover meldet N/2 Samples, wobei N = 4096 * fs / 48000 auf gerade gerundet wird, die Zahl skaliert also mit der Samplerate (2048 bei 48 kHz; entsprechend mehr oder weniger bei anderen Raten), und sie wird dynamisch gemeldet, außerhalb des Audio-Threads, über einen 50-ms-Message-Thread-Servicing-Timer statt über den Audio-Callback. Ein Wechsel zu oder von Linear Phase während der Wiedergabe wendet ein kurzes (~5 ms) Mute an und kann deinen Host dazu bringen, die Plugin-Delay-Kompensation neu auszuhandeln — manche Hosts klicken dabei, weshalb die Tipps unten empfehlen, den Modus vor einem Render-Durchgang zu wählen statt ihn zu automatisieren. Ein klickfreier Übergang über eine Latenzänderung hinweg ist prinzipiell nicht erreichbar.

Parameterreferenz

Parameter Range Default Unit Was es bewirkt
Width 0-200 100 % Skaliert das Side-(Stereo-Differenz-)Signal. 100 % ist das ursprüngliche, unveränderte Stereobild des Inputs. 0 % kollabiert alles auf Mono (Side stummgeschaltet). 200 % verdoppelt die Amplitude des Side-Kanals für ein maximal breites, manchmal „gehyptes"/künstlich wirkendes Bild — in kleinen Dosen nützlich, auf einem ganzen Mix leicht übertrieben. Ist Bass Mono aktiviert, steuert Width nur das Band oberhalb der Bass-Mono-Frequenz.
Bass Mono Freq 0-600 0 (off) Hz Die Crossover-Frequenz, unterhalb derer Low Width (statt Width) das Side-Signal steuert. Bei 0 Hz (off) ist das gesamte Spektrum ein einziges, allein von Width gesteuertes Band. Typische Einstellungen liegen im Bereich 80–200 Hz — niedrig genug, um Kick-/Bass-/Low-Gitarren-Grundtöne zentriert zu lassen, hoch genug, um das „boxige" Low-Mid-Stereo-Verschmieren einzufangen, das manche breiten Reverbs/Pads erzeugen. Die oberen 500–600 Hz des Bereichs sind eine begründete, weniger zuverlässig belegte Erweiterung (siehe docs/research-notes.md) für Material, bei dem du die Stereokontrolle merklich weiter oben ansetzen willst als an der üblichen Bass-Mono-Eckfrequenz.
Low Width 0-200 0 % Unabhängige Width-Skalierung für das Band unterhalb von Bass Mono Freq — nur hörbar, solange Bass Mono Freq über 0 Hz liegt. Beim Standardwert von 0 % wird das tiefe Band zwangsweise auf Mono gesetzt, genau wie ein klassisches „Bass-Mono"-Utility — der übliche Mastering-Bus-Move, um Sub-Bass-Energie zentriert zu halten und auf kleineren Systemen gut zu übertragen. Erhöhe ihn über 0 %, wenn du gezielt etwas Breite auch im Tiefbass erhalten willst (selten, aber gelegentlich nützlich bei sehr breitem Pad-/Drone-Material, bei dem selbst der Low-End ein wenig atmen soll).
Auto Mono Safety off/on off - Zügelt bei Aktivierung automatisch das Side-Signal, sobald der Input stark phasenversetzt ist (die Korrelation tendiert unter eine kleine Totzone um Null, nicht schon bei irgendeinem negativen Wert — eine gelegentliche kleine Abweichung wird als unbedeutend behandelt), unabhängig von und zusätzlich zu Width/Low Width. Ein Sicherheitsnetz für automatisiertes Width oder aggressive Einstellungen auf unvorhersehbarem Quellmaterial; es betrifft Mid nie, kann also Firmaments Mono-Fold-down-Garantie nicht brechen — es zügelt nur, wie breit Side wird. Lass es aus, wenn du Width nach Gehör einstellst und volle manuelle Kontrolle willst; schalte es als Sicherheitsnetz auf Bussen ein, die du nicht ständig überwachen kannst.
Auto Mono Safety Floor -24 to 0 -9.1 dB Die minimale Side-Gain, die Auto Mono Safety bei vollständig phasenversetzter (Worst-Case-)Korrelation erreicht — nur relevant, solange Auto Mono Safety aktiviert ist. -9.1 dB ist der historische Standardwert (ein sanftes, hörbares, aber nicht drastisches Sicherheitsnetz); senke ihn (Richtung -24 dB) für ein festeres Netz bei breiten/exponierten Einstellungen, oder erhöhe ihn (Richtung 0 dB), wenn das Sicherheitsnetz auch im Einsatzfall kaum etwas bewirken soll.
Auto Mono Safety Multiband off/on off - Nur relevant, solange sowohl Auto Mono Safety als auch Bass Mono Freq aktiviert sind. Ist es eingeschaltet, bewertet Auto Mono Safety das tiefe und das hohe Band (geteilt bei Bass Mono Freq) unabhängig voneinander statt anhand einer globalen Korrelationsmessung — nützlich auf einem Master-Bus, wo der Low-End bereits sicher zentriert ist (Bass Mono/Low Width) und ein unabhängiges Phasenproblem in den Höhen nicht unnötig auch den Low-End dämpfen soll (oder umgekehrt). Standardmäßig aus, da es das Verhalten von Auto Mono Safety verändert, sobald beide Features gemeinsam aktiviert sind.
Haas Mode off/on off - Aktiviert eine alternative Verbreiterungstechnik: verzögert den rechten Kanal um Haas Time relativ zu Left, nach der Mid/Side-Stufe. Das kann genuin mono-kompatibles Material verbreitern (funktioniert sogar bei Width = 0 %) — anders als Width/Low Width bewahrt es aber keine exakte Mono-Summen-Übereinstimmung mit dem Input (das Summieren zweier zeitversetzter Kanäle erzeugt beim Mono-Fold-down Kammfilterung). Setze es bewusst ein, und prüfe immer einen Mono-Fold-down, bevor du dich festlegst, falls die Übertragbarkeit für das Ziel wichtig ist (z. B. Broadcast, Club-Systeme). Schließt sich gegenseitig mit Decorrelate aus — sind beide aktiviert, greift Decorrelate und das Delay von Haas Mode wird umgangen.
Haas Time 0-40 20 ms Das Left/Right-Delay, das Haas Mode anwendet, nur hörbar, solange Haas Mode aktiviert ist. Kurze Zeiten (5–15 ms) lesen sich als dezente Verbreiterung; die 15–35-ms-Zone des „Precedence-Effekts" liest sich als starke, immersive Breite; Zeiten nahe 40 ms beginnen, sich eher als eigenständiger Slap/Echo statt als Breite zu lesen — geh zurück, wenn du eine deutliche Wiederholung statt eines breiteren Bildes hörst.
Decorrelate off/on off - Eine sanftere Alternative zu Haas Mode, um nahezu monofones Material zu verbreitern (ein mono-getrackter Lead, ein schmales Pad): ein Netzwerk aus Allpass-Filtern verarbeitet den rechten Kanal, statt ihn zu verzögern. Wie Haas Mode ist das nicht mono-summen-sicher — es ist eine zweite, kleinere, bewusste Ausnahme von Firmaments Mono-Fold-down-Garantie, nicht „mono-sicher" —, aber die dokumentierten Kosten sind milde spektrale Welligkeit statt Haas Modes tiefer Kammfilter-Einbrüche. Schließt sich gegenseitig mit Haas Mode aus — sind beide aktiviert, greift Decorrelate und das Delay von Haas Mode wird umgangen.
Decorrelate Amount 0-100 50 % Wie viel vom Allpass-prozessierten Signal in den rechten Kanal eingemischt wird, nur hörbar, solange Decorrelate aktiviert ist. Höhere Werte verbreitern stärker, kosten aber mehr Mono-Fold-down-Welligkeit; niedrigere Werte sind subtiler und sanfter.
Output -24 to +24 0 dB Finaler Output-Trim, angewendet nach allem anderen (inklusive Haas Mode/Decorrelate). Firmament hat keinen eingebauten Limiter oder Ceiling — sowohl Width/Low Width über 100 % als auch Output über 0 dB können Gain hinzufügen, nutze dies also, um Pegeländerungen durch extreme Width-Einstellungen auszugleichen, nicht als allgemeine Gain-/Makeup-Stufe.
Decorrelate Mode (v0.3.0) Classic / Velvet Dense / Velvet Sparse Classic - Wählt den Decorrelate-Algorithmus. Classic ist die Allpass-Kaskade auf dem rechten Kanal aus v0.2.0, unverändert (mit kleinen, dokumentierten Mono-Fold-down-Kosten). Velvet Dense und Velvet Sparse nutzen veröffentlichte, optimierte Velvet-Noise-Dekorrelator-Paare (DAFx-18) auf beiden Kanälen und sind vollständig mono-summensicher: Der Mono-Fold-down des Outputs ist bei jedem Amount exakt die Mono-Summe des Inputs, weil nur der Stereo-Differenz-Inhalt synthetisiert wird — der Mono-Inhalt wird nie angetastet. Dense (30 Taps) ist das glatteste; Sparse (15 Taps) ist zwischen den Kanälen etwas farbiger, kostet aber halb so viel CPU. Ein Moduswechsel ist eine klickfreie 50-ms-Überblendung.
Bass Mono Mode (v0.3.0) Classic / Phase Matched / Linear Phase Classic - Wie die Bass-Mono-Frequenzweiche den Mid-Pfad behandelt (nur relevant, solange Bass Mono Freq über 0 Hz liegt). Classic ist exakt das Verhalten aus v0.2.0. Phase Matched führt Mid zusätzlich durch einen begleitenden Allpass, der die Phase der Weiche exakt nachvollzieht, wodurch die Naht zwischen tief und hoch über das gesamte Spektrum phasenkohärent wird (Frequenzgang pro Kanal flach innerhalb von +/-0,1 dB, Phase zwischen den Pfaden innerhalb von 1 Grad — gemessen, nicht behauptet). Linear Phase schaltet die Side-Aufteilung auf eine mastering-taugliche linearphasige FIR-Weiche ohne Phasendrehung und mit perfekter Rekonstruktion um — auf Kosten von Latenz (2048 Samples bei 48 kHz, zur automatischen Kompensation an den Host gemeldet). Ein Wechsel zu/von Linear Phase mitten in der Wiedergabe legt eine sehr kurze Stummschaltung ein und kann deinen Host dazu bringen, die Latenz neu auszuhandeln — manche Hosts klicken dabei; wähle den Modus lieber vor einem Render-Durchgang.
High Split (v0.3.0) 0 + 500-8000 0 (aus) Hz Eine zweite Frequenzweiche auf dem Side-Signal, oberhalb der Bass-Mono-Aufteilung, die die Width-Stufe zu einem 3-Band-Imager macht: Low Width unterhalb von Bass Mono Freq, Width zwischen den beiden Weichen, High Width oberhalb von High Split. Bei 0 Hz (aus) ändert sich nichts. Intern wird sie, wenn beide aktiv sind, stets mindestens eine Oktave über Bass Mono Freq gehalten. Am nützlichsten im Bereich 1–4 kHz (z. B. die Breite der Mitten so lassen und Becken-/Air-Inhalte separat öffnen oder zügeln).
High Width (v0.3.0) 0-200 100 % Width-Skalierung für das Band oberhalb von High Split — nur hörbar, solange High Split über 0 Hz liegt. Gleiche Semantik wie Width (100 % = unverändert, 0 % = mono, 200 % = verdoppeltes Side).
Safety Response (v0.3.0) Smooth / Dynamic Smooth - Reaktionsgeschwindigkeit von Auto Mono Safety. Smooth ist exakt das Verhalten aus v0.2.0: Die 300-ms-Meter-Ballistik-Schätzung treibt die Dämpfungskennlinie direkt — ruhig, aber ein kurzer gegenphasiger Transient kann durchrutschen. Dynamic detektiert über eine schnelle 30-ms-Schätzung und bewegt den Gain mit kompressorartiger Ballistik (5 ms Attack auf 90 % der benötigten Dämpfung, 250 ms Release) — es fängt gegenphasige Transienten ab, die Smooth durchlässt, und lässt sanft los, sobald sich das Material erholt. Funktioniert sowohl im Breitband- als auch im Multiband-Safety-Modus.
Width Comp (v0.3.0) off/on off - Equal-Power-Width-Kompensation: wendet ein Makeup-Gain von 1/sqrt(a^2+b^2) an (nur aus dem Breitband-Width), damit die Gesamtlautheit beim Durchfahren von Width konstant bleibt — ohne das ist Width 200 % messbar lauter und 0 % leiser, was „breiter klingt besser"-A/B-Urteile verzerrt. Per Default aus (die Mastering-Konvention lautet, dass Width-Änderungen nur den Side-Pegel ändern). Hinweis: berechnet allein aus dem Breitband-Width-Parameter; bei aktiven Multiband-Aufteilungen gehen Low/High Width nicht in die Formel ein.
Mono Audition (v0.3.0) off/on off - Monitorschalter: hört den exakten Mono-Fold-down (L+R)/2 auf beiden Kanälen ab, nach allem anderen, mit klickfreier Überblendung. Das ist der Tipp „prüfe immer in Mono" als Ein-Klick-Button. Ein Monitoring-Regler, keine Mix-Entscheidung — er ist aus den Werkspresets ausgenommen, aber automatisierbar, falls du in einem Template einen Mono-Check-Abschnitt willst.

Tipps

Presets

Firmament bringt dreizehn Werkspresets für die gängigsten Anwendungsfälle mit (orchestrale/chorische Breite, Doubled-Rhythmus-Verklebung, Bass-Mono auf dem Master-Bus, Sicherheitsnetze für automatisiertes Width, je ein Showcase-Preset für Decorrelate und Haas Mode und — neu in v0.3.0 — Velvet Width, Mastering: Linear Phase Bass Mono und Three-Band Imager) — die vollständige Liste und die Absicht hinter jedem einzelnen findest du in docs/presets.md. Die am oberen Rand des Plugin-Fensters angedockte Preset-Leiste lässt dich Werks-/User-Presets durchstöbern, eigene speichern, User-Presets umbenennen/löschen, einzelne Presets oder eine ganze Bank (ein Zip deiner User-Presets) importieren/exportieren und ein Preset als Standard festlegen, der bei einer frischen Instanz automatisch lädt. Presets sind eine zusätzliche Schicht über dem eigenen Plugin-State-Speichermechanismus deines Hosts, kein Ersatz dafür — deine DAW-Session speichert so oder so weiterhin, welcher Zustand gerade geladen ist.

Unter der Haube

Die Begründung und die vollständigen technischen Details stehen in docs/architecture.md; die Zahlen unten sind das, was die automatisierte Testsuite bei jedem Push tatsächlich erzwingt.

Mono-Kompatibilität ist strukturell, nicht getunt. Firmament kodiert nach Mid/Side (mid = (L+R)/2, side = (L-R)/2) und dekodiert als left = mid + side, right = mid - side. Jeder Width-Regler — Width, Low Width, High Width, Auto Mono Safety — skaliert ausschließlich Side; im Classic-Bass-Mono-Modus wird Mid von keinem davon je angetastet. Weil die Dekodierung immer left + right == 2*mid ist, unabhängig davon, was Side gerade ist, entspricht der Mono-Downmix des Outputs bei jedem Width-Setting dem Mono-Downmix des Inputs, einschließlich 0 % und 200 %. Das wird direkt auf Codec-Ebene geprüft, an der Engine über ein Spektrum an Settings, und unabhängig für jede Stufe, die es plausibel brechen könnte — Multiband-Width, Auto Mono Safety und das dritte Width-Band.

Velvet-Noise-Dekorrelation musste einen echten Widerspruch auflösen, nicht nur ein veröffentlichtes Design implementieren. Die veröffentlichten, optimierten Velvet-Noise-Dekorrelator-Paare (Koeffizienten als Daten aus den Tabellen des Open-Access-Papers übernommen, kein Drittanbieter-Code) dekorrelieren einzeln gut, aber ihre Summe trägt bei 48 kHz eine echte Notch von etwa 17 dB um 320 Hz — weil die Optimierung, die sie hervorgebracht hat, die eigene Flachheit jedes Filters und die Kohärenz des Paars einschränkt, aber nie die Summe des Paars. Als roher Wet-Mix pro Kanal angewendet würde diese Notch direkt im Mono-Fold-down auftauchen. Firmament hält stattdessen die verbreiternde Hälfte der Topologie intakt, pinnt aber den Mono-Anteil trocken: S' = (1-d)S + d*(A(L) - B(R))/2, M' = M. Das Ergebnis ist ein Dekorrelator, dessen Mono-Kompatibilität strukturell statt getunt ist — gemessene Fold-down-Abweichung ~0,0000003 dB bei Velvet Dense, Width 150 %, Amount 100 %, gegen 16,2 dB bei einer Haas-artigen Kontrolle auf demselben Programmmaterial —, und beide Kanäle werden tatsächlich verarbeitet statt nur einer, anders als im Classic-Modus.

Phase Matched beweist seine eigene Behauptung mit einer Negativkontrolle. Statt einen Allpass 2. Ordnung von Hand zu bauen, um der Phase der Weiche zu folgen, wrappt Phase Matched dieselbe Linkwitz-Riley-Filterklasse in ihrem eigenen dokumentierten Allpass-Modus, sodass der begleitende Mid-Pfad exakt dieselben internen Zustandsgleichungen und Koeffizienten wie die Weiche selbst teilt — die Phasen-Tracking-Garantie gilt konstruktionsbedingt, nicht durch sorgfältige Duplikation. Der Test, der das beweist, führt dieselbe Phasen-Tracking-Prüfung erneut aus, mit dem begleitenden Allpass durch Eins ersetzt, und verlangt, dass dieser Durchlauf scheitert — er misst dort 179,8 Grad Phasenfehler, gegen 5e-6 Grad, wenn der echte Allpass eingesetzt ist, was als Absicherung dient, dass der Test nicht still aufhört, etwas zu messen.

Linear Phase ist ein echtes Perfect-Reconstruction-FIR-Paar, keine Näherung: ein Kaiser-gefensterter Sinc-Tiefpass auf dem Mono-Side-Strom, mit dem High-Band und dem Mid-Pfad, die beide passend verzögert werden. Gemessenes Residuum gegen eine reine N/2-Sample-Delay: ~7e-9. Group Delay weicht über 20 Hz – 20 kHz um 0,0002 Samples von flach ab. Der Kernel wird auf dem Message-Thread neu berechnet und über einen einzigen Convolution::loadImpulseResponse-Aufruf installiert, der sein eigenes Hintergrund-Laden und die Output-Überblendung übernimmt, statt eines handgebauten Doppelpuffers — bewusst, weil JUCEs schlichte FIR-Filter-Klasse ihre Koeffizienten nicht vom Message-Thread aus neu zuweisen kann, während der Audio-Thread sie ohne Data Race liest.

Drei-Band-Width summiert flach, weil das Low-Band vor der Summe phasenkorrigiert wird. Standard-3-Wege-Linkwitz-Riley-Praxis, und das Detail, das naive 3-Band-Splits normalerweise falsch machen: Das Low-Band durchläuft vor der Bandsumme einen Allpass, der zum High-Split passt, sodass alle drei Bänder dort identische Phase tragen. Gemessene Bandsummen-Abweichung: innerhalb von ±0,1 dB, sowohl im 3-Band-Fall als auch im Fall mit nur dem High-Split (2-Band).

Das Energie-Gate des Korrelations-Guards existiert wegen einer echten Falle. Ein leckendes Pearson-Korrelationsverhältnis ist unter Stille invariant — Zähler und Nenner klingen mit derselben Rate ab, das Verhältnis bewegt sich also nie. Jeder Korrelationsschätzer im Plugin — die Anzeige-Meter ebenso wie der Dynamic-Safety-Detektor — klingt seine Schätzung deshalb unterhalb eines Energie-Gates gegen null ab; ohne dieses Gate würden Meter bei Stille ±1 anzeigen, und der Dynamic-Guard könnte nach einem gegenphasigen Burst bei maximaler Abschwächung einrasten und nie mehr loslassen. Die eigene Ballistik von Dynamic ist als Zeit bis 90 % Einschwingen spezifiziert und gemessen (5 ms Attack, 250 ms Release), nicht als rohe Zeitkonstante, weil sich eine Lesart der ursprünglichen Spezifikation als rohe Zeitkonstante als nicht erfüllbar herausstellte — eine 250-ms-Zeitkonstante erreicht 90 % Recovery erst nach rund 575 ms, nicht nach 250.

Engineering-Hygiene: keine Heap-Allokationen auf dem Audio-Thread, bewiesen unter einem ersetzten Allocator über jede Decorrelate-/Bass-Mono-/Safety-Modus-Kombination, einschließlich Modus-Wechseln innerhalb der abgesicherten Region und dem reset() beim Linear-Phase-Pfad-Tausch. Jede bedingte DSP-Stufe läuft bei jedem Sample, unabhängig davon, ob sie gerade aktiviert ist — nur die Output-Auswahl wird gegatet — weil das Gaten des Verarbeitungsaufrufs selbst einmal den Filterzustand einfrieren statt abklingen ließ, was den einen Fall, in dem es so ausgeliefert wurde, einen hörbaren Transienten erzeugte (behoben in v0.1.1). Jedes Input-Sample wird auf NaN/Inf geprüft und auf null gesetzt, bevor es die M/S-Kodierung erreicht, weil der IIR-Zustand der Weiche und die leckenden Integratoren des Korrelationsschätzers sonst ein einzelnes vergiftetes Sample unbegrenzt weitertragen würden. Sessions aus v0.1.x und v0.2.0 laden mit jedem gespeicherten Wert intakt, verifiziert sowohl als Same-Binary-Toleranz-0-Null als auch gegen einen eingefrorenen, committeten v0.2.0-Referenz-Render.

Bekannte Einschränkungen

Recherchebasiertes Voicing (Ehrlichkeitshinweis)

Firmaments Standardwerte und Wertebereiche (der „typische" 80–200-Hz-Bereich von Bass Mono Freq, die Ordnung der Linkwitz-Riley-Crossover, das Haas-Time-Fenster, die Ballistik/Totzone von Auto Mono Safety, der Ansatz von Decorrelate) sind recherchebasiert — abgeleitet aus öffentlichen Handbüchern, Entwickler-/Produktdokumentation, dem Konsens aus Mastering-Foren und Fachpresse sowie akustischer/psychoakustischer Fachliteratur (die vollständige Quellenangabe findest du in docs/research-notes.md) — nicht gemessen am tatsächlichen Audio-Output irgendeines kommerziellen Stereo-Wideners, und kein proprietärer DSP-Algorithmus eines anderen Herstellers wurde untersucht, dekompiliert oder nachgebildet. docs/design-brief.md dokumentiert genau, welche Zahlen direkt belegt sind, welche belegt, aber mit geringerer Zuverlässigkeit sind, und welche begründete Entscheidungen sind, bei denen eine Quelle ein Prinzip, aber keinen exakten Zahlenwert festlegt.

Roadmap / was noch fehlt

Firmaments GUI ist noch der schlichte, funktionale Slider-/Toggle-Editor im v0.1/v0.2-Stil plus eine einfache Preset-Leiste — jeder Parameter oben ist vollständig aus dem eigenen Fenster des Plugins steuerbar (und aus den generischen Editor-/Automationsspuren jedes Hosts), aber es gibt noch keine eigens gezeichnete Oberfläche, und die Korrelations-/Phasenschätzung, die Auto Mono Safety antreibt, wird noch nicht als sichtbares Meter angezeigt (der DSP-Wert ist vollständig berechnet und getestet — siehe docs/architecture.md — nur das visuelle Widget steht noch aus). Beide sind für einen späteren Meilenstein vorgemerkt (eigene GUI + Metering).