Skip to content

Latest commit

 

History

History
1404 lines (993 loc) · 49.1 KB

File metadata and controls

1404 lines (993 loc) · 49.1 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Added

  • AAudio: Xruns are now reported as ErrorKind::Xrun.
  • CoreAudio: Xruns are now reported as ErrorKind::Xrun.
  • PipeWire: Xruns are now reported as ErrorKind::Xrun.
  • WASAPI: Capture xruns are now reported as ErrorKind::Xrun.

Changed

  • CoreAudio: Bump objc2-core-foundation dependency lower bound to 0.3.1.
  • iOS: Timestamps now include hardware latency and update when the audio route changes.
  • JACK: Timestamps now include port latency.
  • WASAPI: The windows and windows-core dependencies are now both pinned to 0.62.

Fixed

  • Timestamps now stay monotonic across device and graph changes.
  • ALSA: A nonzero but sub-millisecond stream timeout is no longer treated as a non-blocking poll.
  • AudioWorklet: Fix Stream operations to work when called from any thread.
  • AudioWorklet: Fix stale audio output when a data callback wrote a partial buffer.
  • CoreAudio: Default-output streams now report xrun status.
  • CoreAudio: Fix stale audio output when a data callback wrote a partial buffer.
  • JACK: Streams with more channels than physical system ports no longer fail to build.
  • JACK: Channel enumeration is no longer capped at the physical system port count.
  • PipeWire: Fix streams starting audio before play() is called.
  • PipeWire: Streams for a specific device no longer auto-reroute if it disappears.
  • PulseAudio: NoData errors are no longer misreported as buffer xruns.
  • visionOS: The CoreAudio backend now builds.
  • WASAPI: Default device changes no longer report DeviceChanged, which wrongly implied the stream had rerouted automatically.
  • WASAPI: Reported buffer sizes are no longer off by one frame.
  • WASAPI: Stream::drop, play, and pause no longer panic when the device is lost.
  • WebAudio: Fix stale audio output when a data callback wrote a partial buffer.
  • WebAudio: Fix unsound Send + Sync on Stream when compiled with +atomics.
  • WebAudio: Fix Host::is_available() always returning true, even in non-window contexts.

0.18.1 - 2026-06-07

Fixed

  • Exclude pipewire from the docs.rs build; system dependency not available in its environment.
  • Fix wasm-bindgen causing compile errors on non-browser wasm32 targets such as wasm32-wasip1.

0.18.0 - 2026-06-06

Added

  • New ErrorKind variants for the unified error type: BackendError (platform error without a specific mapping); DeviceBusy (retryable device access, e.g. EBUSY/EAGAIN); DeviceChanged (audio route changed to another device); InvalidInput (invalid caller-supplied values); PermissionDenied (OS-level access denial); RealtimeDenied (real-time scheduling refused — previously only printed to stderr); ResourceExhausted (OS thread/memory limits); UnsupportedOperation (backend or device does not implement the operation).
  • Device now implements PartialEq, Eq, Hash, Display, and Debug on all backends.
  • realtime feature for real-time audio thread scheduling without a D-Bus build dependency.
  • StreamTrait::now() to query the current instant on the stream's clock.
  • StreamTrait::buffer_size() to query the stream's current buffer size in frames per callback.
  • SAMPLE_RATE_CD (44100 Hz) and SAMPLE_RATE_48K (48000 Hz) constants.
  • SupportedStreamConfigRange::try_with_standard_sample_rate() and with_standard_sample_rate() to select 48 kHz or 44.1 kHz from a range.
  • SupportedStreamConfigRange::contains_rate() to test whether a sample rate falls within a range.
  • StreamConfig and SupportedStreamConfig now implement Copy.
  • BufferSize now implements Default (returns BufferSize::Default).
  • SupportedBufferSize now implements Default (returns SupportedBufferSize::Unknown).
  • HostTrait::device_by_id() is now backend-dispatched, allowing each host to override the default implementation.
  • DSD512 sample rates added to the common rate probe list.
  • AAudio: Streams now request PERFORMANCE_MODE_LOW_LATENCY with the realtime feature; reports ErrorKind::RealtimeDenied if not granted.
  • ALSA: device_by_id() now accepts PCM shorthand names such as hw:0,0 and plughw:foo.
  • CoreAudio: tvOS target support (Tier 3, requires nightly).
  • PipeWire: New host for Linux and BSD via the native PipeWire API.
  • PulseAudio: New host for Linux and BSD via the PulseAudio API.
  • WASAPI: F64 sample format support.

