Skip to main content

Route Windows app audio output and input devices using the same policy API path as EarTrumpet.

Project description

winappaudiorouter

CI Coverage Docs PyPI Version Python Versions License Platform

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 main branch 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, and CODECOV_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_name routing 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

winappaudiorouter-1.1.0.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

winappaudiorouter-1.1.0-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

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

Hashes for winappaudiorouter-1.1.0.tar.gz
Algorithm Hash digest
SHA256 54b2ac352aa7079042313e9b0975d33e422e88bbb3eab4db2e273c15588ad618
MD5 cefbdc7146e5e5bfa1adcba738903a65
BLAKE2b-256 159d7dea9dbd8b212bfad4e20c83df2950c817cb3b76660c832f7bea5cd757be

See more details on using hashes here.

File details

Details for the file winappaudiorouter-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for winappaudiorouter-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 62c929813bbcb2ec5be56c62e341fa3fb98b61bee0f74426f6e13790510108b2
MD5 d268ad73706dadde1f669cb449c0b918
BLAKE2b-256 f0fc944988f97e120ae429c1e55b155a4c48fa671914c3830ec94bffee092247

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page