cpal 0.15.3

Low-level cross-platform audio I/O library in pure Rust.
Documentation
# Unreleased

# Version 0.15.3 (2024-03-04)

- Add `try_with_sample_rate`, a non-panicking variant of `with_sample_rate`.
- struct `platform::Stream` is now #[must_use].
- enum `SupportedBufferSize` and struct `SupportedStreamConfigRange` are now `Copy`.
- `platform::Device` is now `Clone`.
- Remove `parking_lot` dependency in favor of the std library.
- Fix crash on web/wasm when `atomics` flag is enabled.
- Improve Examples: Migrate wasm example to `trunk`, Improve syth-thones example.
- Improve CI: Update actions, Use Android 30 API level in CI, Remove `asmjs-unknown-emscripten` target.
- Update `windows` dependency to v0.54
- Update `jni` dependency to 0.21
- Update `alsa` dependency to 0.9
- Update `oboe` dependency to 0.6
- Update `ndk` dependency to 0.8 and disable `default-features`.
- Update `wasm-bindgen` to 0.2.89

# Version 0.15.2 (2023-03-30)

- webaudio: support multichannel output streams
- Update `windows` dependency
- wasapi: fix some thread panics

# Version 0.15.1 (2023-03-14)

- Add feature `oboe-shared-stdcxx` to enable `shared-stdcxx` on `oboe` for Android support
- Remove `thiserror` dependency
- Swith `mach` dependency to `mach2`

# Version 0.15.0 (2023-01-29)

- Update `windows-rs`, `jack`, `coreaudio-sys`, `oboe`, `alsa` dependencies
- Switch to the `dasp_sample` crate for the sample trait
- Switch to `web-sys` on the emscripten target
- Adopt edition 2021
- Add disconnection detection on Mac OS

# Version 0.14.1 (2022-10-23)

- Support the 0.6.1 release of `alsa-rs`
- Fix `asio` feature broken in 0.14.0
- `NetBSD` support
- CI improvements

# Version 0.14.0 (2022-08-22)

- Switch to `windows-rs` crate
- Turn `ndk-glue` into a dev-dependency and use `ndk-context` instead
- Update dependencies (ndk, ndk-glue, parking_lot, once_cell, jack)

# Version 0.13.5 (2022-01-28)

- Faster sample format conversion
- Update dependencies (ndk, oboe, ndk-glue, jack, alsa, nix)

# Version 0.13.4 (2021-08-08)

- wasapi: Allow both threading models and switch the default to STA
- Update dependencies (core-foundation-sys, jni, rust-jack)
- Alsa: improve stream setup parameters

# Version 0.13.3 (2021-03-29)

- Give each thread a unique name
- Fix distortion regression on some alsa configs

# Version 0.13.2 (2021-03-16)

- Update dependencies (ndk, nix, oboe, jni, etc)

# Version 0.13.1 (2020-11-08)

- Don't panic when device is plugged out on Windows
- Update `parking_lot` dependency

# Version 0.13.0 (2020-10-28)

- Add Android support via `oboe-rs`.
- Add Android APK build an CI job.

# Version 0.12.1 (2020-07-23)

- Bugfix release to get the asio feature working again.

# Version 0.12.0 (2020-07-09)

- Large refactor removing the blocking EventLoop API.
- Rename many `Format` types to `StreamConfig`:
  - `Format` type's `data_type` field renamed to `sample_format`.
  - `Shape` -> `StreamConfig` - The configuration input required to build a stream.
  - `Format` -> `SupportedStreamConfig` - Describes a single supported stream configuration.
  - `SupportedFormat` -> `SupportedStreamConfigRange` - Describes a range of supported configurations.
  - `Device::default_input/output_format` -> `Device::default_input/output_config`.
  - `Device::supported_input/output_formats` -> `Device::supported_input/output_configs`.
  - `Device::SupportedInput/OutputFormats` -> `Device::SupportedInput/OutputConfigs`.
  - `SupportedFormatsError` -> `SupportedStreamConfigsError`
  - `DefaultFormatError` -> `DefaultStreamConfigError`
  - `BuildStreamError::FormatNotSupported` -> `BuildStreamError::StreamConfigNotSupported`
- Address deprecated use of `mem::uninitialized` in WASAPI.
- Removed `UnknownTypeBuffer` in favour of specifying sample type.
- Added `build_input/output_stream_raw` methods allowing for dynamically
  handling sample format type.
