From 3f3f86f597907b660c491c1f0f9bfa62116133c6 Mon Sep 17 00:00:00 2001 From: fojadrachi Date: Sat, 19 Sep 2026 21:14:36 +0200 Subject: [PATCH] Audioausgabe pro Tab: YouTube und YouTube Musik auf verschiedene Geraete legen In den Einstellungen (Gruppe "Audioausgabe", Felder "YouTube" und "YouTube Musik") laesst sich getrennt waehlen, ueber welches Ausgabegeraet der Ton jedes Tabs laeuft - z.B. auf getrennte Sonar-Kanaele. Die Auswahl gilt sofort, auch fuer bereits geoeffnete Seiten. Warum ueber die Seite: QtWebEngine spielt beide Tabs ueber einen gemeinsamen Audio-Prozess ab, Windows kann sie daher nicht einzeln routen. Chromium kann aber pro Medienelement ein Geraet waehlen (setSinkId). - audio_routing.py (neu): Router-Skript (findet das Geraet ueber seinen Namen, kennt den Hardware-ID-Suffix von Chromium, behandelt dynamisch erzeugte Elemente, Zielwechsel, Zuruecksetzen und fehlende Geraete), Geraeteliste (QMediaDevices), Freigabe der Geraetenamen (Chromium blendet sie ohne Mikrofon-Berechtigung aus) - Freigabe nur solange ein Tab ein eigenes Geraet nutzt, nur fuer die beiden YouTube- Seiten, nur fuer die laufende Sitzung (Qt speichert sie nicht) - bei jedem Start und nach jedem Seitenaufbau neu erteilt, weil sie auf der YouTube-Startseite sonst nicht greift - browser: BrowserTab.set_audio_output (Skript pro Seite; ohne Auswahl wird die Seite gar nicht angefasst) - settings_tab: neue Gruppe, Hot-Plug-Aktualisierung, fehlendes Geraet bleibt als "nicht verfuegbar" gespeichert, Discord-Anzeige nennt das bearbeitete Feld - config: audio.youtube_output / audio.music_output (leer = Systemstandard) - README: Abschnitt inkl. Hinweis, dass Windows weiter einen Eintrag "Playtube" zeigt --- README.md | 29 ++++++++ playtube/audio_routing.py | 151 ++++++++++++++++++++++++++++++++++++++ playtube/browser.py | 29 ++++++++ playtube/config.py | 6 ++ playtube/mainwindow.py | 36 ++++++++- playtube/settings_tab.py | 52 +++++++++++++ 6 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 playtube/audio_routing.py diff --git a/README.md b/README.md index 34b4582..9a35f97 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ Erweiterung) mit: Feldname, nie der Inhalt. Das folgt der Option „Status anzeigen, wenn gerade nichts läuft“ (aus = auch kein Einstellungs-Status). Discord übernimmt Änderungen höchstens alle 15 Sekunden, die Anzeige hinkt dem Klicken also etwas hinterher. +- **Audioausgabe pro Tab** – YouTube und YouTube Musik lassen sich in den Einstellungen + auf verschiedene Ausgabegeräte legen (z.B. getrennte Sonar-Kanäle), siehe unten. - **System-Tray** – Fenster schliessen minimiert nur (Musik läuft weiter), Rechtsklick aufs Tray-Icon zum Beenden, Play/Pause/Skip direkt aus dem Menü. - **Eigener Name** – erscheint als "Playtube" im Taskmanager, Fenstertitel, Alt-Tab @@ -68,6 +70,33 @@ sie ändern oder eine eigene Anwendung nutzen willst: In `config.json` lassen sich zudem `update_interval_seconds` (Mindestabstand zwischen Updates) und `show_idle_presence` (Status anzeigen, wenn gerade nichts läuft) anpassen. +## Audioausgabe pro Tab (YouTube / YouTube Musik) + +Im **Einstellungen-Tab** legst du unter „Audioausgabe“ getrennt fest, über welches +Ausgabegerät der Ton von **YouTube** und von **YouTube Musik** läuft (Standard: +Systemstandard). So kannst du z.B. YouTube auf „Sonar - Media“ und YouTube Musik auf +„Sonar - Aux“ legen und beide getrennt regeln. Nach „Speichern“ gilt die Auswahl sofort, +auch für bereits geöffnete Seiten (kein Neuladen nötig). + +Wichtig zu wissen: + +- **Windows zeigt weiterhin einen Eintrag „Playtube“.** Chromium (QtWebEngine) spielt den + Ton beider Tabs über *einen* gemeinsamen Audio-Prozess ab, deshalb kann Windows (auch + „App-Lautstärke und Geräteeinstellungen“) die Tabs nicht einzeln benennen oder routen. + Getrennt wird stattdessen über das **Gerät** - in Sonar & Co. also über den gewählten + Kanal/das gewählte Gerät. +- **Freigabe der Gerätenamen:** Chromium blendet Gerätenamen aus, solange die Seite keine + Mikrofon-Berechtigung hat. Damit die Seite das gewählte Gerät findet, erteilt Playtube + YouTube/YouTube Musik diese Freigabe - nur, solange mindestens ein Tab ein eigenes Gerät + nutzt, nur für diese beiden Seiten und nur für die laufende Sitzung (sie wird nicht + gespeichert und bei jedem Start neu erteilt). Es wird nichts aufgenommen. +- Ist das gewählte Gerät gerade nicht angeschlossen, bleibt die Auswahl (als „nicht + verfügbar“) gespeichert und der Ton läuft solange über den Systemstandard. +- Technik: [playtube/audio_routing.py](playtube/audio_routing.py) legt per + `HTMLMediaElement.setSinkId` die Medienelemente der Seite auf das Gerät (Suche über den + Gerätenamen). In der Konfiguration stehen die Namen unter `audio.youtube_output` und + `audio.music_output` (leer = Systemstandard). + ## App als eigenständige Playtube.exe packen Für die volle Taskmanager-/Audiomixer-Markierung wird die App als eigene .exe gebaut diff --git a/playtube/audio_routing.py b/playtube/audio_routing.py new file mode 100644 index 0000000..c2dfdf0 --- /dev/null +++ b/playtube/audio_routing.py @@ -0,0 +1,151 @@ +"""Audio-Ausgabe pro Tab: YouTube und YouTube Musik koennen ueber verschiedene +Ausgabegeraete laufen (z.B. verschiedene Sonar-Kanaele), einstellbar im Einstellungen-Tab. + +Warum ueber die Seite und nicht ueber Windows: QtWebEngine (Chromium) spielt den Ton beider +Tabs ueber EINEN gemeinsamen Audio-Prozess ab - Windows kann die Tabs deshalb nicht einzeln +routen (auch nicht "App-Lautstaerke und Geraeteeinstellungen"). Chromium selbst kann aber pro +Medienelement ein Ausgabegeraet waehlen (HTMLMediaElement.setSinkId). Dafuer wird in jeden +Tab ein kleines Skript eingeschleust (build_router_script), das die