Async Python implementation of the Resonate Protocol.
Project description
aioresonate
Async Python library implementing the Resonate Protocol.
For a WIP reference implementation of a server using this library, see Music Assistant
CLI Client
Note: The CLI client is currently included in the
aioresonatelibrary for development purposes. Once the Resonate Protocol stabilizes, it will be moved to a separate repository and package. This will require users to uninstallaioresonate[cli]and install the new CLI package separately.
This repository includes a highly experimental CLI client for testing and development purposes.
Quick Start
Run directly with uv:
uvx --from "aioresonate[cli]" resonate-cli
Installation
With pip:
pip install "aioresonate[cli]"
With uv:
uv tool install "aioresonate[cli]"
Install from source
git clone https://github.com/Resonate-Protocol/aioresonate.git
cd aioresonate
pip install ".[cli]"
After installation, run:
resonate-cli
The CLI client will automatically connect to a Resonate server on your local network and be available for playback.
Configuration Options
Client Identification
If you want to run multiple CLI clients on the same computer, you can specify unique identifiers:
resonate-cli --id my-client-1 --name "Kitchen"
resonate-cli --id my-client-2 --name "Bedroom"
--id: A unique identifier for this client (optional; defaults toresonate-cli-<hostname>, useful for running multiple instances on one computer)--name: A friendly name displayed on the server (optional; defaults to hostname)
Audio Output Device Selection
By default, the CLI client uses your system's default audio output device. You can list available devices or select a specific device:
List available audio devices:
resonate-cli --list-audio-devices
This displays all audio output devices with their IDs, channel configurations, and sample rates. The default device is marked.
Select a specific audio device:
resonate-cli --audio-device 2
This is particularly useful for headless devices or when you want to route audio to a specific output.
Adjusting Playback Delay
The CLI supports adjusting playback delay to compensate for audio hardware latency or achieve better synchronization across devices.
Setting delay at startup:
resonate-cli --static-delay-ms -100
Note: Based on limited testing, the delay value is typically a negative number (e.g.,
-100or-150) to compensate for audio hardware buffering.
Adjusting delay in real-time:
While the client is running, you can use the delay command:
delay- Show current delay valuedelay <ms>- Set absolute delay (e.g.,delay -100)delay + <ms>- Increase delay (e.g.,delay + 50)delay - <ms>- Decrease delay (e.g.,delay - 25)
The synchronization will seamlessly adjust to the new delay value within a couple of seconds.
Debugging & Troubleshooting
If you experience synchronization issues or audio glitches, you can enable detailed logging to help diagnose the problem:
resonate-cli --log-level DEBUG
This provides detailed information about time synchronization. The output can be helpful when reporting issues.
Limitations & Known Issues
This client is highly experimental and has several known limitations:
- Platform Support: Only tested on Linux; macOS and Windows support untested
- Format Support: Currently fixed to uncompressed 44.1kHz 16-bit stereo PCM
- CLI User Experience: The CLI is pretty bare bones for now
- Configuration Persistence: Settings are not persistently stored; delay must be reconfigured on each restart using the
--static-delay-msoption
Project details
Release history Release notifications | RSS feed
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 aioresonate-0.13.2.tar.gz.
File metadata
- Download URL: aioresonate-0.13.2.tar.gz
- Upload date:
- Size: 79.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ce684bfcd01266524c93b238807bb29bd869c72b680e137b0bcacff8b40d2d0
|
|
| MD5 |
f3a164d2cb9156a4cf1cc67f02bb033f
|
|
| BLAKE2b-256 |
1f32d53abb28d05d4e4a90189bd4d64358dd772f0c27a11f57b01d4e58d8a72f
|
Provenance
The following attestation bundles were made for aioresonate-0.13.2.tar.gz:
Publisher:
release.yml on Resonate-Protocol/aioresonate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aioresonate-0.13.2.tar.gz -
Subject digest:
0ce684bfcd01266524c93b238807bb29bd869c72b680e137b0bcacff8b40d2d0 - Sigstore transparency entry: 726889124
- Sigstore integration time:
-
Permalink:
Resonate-Protocol/aioresonate@20415a4d04fb37c5275cbbdc1da5e1064c9e2a7e -
Branch / Tag:
refs/tags/0.13.2 - Owner: https://github.com/Resonate-Protocol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@20415a4d04fb37c5275cbbdc1da5e1064c9e2a7e -
Trigger Event:
release
-
Statement type:
File details
Details for the file aioresonate-0.13.2-py3-none-any.whl.
File metadata
- Download URL: aioresonate-0.13.2-py3-none-any.whl
- Upload date:
- Size: 87.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d30dbb1f75c6fe9d29b02d7e29ce849b7d4a5d62145c37c696ac8dc6633598a
|
|
| MD5 |
619d36cc6a8c30c7ff39f82401ebd133
|
|
| BLAKE2b-256 |
f22f212c271494fbd97d6bc3ec8956acae9b015303519982c6bbfadbd0009a06
|
Provenance
The following attestation bundles were made for aioresonate-0.13.2-py3-none-any.whl:
Publisher:
release.yml on Resonate-Protocol/aioresonate
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aioresonate-0.13.2-py3-none-any.whl -
Subject digest:
8d30dbb1f75c6fe9d29b02d7e29ce849b7d4a5d62145c37c696ac8dc6633598a - Sigstore transparency entry: 726889130
- Sigstore integration time:
-
Permalink:
Resonate-Protocol/aioresonate@20415a4d04fb37c5275cbbdc1da5e1064c9e2a7e -
Branch / Tag:
refs/tags/0.13.2 - Owner: https://github.com/Resonate-Protocol
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@20415a4d04fb37c5275cbbdc1da5e1064c9e2a7e -
Trigger Event:
release
-
Statement type: