from __future__ import annotations import subprocess from dataclasses import dataclass from modules.service_control import restart @dataclass(slots=True) class AudioRepairResult: ok: bool message: str = "" def reset_audio_stack() -> AudioRepairResult: """Best-effort audio 'driver fix'. What we can safely do in Python without vendor tooling: 1) Restart Windows audio services (Audiosrv + AudioEndpointBuilder). 2) Ask Windows to re-enumerate audio endpoints (PnP rescan). """ r1 = restart("Audiosrv") r2 = restart("AudioEndpointBuilder") if not (r1.ok and r2.ok): msg = "; ".join([m for m in (r1.message, r2.message) if m]) return AudioRepairResult(False, msg or "Audio service restart failed.") try: # Trigger a PnP device rescan (doesn't require admin on many systems; harmless if it fails). subprocess.run( ["powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command", "pnputil /scan-devices"], capture_output=True, text=True, timeout=20, shell=False, ) except Exception: pass return AudioRepairResult(True, "Audio services restarted.")