Changed

  • Changed per-operation error types (DevicesError, SupportedStreamConfigsError, etc.) and HostUnavailable into a unified Error/ErrorKind. See UPGRADING.md.
  • DeviceTrait now requires PartialEq + Eq + Hash + Debug + Display with a stable device ID.
  • DeviceTrait::build_*_stream() now takes StreamConfig by value instead of &StreamConfig.
  • StreamInstant API changed and extended to mirror std::time::Instant/Duration. See UPGRADING.md for migration details.
  • Streams no longer start automatically on build_*_stream(); call play() explicitly. Previously ALSA, CoreAudio, and JACK auto-started streams on creation.
  • Default output and input configs now prefer 48 kHz, then 44.1 kHz, then the device maximum. Previously the preferred rate was backend-dependent (typically 44.1 kHz or device maximum).
  • SupportedStreamConfigRange::cmp_default_heuristics now ranks all SampleFormat variants; F32 > F64 > descending integer widths. Default configs may now return I32 or I24 on high-precision hardware. See UPGRADING.md.
  • Bump MSRV to 1.85.
  • DeviceId fields are now private; construct with DeviceId::new(host, id) and access with .host() / .id(). See UPGRADING.md.
  • audio_thread_priority feature renamed to realtime-dbus.
  • DeviceDescription::extended() now returns impl Iterator<Item = &str> instead of &[String]. See UPGRADING.md.
  • HostId::name() now returns a more human-friendly name.
  • DeviceDescriptionBuilder setters now accept impl AsRef<str> instead of impl Into<String>.
  • AAudio: Channel enumeration extended to 8 channels.
  • AAudio: Buffers with default sizes are now dynamically tuned.
  • AAudio: SupportedBufferSize in enumeration is now Unknown.
  • AAudio: Device names now include the device type suffix (e.g. Speaker (Builtin Speaker)).
  • AAudio: supported_input_configs() and supported_output_configs() now return an error for direction-mismatched devices instead of silently returning an empty list.
  • ALSA: Stream error callback now receives ErrorKind::DeviceNotAvailable on device disconnection.
  • ALSA: Callback timestamps use LinkSynchronized hardware cross-timestamps for lower jitter on supported devices.
  • ALSA: Try to resume from hardware after a system suspend.
  • ALSA: Loop partial reads and writes to completion.
  • ALSA: Polling errors trigger underrun recovery instead of looping.
  • ALSA: Prevent reentrancy issues with non-reentrant plugins and devices.
  • ALSA: Supported configurations are now enumerated up to 64 channels (AES10 maximum).
  • ALSA: The realtime feature now skips RT promotion for ineligible PCM types (null, I/O plugins, wrapper types).
  • ASIO: Timestamps now include driver-reported hardware latency.
  • ASIO: Stream error callback now receives ErrorKind::StreamInvalidated on kAsioResyncRequest or a sample rate change of 1 Hz or more from the configured rate.
  • ASIO: Hardware latency is re-queried when the driver reports kAsioLatenciesChanged.
  • ASIO: Device::driver, asio_streams, and current_callback_flag are no longer pub.
  • AudioWorklet: BufferSize::Fixed now sets renderSizeHint on the AudioContext.
  • AudioWorklet: Sample rates now enumerated as discrete standard rates in the spec-required range of 3-768 kHz.
  • CoreAudio: Timestamps now include device latency and safety offset.
  • CoreAudio: Physical stream format is now set directly on the hardware device.
  • CoreAudio: Stream error callback now receives ErrorKind::StreamInvalidated on any sample rate change on macOS, and on iOS on route changes that require a stream rebuild.
  • CoreAudio: Stream error callback now receives ErrorKind::DeviceNotAvailable on iOS when media services are lost.
  • CoreAudio: Stream error callback now receives ErrorKind::DeviceChanged when the system default output device changes, or on iOS when headphones are unplugged.
  • CoreAudio: User timeouts are now respected when building a stream.
  • CoreAudio (iOS): default_output_config() now prefers stereo over the maximum channel count.
  • JACK: Timestamps now use the precise hardware deadline.
  • JACK: Stream error callback now receives ErrorKind::DeviceNotAvailable on server shutdown.
  • JACK: Stream error callback now receives ErrorKind::RealtimeDenied once if the process callback is not running at real-time scheduling priority.
  • JACK: Stream::connect_to_system_outputs() and connect_to_system_inputs() now return Result<(), Error> and roll back the port graph on failure.
  • JACK: User timeouts are now respected when building a stream.
  • JACK: Buffer size changes no longer invoke the error callback; internal buffers are resized transparently.
  • JACK: Default client name now includes the process PID.
  • Linux/BSD: Default host priority: PipeWire > PulseAudio > ALSA.
  • WASAPI: Default output and input streams now automatically reroute when the system default device changes; stream error callback receives ErrorKind::DeviceChanged.
  • WASAPI: Timestamps now include hardware pipeline latency.
  • WASAPI: FriendlyName is now preferred as device name over DeviceDesc.
  • WASAPI: Device::immdevice() now returns Option<Audio::IMMDevice>.
  • WASAPI: Raise windows dependency lower bound to 0.61.
  • WebAudio: Timestamps now include base and output latency.
  • WebAudio: Initial buffer scheduling offset now scales with buffer duration.
  • WebAudio: Sample rates now enumerated as discrete standard rates in the spec-required range of 3-768 kHz.

Removed

  • StreamInstant::add() and sub() replaced by checked_add()/+ and checked_sub()/-.
  • Removed deprecated DeviceTrait::name().
  • ALSA: Default implementation for Device.
  • ALSA: AlsaHost is no longer re-exported from cpal::platform.
  • Emscripten: Removed broken host; use the WebAudio host instead.
  • WASAPI: Removed U24 incorrectly listed as a supported sample format.

