Pycaw is a Python library designed exclusively for controlling audio devices on Windows systems. It allows programmatic access to audio sessions, volume control, and sound device management on the Windows platform.
Note: Pycaw does not support macOS or Linux. It is built specifically for Windows using Core Audio APIs. If you're looking for similar functionality on other platforms, you'll need alternative libraries.
Pycaw currently supports Python 3.10 through 3.14 on Windows. Supported Python versions are stable, non-EOL releases that have passed the project's Windows test matrix; newer Python releases are added after compatibility validation.
Latest stable release:
pip install pycawDevelopment branch:
pip install https://github.com/AndreMiras/pycaw/archive/main.zipSystem requirements:
choco install visualcpp-build-toolsfrom pycaw.pycaw import AudioUtilities
device = AudioUtilities.GetSpeakers()
volume = device.EndpointVolume
print(f"Audio output: {device.FriendlyName}")
print(f"- Muted: {bool(volume.GetMute())}")
print(f"- Volume level: {volume.GetMasterVolumeLevel()} dB")
print(f"- Volume range: {volume.GetVolumeRange()[0]} dB - {volume.GetVolumeRange()[1]} dB")
volume.SetMasterVolumeLevel(-20.0, None)
# or work with the 0-100 scale the Windows volume mixer uses:
print(f"- Volume: {device.volume_percent:.0f}%")
device.volume_percent = 50See more in the examples directory or visit the documentation.
Create the locked contributor environment and run the compatibility suite. uv
uses .python-version to install/select Python 3.14 and supplies reproducible
tools; Tox handles compatibility isolation.
uv sync --locked
uv run toxTox remains responsible for isolating the Python 3.10-3.14 minimum/current dependency matrix. To run one interpreter's lanes, use for example:
uv run tox -e py314-minimum,py314-currentDocumentation and release tools are opt-in groups:
uv sync --locked --no-default-groups --group docs
uv run --no-sync sphinx-build -M html docs/source docs/_build
uv sync --locked --only-group release
uv run --no-sync python -m build
uv run --no-sync python -m twine check dist/*Check or apply Ruff through the locked Tox environments:
uv run tox -e lint-check
uv run tox -e lint-formatRun the repository-local static type-checking boundary with:
uv run tox -e type-checkThis check covers pycaw/constants.py, pycaw/utils.py,
pycaw/callbacks.py, and the static contract fixture under tests/typecheck.
It does not represent package-wide PEP 561 support.
Maintainers with a separately installed Tox and the tox-uv plugin can still run
the equivalent tox commands directly. See the tests directory for
the test suite.
The dependency files serve distinct purposes. [project].dependencies in
pyproject.toml declares inclusive lower bounds for consumers;
requirements.txt exactly pins the supported minimum test lane; Tox's current
lane deliberately resolves the newest runtime dependencies; and uv.lock
reproduces normal contributor tools. The lock supplements rather than replaces
the minimum/current compatibility matrix.