Skip to content

Windows Volume Mixer Einträge anpassen #40

Description

@GorangN

Kosmetik: Windows Volume Mixer Einträge anpassen

Context

Die AudioPlaybackConnection API erstellt bei Start() zwei virtuelle Audio-Endpoints in Windows:

  1. Render-Endpoint (Phantom-Eintrag mit EasyBluetoothAudio-Logo) — macht nichts im Mixer
  2. Capture-Endpoint (Mikrofon-Icon) — steuert tatsächlich die BT-Audio-Lautstärke

Ziel: Den Mikrofon-Eintrag mit dem App-Icon ersetzen und den Phantom-Eintrag entfernen/verstecken.

Ansatz: IAudioSessionControl COM Interop

Nach erfolgreichem ConnectBluetoothAudioAsync einmalig die Audio-Sessions des eigenen Prozesses enumerieren und anpassen:

  1. IAudioSessionManager2 vom Audio-Endpoint holen
  2. GetSessionEnumerator() → alle Sessions des Prozesses durchgehen
  3. Für jede Session via IAudioSessionControl:
    • SetIconPath() → App-Icon setzen (z.B. Assets/Logo.ico als absoluter Pfad)
    • SetDisplayName() → "Easy Bluetooth Audio" setzen
  4. Phantom-Session identifizieren und ggf. via SetGroupingParam() zusammenführen oder ausblenden

Risiken

  • System-managed Endpoints: Windows könnte den Zugriff auf Sessions der AudioPlaybackConnection verweigern
  • COM Interop: Einmalig nach Connect (nicht gepollt), sollte keine Mixer-Seiteneffekte verursachen wie der alte Peak Meter
  • Windows-Versionsabhängig: Verhalten könnte zwischen Windows 10/11 Builds variieren

Benötigte COM Interfaces

  • IAudioSessionManager2 (GUID: 77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F)
  • IAudioSessionEnumerator
  • IAudioSessionControlSetIconPath(), SetDisplayName()
  • IMMDeviceEnumerator + IMMDevice (bereits bekannt aus altem Peak Meter Code)

Dateien

Datei Änderung
AudioService.cs Neue Methode ConfigureAudioSessionAppearance() + COM Interop
IAudioService.cs Ggf. Interface erweitern

Verifikation

  1. App starten → verbinden → Mixer prüfen: nur ein Eintrag mit EasyBluetoothAudio-Icon
  2. App beenden → Mixer prüfen: Eintrag weg (OnExit Dispose)
  3. Verschiedene Windows 11 Builds testen

Status

Geparkt — als separater Branch umsetzen, Experiment ob Windows die Session-Anpassung erlaubt.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions