Route Windows app audio output and input devices using the same policy API path as EarTrumpet.
Project description
winappaudiorouter
winappaudiorouter is a Python library for changing output and input audio devices per app on Windows, without requiring external tools. It follows the same Windows routing path used by EarTrumpet/SoundVolumeView:
Windows.Media.Internal.AudioPolicyConfig::SetPersistedDefaultAudioEndpoint.
Full documentation lives at https://winappaudiorouter.readthedocs.io/.
Features
- Enumerate active output and input devices.
- Enumerate active app audio sessions for output or input flows.
- Read persisted app output or input devices by PID or process name.
- Route one app PID (or all active sessions by process name) to a target output or input device.
- Clear persisted app routing (return to system default).
- CLI + Python API.
Installation
pip install winappaudiorouter
For local development:
pip install -e .[dev]
CLI Usage
winappaudiorouter list-devices
winappaudiorouter list-devices --flow input
winappaudiorouter list-sessions
winappaudiorouter list-sessions --flow input
winappaudiorouter route --process-name chrome.exe --device "Headphones"
winappaudiorouter route --flow input --process-name obs64.exe --device "USB Mic"
winappaudiorouter route --pid 1234 --device "{0.0.0.00000000}.{GUID}"
winappaudiorouter clear --process-name chrome.exe
winappaudiorouter clear --flow input --pid 4567
winappaudiorouter get --pid 1234
winappaudiorouter get --flow input --process-name obs64.exe
winappaudiorouter get --process-name chrome.exe # Get the current device for all chrome.exe processes
--flow accepts output (default) or input.
Python Usage
import winappaudiorouter as war
output_devices = war.list_output_devices()
input_devices = war.list_input_devices()
output_sessions = war.list_app_sessions()
input_sessions = war.list_input_sessions()
war.set_app_output_device(process_name="chrome.exe", device="Headphones")
war.clear_app_output_device(process_name="chrome.exe")
war.get_app_output_device(process_name="chrome.exe") # {} means <system default>
war.set_app_input_device(process_name="obs64.exe", device="USB Mic")
war.clear_app_input_device(process_name="obs64.exe")
war.get_app_input_device(process_name="obs64.exe") # {} means <system default>
Running tests
python -m pytest -q
python -m pytest --cov=winappaudiorouter --cov-report=term-missing --cov-report=xml
python -m sphinx -W --keep-going -b html docs docs/_build/html
CI and PyPI publish
- CI tests/build run on push and pull requests.
- Coverage is uploaded to Codecov from the
mainbranch CI workflow. - Documentation is published on Read the Docs.
- PyPI publish workflow runs on tag pushes like
v1.0.1. - GitHub repo secrets required:
PYPI_API_TOKEN,RTD_API_KEY, andCODECOV_TOKEN.
Contribution guidelines
Please read CONTRIBUTING.md before opening a pull request.
License
This project is licensed under the MIT License. See LICENSE.
Limitations
- Windows 10 1803+ only.
process_namerouting requires at least one active audio session for that app in the selected flow.- Session re-binding can be asynchronous; some apps require playback or recording restart.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file winappaudiorouter-1.1.0.tar.gz.
File metadata
- Download URL: winappaudiorouter-1.1.0.tar.gz
- Upload date:
- Size: 16.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54b2ac352aa7079042313e9b0975d33e422e88bbb3eab4db2e273c15588ad618
|
|
| MD5 |
cefbdc7146e5e5bfa1adcba738903a65
|
|
| BLAKE2b-256 |
159d7dea9dbd8b212bfad4e20c83df2950c817cb3b76660c832f7bea5cd757be
|
File details
Details for the file winappaudiorouter-1.1.0-py3-none-any.whl.
File metadata
- Download URL: winappaudiorouter-1.1.0-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62c929813bbcb2ec5be56c62e341fa3fb98b61bee0f74426f6e13790510108b2
|
|
| MD5 |
d268ad73706dadde1f669cb449c0b918
|
|
| BLAKE2b-256 |
f0fc944988f97e120ae429c1e55b155a4c48fa671914c3830ec94bffee092247
|