| Lift freeq's AV media plane out of sleek 90f8b89 nandi 19d ago | 1 | # Changelog |
| 2 | |
| 3 | All notable changes to this project will be documented in this file. |
| 4 | |
| 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), |
| 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | |
| 8 | ## [Unreleased] |
| 9 | |
| 10 | ### Added |
| 11 | - Added `Driver::latencies()` |
| 12 | - `asio_message` now dispatches `kAsioResyncRequest` and `kAsioLatenciesChanged` to callbacks |
| 13 | instead of silently ignoring them |
| 14 | - `sample_rate_did_change` now dispatches `AsioDriverEvent::SampleRateChanged` to registered |
| 15 | callbacks when the reported rate differs from the last known rate |
| 16 | |
| 17 | ### Changed |
| 18 | - `Driver::add_message_callback` and `Driver::remove_message_callback` replaced by |
| 19 | `Driver::add_event_callback` and `Driver::remove_event_callback` |
| 20 | - `MessageCallback` renamed to `DriverEventCallback`, and `MessageCallbackId` renamed to |
| 21 | `DriverEventCallbackId`. `DriverEventCallback` wraps `Fn(AsioDriverEvent) -> bool` where |
| 22 | `AsioDriverEvent` is a new enum covering both `asioMessage` selector events and |
| 23 | `sampleRateDidChange` notifications |
| 24 | - `CallbackId` renamed to `BufferCallbackId` |
| 25 | - Public-facing `c_long` fields and return types replaced with `i32` |
| 26 | - Public-facing `c_double` parameters and return types replaced with `f64`. |
| 27 | - `Driver::latencies()` now returns `Latencies { input, output }`. |
| 28 | - `Driver::buffersize_range()` now returns `BufferSizeRange { min, max }`. |
| 29 | - `CallbackInfo::system_time` is now `u64` nanoseconds. |
| 30 | - `AsioError::ASE_NoMemory` renamed to `AsioError::NoMemory`. |
| 31 | - `AsioTime::reserved`, `AsioTimeInfo::reserved`, `AsioTimeCode::future` fields made private. |
| 32 | - `asio_import` module is now `pub(crate)`; raw bindgen types are no longer public API |
| 33 | - `asio_message` delegates `kAsioSelectorSupported` for unknown selectors to registered |
| 34 | callbacks, so each host decides which capabilities it opts into |
| 35 | |
| 36 | ### Fixed |
| 37 | - `Asio::load_driver` now returns `LoadDriverError::LoadDriverFailed` instead of panicking when the |
| 38 | driver name contains a null byte |
| 39 | - Fixed TOCTOU race condition when creating streams concurrently |
| 40 | - `Driver::set_sample_rate` now performs a dummy buffer cycle and driver reload when |
| 41 | the driver does not apply the rate change immediately, as required by some drivers |
| 42 | (e.g. Steinberg) |
| 43 | - Fixed `asio_message` not advertising `kAsioSelectorSupported` itself as a supported selector |
| 44 | - Fixed data race where `channels`, `latencies`, `sample_rate`, and related query methods could |
| 45 | call ASIO concurrently during `set_sample_rate`'s teardown/reload |
| 46 | |
| 47 | ### Removed |
| 48 | - Removed unused `SampleRate` struct |
| 49 | - `DriverState` is no longer part of the public API |
| 50 | |
| 51 | ## [0.2.6] - 2026-02-18 |
| 52 | |
| 53 | ### Fixed |
| 54 | - Link `advapi32` to resolve Windows Registry API symbols |
| 55 | |
| 56 | ## [0.2.5] - 2026-01-04 |
| 57 | |
| 58 | ### Fixed |
| 59 | - Fixed ASIO SDK discovery on case sensitive filesystems |
| 60 | |
| 61 | ## [0.2.4] - 2025-12-20 |
| 62 | |
| 63 | ### Fixed |
| 64 | - Fixed docs.rs documentation build by generating stub bindings when building for docs.rs |
| 65 | - Fixed buffer switch detection to work correctly with non-conformant ASIO drivers |
| 66 | |
| 67 | ## [0.2.3] - 2025-12-12 |
| 68 | |
| 69 | ### Added |
| 70 | - Added `edition = "2021"` and `rust-version = "1.70"` to Cargo.toml |
| 71 | - Added README.md with usage documentation |
| 72 | - Added CHANGELOG.md following Keep a Changelog format |
| 73 | - Added rustfmt.toml for consistent formatting |
| 74 | |
| 75 | ### Changed |
| 76 | - Update `bindgen` to 0.72 |
| 77 | - Update `cc` to 1.2 |
| 78 | - Update `parse_cfg` to 4.1 |
| 79 | - Update enumerate example to use `pub type SampleRate = u32` instead of `pub struct SampleRate(pub u32)` for consistency with cpal |
| 80 | |
| 81 | ### Fixed |
| 82 | - Fix linker flags for MinGW cross-compilation |
| 83 | - Add `packed(4)` to representation of ASIO time structs in bindings |
| 84 | - Fix handling for `kAsioResetRequest` message to prevent driver UI becoming unresponsive |
| 85 | - Fix timeinfo flags type |
| 86 | |
| 87 | ## [0.2.2] - 2024-03-04 |
| 88 | |
| 89 | ### Added |
| 90 | - Automate ASIO SDK download during build (no longer requires manual download) |
| 91 | - Add support for `CPAL_ASIO_DIR` environment variable to use local SDK |
| 92 | |
| 93 | ### Changed |
| 94 | - Update `bindgen` to 0.59 |
| 95 | - Switch to `once_cell` from `lazy_static` |
| 96 | - Improve build script error messages and SDK detection |
| 97 | - Clean up build script structure |
| 98 | - Re-run build script when `CPAL_ASIO_DIR` changes |
| 99 | |
| 100 | ### Fixed |
| 101 | - Fix segmentation fault during build on some systems |
| 102 | - Fix various compiler warnings |
| 103 | - Fix typos in code and comments |
| 104 | |
| 105 | ## [0.2.1] - 2021-11-26 |
| 106 | |
| 107 | ### Changed |
| 108 | - Update `bindgen` to 0.56 |
| 109 | |
| 110 | ### Fixed |
| 111 | - Fix some typos and warnings |
| 112 | |
| 113 | ## [0.2.0] - 2020-07-22 |
| 114 | |
| 115 | ### Changed |
| 116 | - Update repository URL to https://github.com/RustAudio/cpal/ |
| 117 | |
| 118 | ## [0.1.0] - 2020-07-22 |
| 119 | |
| 120 | Initial release. |
| 121 | |
| 122 | ### Added |
| 123 | - FFI bindings to Steinberg ASIO SDK |
| 124 | - Automatic binding generation using bindgen |
| 125 | - Support for MSVC toolchain on Windows |
| 126 | - Basic error types: `AsioError`, `LoadDriverError` |
| 127 | |
| 128 | [Unreleased]: https://github.com/RustAudio/cpal/compare/asio-sys-v0.2.6...HEAD |
| 129 | [0.2.6]: https://github.com/RustAudio/cpal/compare/asio-sys-v0.2.5...asio-sys-v0.2.6 |
| 130 | [0.2.5]: https://github.com/RustAudio/cpal/compare/asio-sys-v0.2.4...asio-sys-v0.2.5 |
| 131 | [0.2.4]: https://github.com/RustAudio/cpal/compare/asio-sys-v0.2.3...asio-sys-v0.2.4 |
| 132 | [0.2.3]: https://github.com/RustAudio/cpal/compare/asio-sys-v0.2.2...asio-sys-v0.2.3 |
| 133 | [0.2.2]: https://github.com/RustAudio/cpal/compare/asio-sys-v0.2.1...asio-sys-v0.2.2 |
| 134 | [0.2.1]: https://github.com/RustAudio/cpal/compare/asio-sys-v0.2.0...asio-sys-v0.2.1 |
| 135 | [0.2.0]: https://github.com/RustAudio/cpal/compare/asio-sys-v0.1.0...asio-sys-v0.2.0 |
| 136 | [0.1.0]: https://github.com/RustAudio/cpal/releases/tag/asio-sys-v0.1.0 |