Duck all PulseAudio sink-inputs (Firefox, Spotify, etc.) before speech, crossfade the entry tone over the fading media, then restore volumes after the exit tone. Uses pactl subprocesses for reliable PipeWire compatibility — pulsectl-asyncio's native protocol writes are silently dropped by PipeWire's PA compat layer. New module media_duck.py with MediaDucker class. Unduck is consolidated into the consumer's finally block to guarantee restoration on all exit paths (normal, error, cancel, shutdown).
Description
No description provided
Languages
Python
95.9%
Dockerfile
2%
Swift
1.4%
Makefile
0.7%