# Streaming Audio `streaming-audio.sh` richtet ein persönliches Streaming-Audiorouting für Fedora, PipeWire, OBS und Discord ein. Das Skript trennt Spiel- und Systemton, Discord, Firebot und Soundboard in eigene virtuelle Ausgänge. ## Signalwege | Virtuelles Gerät | Verwendung | Kopfhörer | OBS | Discord | | --- | --- | --- | --- | --- | | `game_audio` | Spiel- und Systemton | ja | ja | nein | | `discord_sink` | Stimmen aus Discord | ja | ja | nein | | `firebot_sounds` | Firebot und Browser | ja | ja | nein | | `soundboard_sounds` | Soundboard und Stream Deck | ja | ja | ja, leiser | | `discord_micmix` | Gefiltertes OBS-Mikrofon und Soundboard-Kopie | nein | nein | ja | Das echte Mikrofon wird zuerst in OBS bearbeitet. Das OBS-Audiomonitoring leitet die gefilterte Stimme anschließend an `discord_micmix` und damit an das virtuelle Eingabegerät `Discord-Mikrofon` weiter. ## Voraussetzungen - Fedora oder ein vergleichbares System mit PipeWire und WirePlumber - `bash`, `pactl`, `pw-link`, `systemctl`, `awk` und `grep` - OBS Studio und Discord Die Gerätenamen und Routing-Regeln sind auf das ursprüngliche System abgestimmt. Vor einer Verwendung auf einem anderen Rechner müssen insbesondere `MIC_RE`, `LINE_OUT_RE` und gegebenenfalls die Erkennung der Anwendungen im Skript angepasst werden. ## Installation ```bash git clone https://git.hnz.io/hnzio/streaming-audio.git ~/Projekte/streaming-audio ln -s ~/Projekte/streaming-audio/streaming-audio.sh ~/bin/streaming-audio.sh ~/bin/streaming-audio.sh install ``` `install` schreibt die PipeWire-Konfiguration nach `~/.config/pipewire/pipewire.conf.d/10-streaming-sinks.conf` und startet die PipeWire-Benutzerdienste neu. Laufende Audioverbindungen werden dabei kurz unterbrochen. Danach sollten OBS, Discord, Firebot und das Soundboard neu gestartet werden. ## Verwendung ```bash ~/bin/streaming-audio.sh install ~/bin/streaming-audio.sh route ~/bin/streaming-audio.sh status ~/bin/streaming-audio.sh cleanup ~/bin/streaming-audio.sh restore-mic ``` - `install` bereinigt alte Instanzen und legt die virtuellen Geräte dauerhaft an. - `route` verschiebt aktive Anwendungen und stellt die PipeWire-Verbindungen her. - `status` zeigt Geräte, Audiostreams, Module und relevante Verbindungen an. - `cleanup` entfernt alte manuelle Module und deaktiviert doppelte Konfigurationen. - `restore-mic` setzt das erkannte ZOOM/H6 wieder als Standardmikrofon. `route` sollte ausgeführt werden, wenn OBS, Discord und die zu routenden Anwendungen bereits laufen oder gerade Ton ausgeben. Spiele sollten danach gestartet werden, damit sie den virtuellen Standardausgang `game_audio` verwenden. ## OBS und Discord In OBS unter **Einstellungen > Audio > Erweitert**: - Audiomonitoring-Gerät: `DiscordMicMix` In den erweiterten Audioeigenschaften: - Mikrofon: `Monitor und Ausgabe` - Soundboard und alle anderen Quellen: Monitoring aus In Discord: - Eingabegerät: `Discord-Mikrofon` `DiscordMicMix` darf nicht als eigene OBS-Quelle aufgenommen werden. Auch der physische Line-Out sollte nicht zusätzlich in OBS aufgenommen werden, da sonst doppelte Signale oder Hall entstehen können. ## Pegel anpassen Die Pegel und die Loopback-Latenz lassen sich über Umgebungsvariablen ändern: ```bash DISCORD_MIC_VOLUME=110% \ DISCORD_SOUNDBOARD_VOLUME=70% \ DISCORD_SOUNDBOARD_LATENCY_MS=40 \ ~/bin/streaming-audio.sh route ``` Standardwerte sind `115%`, `75%` und `30` Millisekunden. ## Hinweise zu `cleanup` Das Skript sucht in `~/.config/pipewire/pipewire.conf.d` nach anderen Konfigurationen, die Namen seiner virtuellen Geräte enthalten. Solche Dateien werden nicht gelöscht, sondern mit dem Zusatz `.disabled-by-streaming-audio` umbenannt. Falls dieser Name bereits existiert, wird eine freie nummerierte Variante verwendet. Vor dem ersten Einsatz auf einem anderen System empfiehlt es sich, die vorhandenen PipeWire-Konfigurationen zu sichern und die Trefferbedingungen im Skript zu prüfen.