Fixed

  • channels: 0, sample_rate: 0, or BufferSize::Fixed(0) now return ErrorKind::InvalidInput consistently across all backends (previously UnsupportedConfig or a panic).
  • Output buffers are now zero-filled before the callback runs across all backends.
  • Poisoned mutex guards now return ErrorKind::StreamInvalidated instead of panicking (AAudio, ASIO, CoreAudio, JACK, WASAPI).
  • Fix callbacks firing before build_*_stream returns the Stream handle (ALSA, ASIO, WASAPI).
  • Fix buffer_capacity_in_frames integer overflow for large fixed buffer sizes (AAudio, ALSA).
  • Fix numeric overflows when constructing StreamInstant (ASIO, CoreAudio, JACK).
  • AAudio: Fix panic in device configuration enumeration for pathological channel counts.
  • AAudio: Fix thread lock when a stream is dropped before it fully starts.
  • AAudio: Fix capture and playback timestamps not accounting for audio pipeline buffer depth, and falling back to zero on error.
  • AAudio: Fix sample_rate values above i32::MAX panicking.
  • AAudio: Fix stream errors not forwarded to error_callback.
  • AAudio: Return ErrorKind::BackendError instead of panicking on sample count overflow in the data callback.
  • ALSA: Fix capture stream hanging or spinning on overruns.
  • ALSA: Fix timestamps stepping backward during startup or after xrun recovery.
  • ALSA: Fix spurious timestamp and timeout errors during stream startup and polling.
  • ALSA: Fix rare panics when dropping the stream is interrupted.
  • ALSA: Fix timestamp overflows on 32-bit platforms.
  • ALSA: Fix silence template not applied for DSD.
  • ALSA: Fix stream corruption on certain drivers with spurious wakeups.
  • ALSA: Fix hang when a device raced to an error state without delivering POLLERR.
  • ALSA: Fix supported_configs() reporting buffer size instead of period size, using the same buffer range for all formats/channels, and dropping sample rates outside COMMON_SAMPLE_RATES.
  • ALSA: Fix BufferSize::Fixed validation opening the PCM device a second time.
  • ALSA: Fix poll timeout overflow panic for stream durations exceeding ~24 days.
  • ALSA: Fix build_*_stream_raw returning UnsupportedConfig instead of UnsupportedOperation for direction-mismatched devices.
  • ASIO: Fix enumeration returning only the first device when using collect().
  • ASIO: Fix device enumeration and stream creation failing from spawned threads.
  • ASIO: Fix buffer size not resizing on kAsioBufferSizeChange.
  • ASIO: Fix latency not updating on kAsioLatenciesChanged.
  • ASIO: Fix distortion when buggy drivers fire the buffer callback multiple times per cycle.
  • ASIO: Fix poisoned callback and buffer-size-change mutexes silently dropping notifications.
  • ASIO: Fix driver.sample_rate() failures at stream creation silently ignored.
  • ASIO: Fix overrun not reported when the driver reports kAsioOverload.
  • ASIO: Fix BufferSize::Fixed with a size not aligned to the driver's step constraint not returning ErrorKind::UnsupportedConfig.
  • AudioWorklet: Fix default_output_device() returning non-None when AudioWorklet is unavailable.
  • AudioWorklet: Fix channel count silently clamped below destination.maxChannelCount.
  • AudioWorklet: Fix supported_output_configs() reporting FrameCount::MAX as the buffer size upper bound (correct: floor(6 * sample_rate) per spec).
  • AudioWorklet: Fix supported_output_configs() reporting 128 as the minimum render quantum when renderQuantumSize is supported (spec minimum is 1).
  • CoreAudio: Fix default output streams silently stopping when the system default device is unplugged; they now reroute or report ErrorKind::DeviceNotAvailable.
  • CoreAudio: Fix undefined behavior and silent failure in loopback device creation.
  • CoreAudio: Fix loopback aggregate device UID collisions between concurrent instances and after crashes.
  • CoreAudio: Fix loopback capture returning silence due to disabled tap auto-start.
  • CoreAudio: Fix crashes on certain drivers due to early initialization.
  • CoreAudio: Fix supported_output/input_configs() collapsing non-continuous hardware rates into a continuous range (regression since v0.17.0).
  • CoreAudio: Fix BufferSize::Fixed producing cryptic backend errors when not validated against the hardware buffer range.
  • CoreAudio (iOS): Fix BufferSize::Fixed not validated against the supported range before stream creation.
  • JACK: Fix input capture timestamp using callback execution time instead of cycle start.
  • JACK: Fix poisoned error callback mutex silently dropping subsequent error notifications.
  • JACK: Fix port registration failure not propagating to stream creation.
  • JACK: Fix activate_async() failure panicking instead of returning an error.
  • JACK: Fix sample rate not validated against the live JACK server at stream creation.
  • JACK: Fix underrun notification blocking the notification thread.
  • JACK: Fix supported_input/output_configs() reporting a hardcoded sparse channel list instead of enumerating all counts up to physical system ports.
  • PipeWire: Fix channels: 0 or sample_rate: 0 silently using PipeWire-negotiated values instead of returning ErrorKind::InvalidInput.
  • PulseAudio: Fix supported_output_configs() and default_output_config() not accounting for PulseAudio's double-buffer.
  • WASAPI: Fix audio worker thread spawn failure panicking instead of returning an error.
  • WASAPI: Fix Communications-class inputs returning non-silence.
  • WASAPI: Fix supported_input_configs() advertising unsupported sample rates on input devices.
  • WASAPI: Fix sample_rate: 0 with BufferSize::Fixed causing a divide-by-zero panic.
  • WASAPI: Fix supported_input/output_configs() and default_input/output_config() reporting an unconstrained buffer range on software audio stacks.
  • WASAPI: Fix I24 not enumerated and 24-bit devices misidentified as I32.
  • WebAudio: Fix overflow with pathological channel counts.
  • WebAudio: Fix duplicated callbacks on repeated play() calls.
  • WebAudio: Fix errors panicking instead of being reported through the callback.
  • WebAudio: Fix default_output_device() returning Some when WebAudio is unavailable.
  • WebAudio: Fix channel count silently clamped when exceeding destination.maxChannelCount.

