When using cpal as dependency in other project, it was found that cpal
won't build due to unresolved import of winapi::um::winbase. Added the
feature at line 24 in Cargo.toml.
The hardcoded errno was replaced by a constant, and `snd_pcm_prepare` was replaced by `snd_pcm_recover` per best practice (the underlying implementation seems same for now, though).
This is quite a significant update for CPAL, including a number of
breaking changes. Here is a list of the breaking changes along with
links to where you can find more information:
- A `Host` API has been introduced in #289 along with a follow-up
refactor in #295. Please see the examples for a demonstration of how
to update your code. The necessary changes should hopefully be
minimal. If this has caused you any major difficulty please let us
know in an issue!
- An ASIO host has been introduced in #292. This adds support for
Steinberg's ASIO audio driver API on Windows. Please see the ASIO
section of the README for more information on how to setup CPAL with
ASIO support for your project.
- The user callback API has been overhauled to emit `StreamEvent`s
rather than buffers in order to support handling stream errors. #288.
- Error handling in general was overhauled in #286. This meant taking
advantage of the `failure` crate and adding support for
backend-specific errors with custom messages. Many unnecessary
`panic!`s have been removed, but a few remain that would indicate bugs
in CPAL.
In general, checking out the updated examples will be the easiest way to
get a quick overview on how you can update your own code for these
changes.
The CHANGELOG.md has been updated to include these changes.
This existed prior to the introduction of the `Host` API, but was lost
in translation. This re-adds the bounds so that downstream code does not
suddenly break due to a lacking `Hash` implementation in the next
CPAL version.
This adds an implementation of ASIO message handling in a manner that
matches that demonstrated in the SDK's `hostsample.cpp` file.
Also refactors the code to ensure that both `buffer_switch` and
`buffer_switch_time_info` callbacks are handled.