OpenWave

Wer auf Windows oder macOS streamt, kennt Elgatos Wave Link: App-Audio zu Kanälen gruppieren, getrennte Mixe für Kopfhörer und Stream fahren und ein aufbereitetes „Clean Mic" an OBS geben. Auf Linux gibt es das schlicht nicht – dabei bringt PipeWire eigentlich alles mit, was man dafür braucht.

OpenWave füllt genau diese Lücke: ein in Rust geschriebener Daemon plus GUI, der als reine Policy-Schicht auf dem PipeWire-Graphen arbeitet. Kein eigenes DSP, keine Treiber – PipeWire ist die Engine, OpenWave dirigiert sie.

Kanäle, Mixe und eine Gain-Matrix

App-Streams werden zu virtuellen Kanälen gruppiert – Discord, Zoom und Teams landen z. B. zusammen im Kanal „Voice Chat". Jeder Kanal lässt sich über eine vollständige Gain-Matrix auf beliebig viele Mixe routen, mit unabhängiger Lautstärke pro Zelle: Auf den Kopfhörern läuft Musik laut, im Stream-Mix leise.

Dahinter steckt einiges an PipeWire-Detailarbeit:

  • Selbstheilende Gain-Stages – jede aktive Matrix-Zelle ist ein eigenes Loopback-Modul, das erst geladen wird, wenn die Zielknoten wirklich existieren, und sich nach Geräte-Unplug automatisch neu aufbaut.
  • Regelbasiertes Auto-Routing – neue App-Streams werden per Glob-Regeln auf application.name & Co. automatisch ihrem Kanal zugeordnet; das eigentliche Verlinken übernimmt WirePlumber, statt gegen den Session-Manager zu arbeiten.
  • Clean Mic – eine Echtzeit-FX-Chain aus EQ, Kompressor und DeepFilterNet/RNNoise-Rauschentfernung erscheint als virtuelle Quelle openwave.mic.clean, von der jede App aufnehmen kann.
  • Passive Pegel-Meter – Level-Messung, ohne den Graphen je aufzuwecken; die Fader in der egui-GUI sind gleichzeitig Live-Peak-Meter.

Local-first, auch headless

Die gesamte Konfiguration ist eine menschenlesbare TOML-Datei – kein Account, keine Telemetrie, und der komplette Graph übersteht Reboots per Konstruktion. Neben der GUI gibt es eine vollwertige CLI über einen Unix-Socket: Routing, Gains, Mutes, FX-Editing und Live-Meter direkt im Terminal.

Kurios am Rande: Obwohl OpenWave reine Linux-Software ist, entwickle ich es auf dem Mac – ein Mock-Backend lässt Daemon und GUI ohne PipeWire laufen, und die Integrationstests fahren den echten PipeWire-Stack in einem Fedora-Container hoch, lokal wie in der CI.

OpenWave ist aktuell Work in Progress – Paketierung für AUR und Flatpak steht schon, ein öffentliches Release noch nicht.

Sprachen

  • Rust90.0%
  • Shell10.0%

Skills

Aktivität

23 Commits letzten Monat