0.17.3 - 2026-02-18

Changed

  • Reverted SemVer-breaking DeviceBusy error variant addition.

Fixed

  • ASIO: Fix linker errors.

0.17.2 - 2026-02-08 [YANKED]

Added

  • DeviceBusy error variant for retriable device access errors (EBUSY, EAGAIN).
  • ALSA: Debug implementations for Host, Device, Stream, and internal types.
  • ALSA: Example demonstrating ALSA error suppression during enumeration.
  • ALSA: Support for native DSD playback.
  • WASAPI: Enable as-necessary resampling in the WASAPI server process.

Changed

  • Bump overall MSRV to 1.78.
  • ALSA: Update alsa dependency to 0.11.
  • ALSA: Bump MSRV to 1.82.
  • CoreAudio: Update core-audio-rs dependency to 0.14.

Fixed

  • ALSA: Enumerating input and output devices no longer interferes with each other.
  • ALSA: Device handles are no longer exclusively held between operations.
  • ALSA: Reduce Valgrind memory leak reports from ALSA global configuration cache.
  • ALSA: Fix possible race condition on drop.
  • ALSA: Fix audio callback stalling when start threshold is not met.

0.17.1 - 2026-01-04

Added

  • ALSA: Default implementation for Device (returns the ALSA "default" device).
  • CI: Checks default/no-default/all feature sets with platform-dependent MSRV for JACK.

Changed

  • ALSA: Devices now report direction from hint metadata and physical hardware probing.

Fixed

  • ALSA: Device enumeration now includes both hints and physical cards.
  • JACK: No longer builds on iOS.
  • WASM: WasmBindgen no longer crashes (regression from 0.17.0).

0.17.0 - 2025-12-20

Added

  • DeviceTrait::id method that returns a stable audio device ID.
  • HostTrait::device_by_id to select a device by its stable ID.
  • Display and FromStr implementations for HostId.
  • Support for custom Hosts, Devices, and Streams.
  • Sample::bits_per_sample method.
  • Copy implementation to InputCallbackInfo and OutputCallbackInfo.
  • StreamError::StreamInvalidated variant for when stream must be rebuilt.
  • StreamError::BufferUnderrun variant for buffer underrun/overrun notifications.
  • Hash implementation to Device for all backends.
  • AAudio: Send and Sync implementations to Stream.
  • AAudio: Support for 12 and 24 kHz sample rates.
  • ALSA: I24 and U24 sample format support (24-bit samples stored in 4 bytes).
  • ALSA: Support for 12, 24, 352.8, 384, 705.6, and 768 kHz sample rates.
  • ALSA: Eq and PartialEq implementations to Device.
  • CI: Native ARM64 Linux support in GitHub Actions.
  • CoreAudio: i8, i32 and I24 sample format support (24-bit samples stored in 4 bytes).
  • CoreAudio: Support for loopback recording (recording system audio output) on macOS > 14.6.
  • CoreAudio: Send implementation to Stream.
  • Emscripten: BufferSize::Fixed validation against supported range.
  • iOS: Complete AVAudioSession integration for device enumeration and buffer size control.
  • JACK: Support for macOS and Windows platforms.
  • JACK: BufferSize::Fixed validation to reject requests that don't match server buffer size.
  • WASAPI: Expose IMMDevice from WASAPI host Device.
  • WASAPI: I24 and U24 sample format support (24-bit samples stored in 4 bytes).
  • WASAPI: Send and Sync implementations to Stream.
  • WebAudio: Send and Sync implementations to Stream.
  • WebAudio: BufferSize::Fixed validation against supported range.

Changed

  • MSRV depends on the platform and at minimum 1.77.
  • Set examples to Rust 2021.
  • SampleRate from struct to u32 type alias.
  • Update audio_thread_priority to 0.34.
  • Migrate CHANGELOG to Keep a Changelog format.
  • AAudio: Configure buffer to ensure consistent callback buffer sizes.
  • AAudio: Buffer size range detection to query the AudioService property correctly.
  • ALSA: Improve BufferSize::Fixed precision and audio callback performance.
  • ALSA: BufferSize::Default to use the device defaults.
  • ALSA: Card enumeration to work like aplay -L does.
  • ALSA: Update alsa to 0.10.
  • ALSA: Pass silent=true to PCM.try_recover, so it doesn't write to stderr.
  • ALSA: Report buffer underruns/overruns via StreamError::BufferUnderrun.
  • ASIO: Share sys::Asio instance across all Host instances.
  • CI: Fix cargo publish to trigger on GitHub releases instead of every master commit.
  • CI: Replace cargo install commands with cached tool installation for faster builds.
  • CI: Update actions to latest versions (checkout@v5, rust-cache@v2).
  • CI: Verify compatibility with windows crates since v0.59.
  • CI: Test platforms on appropriate MSRV per backend.
  • CI: Fix cargo update syntax for compatibility with Cargo 1.70 (use -p flag instead of positional argument).
  • CoreAudio: Device::supported_configs to return a single element containing the available sample rate range when all elements have the same mMinimum and mMaximum values.
  • CoreAudio: Default audio device detection to be lazy when building a stream, instead of during device enumeration.
  • CoreAudio: Configure device buffer to ensure predictable callback buffer sizes.
  • CoreAudio: Remove Clone implementation from Stream.
  • JACK: Use StreamError::StreamInvalidated for JACK server sample rate changes.
  • JACK: Report buffer underruns/overruns via StreamError::BufferUnderrun.
  • WASAPI: Update windows to >= 0.59, <= 0.62.