- Added support for DragonFly platform.
- Add `InputCallbackInfo` and `OutputCallbackInfo` types and update expected
  user data callback function signature to provide these.

# Version 0.11.0 (2019-12-11)

- Fix some underruns that could occur in ALSA.
- Add name to `HostId`.
- Use `snd_pcm_hw_params_set_buffer_time_near` rather than `set_buffer_time_max`
  in ALSA backend.
- Remove many uses of `std::mem::uninitialized`.
- Fix WASAPI capture logic.
- Panic on stream ID overflow rather than returning an error.
- Use `ringbuffer` crate in feedback example.
- Move errors into a separate module.
- Switch from `failure` to `thiserror` for error handling.
- Add `winbase` winapi feature to solve windows compile error issues.
- Lots of CI improvements.

# Version 0.10.0 (2019-07-05)

- core-foundation-sys and coreaudio-rs version bumps.
- Add an ASIO host, available under Windows.
- Introduce a new Host API, adding support for alternative audio APIs.
- Remove sleep loop on macOS in favour of using a `Condvar`.
- Allow users to handle stream callback errors with a new `StreamEvent` type.
- Overhaul error handling throughout the crate.
- Remove unnecessary Mutex from ALSA and WASAPI backends in favour of channels.
- Remove `panic!` from OutputBuffer Deref impl as it is no longer necessary.

# Version 0.9.0 (2019-06-06)

- Better buffer handling
- Fix logic error in frame/sample size
- Added error handling for unknown ALSA device errors
- Fix resuming a paused stream on Windows (wasapi).
- Implement `default_output_format` for emscripten backend.

# Version 0.8.1 (2018-03-18)

- Fix the handling of non-default sample rates for coreaudio input streams.

# Version 0.8.0 (2018-02-15)

- Add `record_wav.rs` example. Records 3 seconds to
  `$CARGO_MANIFEST_DIR/recorded.wav` using default input device.
- Update `enumerate.rs` example to display default input/output devices and
  formats.
- Add input stream support to coreaudio, alsa and windows backends.
- Introduce `StreamData` type for handling either input or output streams in
  `EventLoop::run` callback.
- Add `Device::supported_{input/output}_formats` methods.
- Add `Device::default_{input/output}_format` methods.
- Add `default_{input/output}_device` functions.
- Replace usage of `Voice` with `Stream` throughout the crate.
- Remove `Endpoint` in favour of `Device` for supporting both input and output
  streams.

# Version 0.7.0 (2018-02-04)

- Rename `ChannelsCount` to `ChannelCount`.
- Rename `SamplesRate` to `SampleRate`.
- Rename the `min_samples_rate` field of `SupportedFormat` to `min_sample_rate`
- Rename the `with_max_samples_rate()` method of`SupportedFormat` to `with_max_sample_rate()`
- Rename the `samples_rate` field of `Format` to `sample_rate`
- Changed the type of the `channels` field of the `SupportedFormat` struct from `Vec<ChannelPosition>` to `ChannelCount` (an alias to `u16`)
- Remove unused ChannelPosition API.
- Implement `Endpoint` and `Format` Enumeration for macOS.
- Implement format handling for macos `build_voice` method.

# Version 0.6.0 (2017-12-11)

- Changed the emscripten backend to consume less CPU.
- Added improvements to the crate documentation.
- Implement `pause` and `play` for ALSA backend.
- Reduced the number of allocations in the CoreAudio backend.
- Fixes for macOS build (#186, #189).

# Version 0.5.1 (2017-10-21)

- Added `Sample::to_i16()`, `Sample::to_u16()` and `Sample::from`.

# Version 0.5.0 (2017-10-21)

- Removed the dependency on the `futures` library.
- Removed the `Voice` and `SamplesStream` types.
- Added `EventLoop::build_voice`, `EventLoop::destroy_voice`, `EventLoop::play`,
  and `EventLoop::pause` that can be used to create, destroy, play and pause voices.
- Added a `VoiceId` struct that is now used to identify a voice owned by an `EventLoop`.
- Changed `EventLoop::run()` to take a callback that is called whenever a voice requires sound data.
- Changed `supported_formats()` to produce a list of `SupportedFormat` instead of `Format`. A
  `SupportedFormat` must then be turned into a `Format` in order to build a voice.