Document the process for running the examples. This was fairly
non-obvious and I spent a fair bit of time trying and failing to get
a client credentials token to work before finding in some discussion
that this is known not to work.
The wiki mentions using the oauth example as a way to get a token
and I think that is likely to be the best way to get a token for the
purposes of running the examples too.
Add support for choosing between native-tls and rustls-tls backends
through feature flags, with native-tls as the default for maximum
platform compatibility.
Key changes:
- Add mutually exclusive native-tls and rustls-tls feature flags
- Use conditional compilation to select TLS implementation
- Configure rustls-tls with platform certificate verifier
- Refactor to workspace-based dependency management
- Update CI workflows with improved cross-compilation support
- Add comprehensive TLS backend documentation
The native-tls backend uses system TLS libraries (OpenSSL on Linux,
Secure Transport on macOS, SChannel on Windows) while rustls-tls
provides a pure Rust implementation with platform certificate stores.
- Add pre-computed knee factor to eliminate division in sample loop
- Replace if-else chain with match pattern for cleaner branching
- Use direct references to reduce repeated array indexing
- Maintain existing stereo imaging via channel coupling
Addresses review comments from #1485 and incorporates optimizations
inspired by Rodio's limiter implementation for improved performance
in the stereo case.
Since Spotify audio is always 16-bit depth, optimize the conversion pipeline:
- Always dither at 16-bit level regardless of output format
- Preserve fractional precision until final rounding for better requantization
- Replace floating-point multiplication with compile-time bit shifts
- Add comprehensive inlining to eliminate function call overhead
- Specialize 24-bit clamping to remove runtime branching
This maintains proper dithering of the original 16-bit quantization artifacts
while maximizing performance through bit-shift operations and eliminating
unnecessary runtime calculations.
- Update MSRV to 1.85 and Rust edition to 2024.
- Refactor all logging macros to use inline argument formatting.
- Fix import order in main.rs and examples.
- Add async environment variable setter to main.rs as safe facade.
- Update many dependencies to latest versions across all crates
- Switch from `once_cell::OnceCell` to `std::sync::OnceLock` where appropriate
- Update OAuth to use stateful `reqwest` for HTTP requests
- Fix Rodio backend to honor the requested sample format
- Updated `MaybeExpiringUrls` to handle `verify` query parameter.
- Extracted expiry timestamp from `verify` parameter if present.
- Adjusted test cases to include URLs with `verify` parameter.
- Updated assertions to account for the new URL format.
This change ensures compatibility with URLs containing the `verify`
query parameter, improving the flexibility of the CDN URL handling.
Solves #1512
* re-add support to play a set of tracks
* connect: reduce some cloning
* connect: derive clone for LoadRequest
* apply review, improve function naming
* clippy fix
* Send play progress as PlayerEvent::PositionChanged
* Replaced PlayerEvent::PositionChanged with set_progress_callback() method
* Revert "Replaced PlayerEvent::PositionChanged with set_progress_callback() method"
This reverts commit f26e3de07b.
* Added opt-in config in PlayerConfig for progress event
* Added doc comments and set default position interval to 1sec for standalone
* Remove handling of PositionChanged in standalone binary
* Fixed wrong event handling
* spirc: Configurable volume control steps
Allow the volume control steps to be configured via the `--volume-steps`
command line parameter. The author personally found the default volume
steps of `1024` to be completely unusable, and is presently using `128`
as his configuration. Perhaps consider this as a more reasonable
default.
Additionally, reduce the delay in volume update from a wopping two
seconds to 500ms, again for usability.
Also clean up the seemingly unnecessary use of a pattern match on
whether or not `--initial-volume` was supplied.
* fixup! spirc: Configurable volume control steps
* fixup! spirc: Configurable volume control steps
* fixup! spirc: Configurable volume control steps
* fixup! spirc: Configurable volume control steps
* fixup! spirc: Configurable volume control steps
* fixup! spirc: Configurable volume control steps
---------
Co-authored-by: Scott S. McCoy <scott.s.mccoy@acm.org>