Fixed

  • ALSA: Format selection to probe hardware endianness instead of assuming native byte order.
  • ALSA: Data race in stream shutdown.
  • ASIO: Handling for kAsioResetRequest message to prevent driver UI becoming unresponsive.
  • ASIO: Buffer silencing logic to work with non-conformant drivers (e.g., FL Studio ASIO).
  • CoreAudio: Timestamp accuracy.
  • CoreAudio: Segfaults when enumerating devices.
  • CoreAudio: Undefined behavior related to null pointers and aligned reads.
  • CoreAudio: Unnecessary microphone permission requests when using output devices only.
  • iOS: Example by properly activating audio session.

Removed

  • WebAudio: Optional wee-alloc feature for security reasons.

0.16.0 - 2025-06-07

Added

  • Optional supports_input/output methods to DeviceTrait.
  • 384000Hz to COMMON_SAMPLE_RATES.
  • Constructors for InputCallbackInfo, OutputCallbackInfo and StreamInstant.
  • Default impl for Host.
  • PartialOrd, Ord and Hash implementations for SampleFormat.
  • Clone, PartialEq, Eq and Hash implementations for all error enums.
  • ASIO: Support for int24.

Changed

  • AAudio: Migrate from oboe to ndk::audio. NOTE: This raises the minimum Android API version to 26 (Android 8/Oreo).
  • AAudio: Improve device names.
  • ALSA: Set realtime priority for stream threads.
  • ALSA: Improved card enumeration.
  • CoreAudio: Update coreaudio-rs dependency to 0.13.
  • JACK: Update jack dependency to 0.13.
  • WASAPI: Set realtime priority for stream threads.

Fixed

  • ALSA: Don't panic when handling invalid stream timestamps.
  • ALSA: Fix infinite loop on broken pipes.
  • ASIO: Fix build failure on Windows.
  • CoreAudio: Fix callback being called after dropping the stream.
  • CoreAudio: Fix non-default audio output.
  • CoreAudio: Fix handling of integer input formats.
  • WASAPI: Fixed memory leak.
  • WASAPI: Remove usage of eval.

0.15.3 - 2024-03-04

Added

  • try_with_sample_rate, a non-panicking variant of with_sample_rate.
  • #[must_use] attribute to struct platform::Stream.
  • Copy implementation to enum SupportedBufferSize and struct SupportedStreamConfigRange.
  • Clone implementation to platform::Device.

Changed

  • AAudio: Update jni dependency to 0.21.
  • AAudio: Update oboe dependency to 0.6.
  • AAudio: Update ndk dependency to 0.8 and disable default-features.
  • ALSA: Update alsa dependency to 0.9.
  • CI: Update actions, use Android 30 API level in CI, remove asmjs-unknown-emscripten target.
  • Examples: Migrate wasm example to trunk, improve syth-thones example.
  • WASAPI: Update windows dependency to v0.54.
  • WebAudio: Update wasm-bindgen to 0.2.89.

Fixed

  • WebAudio: Crash on web/wasm when atomics flag is enabled.

Removed

  • parking_lot dependency in favor of the std library.

0.15.2 - 2023-03-30

Added

  • WebAudio: Support for multichannel output streams.

Changed

  • WASAPI: Update windows dependency.

Fixed

  • WASAPI: Fix some thread panics.

0.15.1 - 2023-03-14

Added

  • AAudio: Feature oboe-shared-stdcxx to enable shared-stdcxx on oboe for Android support.

Changed

  • CoreAudio: Switch mach dependency to mach2.

Removed

  • thiserror dependency.

0.15.0 - 2023-01-29

Added

  • CoreAudio: Disconnection detection on Mac OS.

Changed

  • Switch to the dasp_sample crate for the sample trait.
  • Adopt edition 2021.
  • AAudio: Update oboe dependency.
  • AAudio: Update alsa dependency.
  • CoreAudio: Update coreaudio-sys dependency.
  • Emscripten: Switch to web-sys on the emscripten target.
  • JACK: Update jack dependency.
  • WASAPI: Update windows-rs dependency.

0.14.2 - 2022-12-02

Removed

  • nix dependency.

0.14.1 - 2022-10-23

Added

  • ALSA: Support for the 0.6.1 release of alsa-rs.
  • NetBSD: Platform support.

Changed

  • CI: Various improvements.

Fixed

  • ASIO: Feature broken in 0.14.0.

0.14.0 - 2022-08-22

Changed

  • Update parking_lot and once_cell dependencies.
  • AAudio: Turn ndk-glue into a dev-dependency and use ndk-context instead.
  • AAudio: Update ndk and ndk-glue dependencies.
  • JACK: Update jack dependency.
  • WASAPI: Switch to windows-rs crate.

0.13.5 - 2022-01-28

Changed

  • Faster sample format conversion.
  • AAudio: Update ndk, oboe, and ndk-glue dependencies.
  • ALSA: Update alsa and nix dependencies.
  • JACK: Update jack dependency.

0.13.4 - 2021-08-08

