# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] # Version 0.20.1 (2024-11-08) ### Fixed - Builds without the `symphonia` feature did not compile # Version 0.20.0 (2024-11-08) ### Added - Support for *ALAC/AIFF* - Add `automatic_gain_control` source for dynamic audio level adjustment. - New test signal generator sources: - `SignalGenerator` source generates a sine, triangle, square wave or sawtooth of a given frequency and sample rate. - `Chirp` source generates a sine wave with a linearly-increasing frequency over a given frequency range and duration. - `white` and `pink` generate white or pink noise, respectively. These sources depend on the `rand` crate and are guarded with the "noise" feature. - Documentation for the "noise" feature has been added to `lib.rs`. - New Fade and Crossfade sources: - `fade_out` fades an input out using a linear gain fade. - `linear_gain_ramp` applies a linear gain change to a sound over a given duration. `fade_out` is implemented as a `linear_gain_ramp` and `fade_in` has been refactored to use the `linear_gain_ramp` implementation. ### Fixed - `Sink.try_seek` now updates `controls.position` before returning. Calls to `Sink.get_pos` done immediately after a seek will now return the correct value. ### Changed - `SamplesBuffer` is now `Clone` # Version 0.19.0 (2024-06-29) ### Added - Adds a new source `track_position`. It keeps track of duration since the beginning of the underlying source. ### Fixed - Mp4a with decodable tracks after undecodable tracks now play. This matches VLC's behaviour. # Version 0.18.1 (2024-05-23) ### Fixed - Seek no longer hangs if the sink is empty. # Version 0.18.0 (2024-05-05) ### Changed - `Source` trait is now also implemented for `Box` and `&mut Source` - `fn new_vorbis` is now also available when the `symphonia-vorbis` feature is enabled ### Added - Adds a new method `try_seek` to all sources. It returns either an error or seeks to the given position. A few sources are "unsupported" they return the error `Unsupported`. - Adds `SpatialSink::clear()` bringing it in line with `Sink` ### Fixed - channel upscaling now follows the 'WAVEFORMATEXTENSIBLE' format and no longer repeats the last source channel on all extra output channels. Stereo content playing on a 5.1 speaker set will now only use the front left and front right speaker instead of repeating the right sample on all speakers except the front left one. - `mp3::is_mp3()` no longer changes the position in the stream when the stream is mp3 # Version 0.17.3 (2023-10-23) - Build fix for `minimp3` backend. # Version 0.17.2 (2023-10-17) - Add `EmptyCallback` source. - Fix index out of bounds bug. - Use non-vulnerable `minimp3` fork. - Add filter functions with additional q parameter. # Version 0.17.1 (2023-02-25) - Disable `symphonia`'s default features. # Version 0.17.0 (2023-02-17) - Update `cpal` to [0.15](https://github.com/RustAudio/cpal/blob/master/CHANGELOG.md#version-0150-2022-01-29). - Default to `symphonia` for mp3 decoding. # Version 0.16.0 (2022-09-14) - Update `cpal` to [0.14](https://github.com/RustAudio/cpal/blob/master/CHANGELOG.md#version-0140-2022-08-22). - Update `symphonia` to [0.5](https://github.com/pdeljanov/Symphonia/releases/tag/v0.5.1). # Version 0.15.0 (2022-01-23) - Remove requirement that the argument `Decoder::new` and `LoopedDecoder::new` implement `Send`. - Add optional symphonia backend. - `WavDecoder`'s `total_duration` now returns the total duration of the sound rather than the remaining duration. - Add 32-bit signed in WAV decoding. - `SineWave::new()` now takes a `f32` instead of a `u32`. - Add `len()` method to `SpatialSink`. # Version 0.14.0 (2021-05-21) - Re-export `cpal` in full. - Replace panics when calling `OutputStream::try_default`, `OutputStream::try_from_device` with new `StreamError` variants. - `OutputStream::try_default` will now fallback to non-default output devices if an `OutputStream` cannot be created from the default device. # Version 0.13.1 (2021-03-28) - Fix panic when no `pulseaudio-alsa` was installed. # Version 0.13.0 (2020-11-03) - Update `cpal` to [0.13](https://github.com/RustAudio/cpal/blob/master/CHANGELOG.md#version-0130-2020-10-28). - Add Android support. # Version 0.12.0 (2020-10-05) - Breaking: Update `cpal` to [0.12](https://github.com/RustAudio/cpal/blob/master/CHANGELOG.md#version-0120-2020-07-09). - Breaking: Rework API removing global "rodio audio processing" thread & adapting to the upstream cpal API changes. - Add new_X format specific methods to Decoder. - Fix resampler dependency on internal `Vec::capacity` behaviour. # Version 0.11.0 (2020-03-16) - Update `lewton` to [0.10](https://github.com/RustAudio/lewton/blob/master/CHANGELOG.md#release-0100---january-30-2020). - Breaking: Update `cpal` to [0.11](https://github.com/RustAudio/cpal/blob/master/CHANGELOG.md#version-0110-2019-12-11) # Version 0.10.0 (2019-11-16) - Removal of nalgebra in favour of own code. - Fix a bug that switched channels when resuming after having paused. - Attempt all supported output formats if the default format fails in `Sink::new`. - Breaking: Update `cpal` to [0.10](https://github.com/RustAudio/cpal/blob/master/CHANGELOG.md#version-0100-2019-07-05). # Version 0.9.0 (2019-06-08) - Remove exclusive `&mut` borrow requirements in `Sink` & `SpatialSink` setters. - Use `nalgebra` instead of `cgmath` for `Spatial` source. # Version 0.8.1 (2018-09-18) - Update `lewton` dependency to [0.9](https://github.com/RustAudio/lewton/blob/master/CHANGELOG.md#release-090---august-16-2018) - Change license from `Apache-2.0` only to `Apache-2.0 OR MIT` # Version 0.8.0 (2018-06-22) - Add mp3 decoding capabilities via `minimp3` # Version 0.7.0 (2018-04-19) - Update `cpal` dependency to 0.8, and adopt the new naming convention - BREAKING CHANGES: - renamed `Endpoint` to `Device` - split `default_endpoint()` into `default_output_device()` and `default_input_device()` - renamed `endpoints()` to `devices()` - introduced `output_devices()` and `input_devices()`