jarvis-cloud / modules /audio_repair.py
Jarvis2345's picture
Squash history — remove all prior commits (secret hygiene, S4)
a31f556
Raw
History Blame
1.26 kB
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.")