Changed

  • AAudio: Update jni dependency.
  • ALSA: Improve stream setup parameters.
  • CoreAudio: Update core-foundation-sys dependency.
  • JACK: Update rust-jack dependency.
  • WASAPI: Allow both threading models and switch the default to STA.

0.13.3 - 2021-03-29

Added

  • Give each thread a unique name.

Fixed

  • ALSA: Fix distortion regression on some configs.

0.13.2 - 2021-03-16

Changed

  • AAudio: Update ndk, nix, oboe, and jni dependencies.

0.13.1 - 2020-11-08

Changed

  • Update parking_lot dependency.

Fixed

  • WASAPI: Don't panic when device is plugged out on Windows.

0.13.0 - 2020-10-28

Added

  • AAudio: Android support via oboe-rs.
  • CI: Android APK build and CI job.

0.12.1 - 2020-07-23

Fixed

  • ASIO: Bugfix release to get the asio feature working again.

0.12.0 - 2020-07-09

Added

  • build_input/output_stream_raw methods allowing for dynamically handling sample format type.
  • InputCallbackInfo and OutputCallbackInfo types and update expected user data callback function signature to provide these.
  • DragonFly BSD: Platform support.

Changed

  • 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.
  • WASAPI: Address deprecated use of mem::uninitialized.

Removed

  • UnknownTypeBuffer in favour of specifying sample type.

0.11.0 - 2019-12-11

Added

  • Name to HostId.
  • WASAPI: winbase winapi feature to solve windows compile error issues.

Changed

  • Remove many uses of std::mem::uninitialized.
  • Panic on stream ID overflow rather than returning an error.
  • Move errors into a separate module.
  • Switch from failure to thiserror for error handling.
  • ALSA: Use snd_pcm_hw_params_set_buffer_time_near rather than set_buffer_time_max.
  • CI: Lots of improvements.
  • Examples: Use ringbuffer crate in feedback example.

Fixed

  • ALSA: Fix some underruns that could occur.
  • WASAPI: Fix capture logic.

0.10.0 - 2019-07-05

Added

  • New Host API, adding support for alternative audio APIs.
  • StreamEvent type to allow users to handle stream callback errors.
  • ASIO: ASIO host, available under Windows.

Changed

  • Remove sleep loop on macOS in favour of using a Condvar.
  • Overhaul error handling throughout the crate.
  • Remove panic! from OutputBuffer Deref impl as it is no longer necessary.
  • ALSA: Remove unnecessary Mutex in favour of channels.
  • CoreAudio: Update core-foundation-sys and coreaudio-rs dependencies.
  • WASAPI: Remove unnecessary Mutex in favour of channels.

0.9.0 - 2019-06-06

Added

  • ALSA: Error handling for unknown device errors.
  • Emscripten: default_output_format implementation.

Changed

  • Better buffer handling.

Fixed

  • Logic error in frame/sample size.
  • WASAPI: Fix resuming a paused stream.

0.8.2 - 2018-07-03

Added

  • Display and Error implementations for DefaultFormatError.

Changed

  • Upgrade lazy_static dependency.

0.8.1 - 2018-04-01

Fixed

  • CoreAudio: Handling of non-default sample rates for input streams.

0.8.0 - 2018-02-15

Added

  • Device::supported_{input/output}_formats methods.
  • Device::default_{input/output}_format methods.
  • default_{input/output}_device functions.
  • StreamData type for handling either input or output streams in EventLoop::run callback.
  • ALSA: Input stream support.
  • CoreAudio: Input stream support.
  • Examples: record_wav.rs example that records 3 seconds to $CARGO_MANIFEST_DIR/recorded.wav using default input device.
  • WASAPI: Input stream support.

Changed

  • Replace usage of Voice with Stream throughout the crate.
  • Examples: Update enumerate.rs example to display default input/output devices and formats.

Removed

  • Endpoint in favour of Device for supporting both input and output streams.

0.7.0 - 2018-02-04

Added

  • CoreAudio: Endpoint and Format enumeration for macOS.
  • CoreAudio: Format handling for build_voice method.

Changed

  • 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).

Removed

  • Unused ChannelPosition API.

0.6.0 - 2017-12-11

Added

  • Improvements to the crate documentation.
  • ALSA: pause and play support.

Changed

  • CoreAudio: Reduced the number of allocations.
  • Emscripten: Backend to consume less CPU.

Fixed

  • CoreAudio: Fixes for macOS build (#186, #189).

0.5.1 - 2017-10-21

Added

  • Sample::to_i16(), Sample::to_u16() and Sample::from methods.

0.5.0 - 2017-10-21

Added

  • EventLoop::build_voice, EventLoop::destroy_voice, EventLoop::play, and EventLoop::pause methods.
  • 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.
  • 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.

Removed

  • Dependency on the futures library.
  • Voice and SamplesStream types.

0.4.6 - 2017-10-11

Added

  • iOS: Minimal support.

Changed

  • Run rustfmt on the code.

Fixed

  • BSD: Fixes for *BSDs.

Removed

  • get_ prefix of methods.

0.4.5 - 2017-04-29

Changed

  • Simplify the Cargo.toml.
  • ALSA: Bump alsa-sys version number.
  • ALSA: Mark alsa-sys as linking to alsa.

Fixed

  • CoreAudio: SampleStream also holds on to the AudioUnit so it is not dropped.
  • CoreAudio: Fix for loop in EventLoop::run being optimised out in a release build on macOS.

Removed

  • Stop publishing on gh-pages.

0.4.4 - 2017-02-04

Fixed

  • ALSA: Pass period instead of buffer to snd_pcm_sw_params_set_avail_min.

0.4.3 - 2017-02-01

Fixed

  • ALSA: Set sw_params_set_avail_min based on get_params buffer size.

0.4.2 - 2017-01-19

Added

  • CoreAudio: coreaudio-rs dependency for i686-apple-darwin.

Deprecated

  • Mark deprecated functions as deprecated.

0.4.1 - 2016-11-16

Added

  • ALSA: Implement play and pause.
  • CoreAudio: Implement play/pause.

Fixed

  • WASAPI: Fix compilation on windows.

0.4.0 - 2016-10-01

Changed

  • ALSA: Update to futures 0.1.1.
  • WASAPI: Update to futures 0.1.1.

Fixed

  • CoreAudio: Do not lock inner twice. Fixes bug in osx futures 0.1.1 update.
  • CoreAudio: Try fix the OSX code with futures.

0.3.1 - 2016-08-20

Added

  • WASAPI: Some documentation to the winapi implementation.

Changed

  • ALSA: Bump alsa-sys to 0.1.

Fixed

  • Fix #126.
  • Fix most warnings.

0.3.0 - 2016-08-12

Added

  • CoreAudio: Update backend to new futures-rs oriented design.

Changed

  • Update documentation.
  • Use a max buffer size in order to avoid problems.
  • Update deps.
  • ALSA: Make it work on Linux.
  • Null: Update the null implementation.

0.2.12 - 2016-07-10

Added

  • CoreAudio: Add get_period to Voice.

Changed

  • CoreAudio: Update to coreaudio-rs 0.5.0.

Fixed

  • CoreAudio: Correct implementation of get_pending_samples.
  • CoreAudio: Return correct Voice period.

0.2.11 - 2016-04-25

Fixed

  • Be more relaxed with c_void.

0.2.10 - 2016-04-22

Added

  • ALSA: Add pollfd.

Fixed

  • ALSA: Fix underflow detection.
  • Android: Fix the android build.
  • Android: Add ARM target.

0.2.9 - 2016-01-28

Added

  • CoreAudio: Add support for U16/I16 PCM formats.
  • CoreAudio: Implement some missing functions.

Changed

  • Handle channels positionning.
  • Update Cargo.toml after the previous changes.
  • Allow for building for mipsel targets.
  • ALSA: Use correct ALSA channels.
  • CoreAudio: Implementation cleanup.
  • CoreAudio: Make Voice Send/Sync.
  • CoreAudio: Set sample rate to 44100.
  • Examples: Update the beep example.

Fixed

  • ALSA: Fix underflow bug on linux.
  • CI: Fix for travis build.
  • CoreAudio: Fix compilation on OSX with the new API for coreaudio-rs.
  • CoreAudio: Return correct length of buffer, stub unimpl funcs.
  • CoreAudio: Restore CoreAudio support after API overhaul.
  • Examples: Add some sane error messages.
  • Examples: Improve error reporting in beep example.

Removed

  • Do not use a wildcard version number.
  • CoreAudio: Revert "Add support for U16/I16 PCM formats" (was causing issues).

0.2.8 - 2015-11-10

Changed

  • Libc 0.2.
  • WASAPI: Update winapi.

Fixed

  • WASAPI: Catch another 'device not found' error code.

0.2.7 - 2015-09-27

Added

  • Voice::get_period() method.

0.2.6 - 2015-09-22

Fixed

  • ALSA: Make sure that all writes succeed.
  • ALSA: Make the implementation more robust by recovering from underruns.

0.2.5 - 2015-09-22

Added

  • Voice::get_pending_samples method.

0.2.4 - 2015-09-22

Added

  • endpoint::get_name() method.
  • Examples: An enumerate example.
  • WASAPI: Device name support.

Changed

  • ALSA: Correctly enumerate supported formats.

Fixed

  • ALSA: Various fixes.
  • ALSA: Use the correct format.
  • ALSA: Use the correct device name when enumerating formats.
  • WASAPI: Fix bug and filter out devices that are not "Output".

0.2.3 - 2015-09-22

Added

  • #[inline] attributes.
  • underflow() method to Voice.

Changed

  • Store the format in the public Voice struct.
  • WASAPI: General cleanup.
  • WASAPI: Update winapi dependency.

Fixed

  • WASAPI: Fix the hack in the implementation.

Removed

  • Unused extern crate libc.

0.2.2 - 2015-09-11

Added

  • UnknownBufferType::len() method.

Fixed

  • Null: Restore the null implementation and compile it every time.

0.2.1 - 2015-09-10

Changed

  • Handle channels positionning.
  • Update Cargo.toml after the previous changes.
  • Examples: Update the beep example.

Fixed

  • ALSA: Fix compilation.

0.2.0 - 2015-09-01

Added

  • Proper error handling.
  • Supported formats enumeration.
  • endpoint::get_name() method.

Changed

  • ALSA: Make it compile again.
  • WASAPI: Enable 32bits samples.
  • WASAPI: Better error handling in format detection.
  • WASAPI: Now decoding the format from the WAVEFORMAT returned by the winapi.
  • WASAPI: Handle F32 formats in Voice::new.
  • WASAPI: Use the format passed as parameter in Voice::new.
  • WASAPI: Correctly enumerate audio devices (core + wasapi).

Fixed

  • Fix doctests.
  • Add more detailed message to panic.

Removed

  • Conversion system.
  • Use of box syntax.

0.1.2 - 2015-07-22

Fixed

  • ALSA: Correct reported sample format.
  • WASAPI: Fix samples signs on win32.

0.1.1 - 2015-07-20

Fixed

  • Fix the version in the README.
  • WASAPI: Fix the win32 build.

0.1.0 - 2015-07-11

Added

  • Bump to 0.1.0.

0.0.23 - 2015-07-04

Fixed

  • WASAPI: Fix platform-specific dependencies with MSVC.

0.0.22 - 2015-06-24

Fixed

  • ALSA: Calls to a single ALSA channel are not thread safe.

0.0.21 - 2015-06-05

Changed

  • Examples: Simplify beep example.
  • WASAPI: Use shiny new COM.

0.0.20 - 2015-04-20

Changed

  • Rustup and version bumps.
  • ALSA: Remove integer suffixes in alsa-sys.

0.0.19 - 2015-04-04

Changed

  • Update for Rustc 1.0.0 beta.

0.0.18 - 2015-03-30

Changed

  • Update for change in rustc and winapi.

0.0.17 - 2015-03-26

Changed

  • Rustup.
  • ALSA: Publish alsa-sys before cpal.

0.0.16 - 2015-03-25

Added

  • CoreAudio: OSX support via the Apple Core Audio, Audio Unit C API. Only supports f32 so far.
  • CoreAudio: Coreaudio bindings.

Changed

  • Rustup.

Fixed

  • CI: Fix travis build.
  • CoreAudio: Fixed callback to send proper buffersize, removed code in lib where sampleformat affected buffersize.
  • CoreAudio: Properly shutdown the AudioUnit on drop.

Removed

  • CoreAudio: Removed core_audio-sys local bindings in favour of new coreaudio-rs crate.

0.0.15 - 2015-02-22

Changed

  • Bump version.
  • Update for rustc.

0.0.14 - 2015-02-19

Changed

  • Update for rustc.
  • ALSA: Bump alsa-sys version.
  • ALSA: Clean up alsa-sys.
  • CI: Automatically publish on crates.io on successful builds.
  • CI: Publish alsa-sys too.

0.0.13 - 2015-02-12

Changed

  • Update with libc version.

0.0.12 - 2015-01-29

Changed

  • Bump version number.

0.0.11 - 2015-01-29

Changed

  • Update for rustc.

0.0.10 - 2015-01-20

Added

  • Null: "null" implementation for platforms that aren't supported.

Changed

  • Changed integer suffix from 'u' to 'us'.
  • Bump version number (multiple times).
  • Update for rust-1.0 alpha.
  • WASAPI: Update for winapi.

0.0.8 - 2015-01-08

Changed

  • Bump version number.
  • Update for Rustc.

0.0.7 - 2015-01-05

Changed

  • Update for rustc.

0.0.6 - 2014-12-30

Added

  • #[must_use] marker for Buffer.

Changed

  • Bump version number.
  • Update for changes in rustc.

0.0.5 - 2014-12-23

Added

  • play() and pause() functions.
  • Implement f32 to i16 and f32 to u16 conversions.
  • Tests for convert_samples_rate.
  • Tests for convert_channels.

Changed

  • Cleanup convert_samples_rate.
  • Cleanup convert_channels.

Fixed

  • CI: Fix the appveyor build.

0.0.4 - 2014-12-20

Changed

  • Update for rustc.

0.0.3 - 2014-12-17

Added

  • Link to documentation.
  • Some documentation.
  • Fixes and tests for samples conversions.
  • All samples formats.
  • Samples formats conversions.
  • CI: Automatic gh-pages deployment in travis.

Changed

  • Bump version number.
  • Improve documentation.
  • Use Cow for formats conversions to avoid an allocation and copy.

Fixed

  • Minor README update.
  • CI: Remove old section from travis.yml.
  • CI: Fix travis.yml.

Removed

  • Rename Channel to Voice.

0.0.2 - 2014-12-17

Added

  • Basic API.
  • Some documentation.
  • Keywords.
  • Some formats-related functions.
  • Some basic data conversion.
  • Some samples rate conversions.
  • Variable input format system.
  • Samples iterator.
  • ALSA: Basic implementation.
  • ALSA: alsa-sys library.
  • CI: Appveyor file.
  • CI: Config for rust-ci in travis.
  • Examples: Draft for example music playing.
  • Examples: Semi-working WASAPI example.
  • WASAPI: Destructor for wasapi::Channel.

Changed

  • Bump version number.
  • Buffer now always has the u8 format.
  • Modify API to use a "samples" iterator.
  • Change player architecture to avoid data losses.
  • Minor nitpicking.
  • Update for rustc.
  • ALSA: Use the official winapi crate.
  • ALSA: More tweaks for alsa-sys.
  • ALSA: Minor tweaks in Cargo.toml files.
  • Examples: Replace example by a smaller one.
  • Examples: Replace example by a sinusoid generator.
  • Examples: Rename example to "beep".

Fixed

  • Fix warnings.
  • Fix PCM formats conversions not working.
  • Fix issue when calling buffer.samples() multiple times with the same buffer.
  • Sound output now works correctly.
  • Minor fixes.
  • WASAPI: Revert "Switch to retep998/winapi".

Removed

  • Switch back to using buffers.
  • Remove old code.

0.0.1 - 2014-12-11

Added

  • Initial commit.