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.
- Output audio stream buffer size can now be adjusted.
- Sources for directly generating square waves, traingle waves, square waves and sawtooths have been added.
- An interface for defining
SignalGenerator
patterns with anfn
, seeGeneratorFunction
.
- Breaking:
OutputStreamBuilder
should now be used to initialize audio output stream. - Breaking:
OutputStreamHandle
removed, useOutputStream
andOutputStream::mixer()
instead. - Breaking:
DynamicMixerController
renamed toMixer
,DynamicMixer
renamed toMixerSource
. - Breaking:
Sink::try_new
renamed toconnect_new
and does not return error anymore.Sink::new_idle
was renamed tonew
.
- Symphonia decoder
total_duration
incorrect value caused by conversion fromTime
toDuration
. - An issue with
SignalGenerator
that caused it to create increasingly distorted waveforms over long run times has been corrected.
- Builds without the
symphonia
feature did not compile
- 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
andpink
generate white or pink noise, respectively. These sources depend on therand
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 alinear_gain_ramp
andfade_in
has been refactored to use thelinear_gain_ramp
implementation.
Sink.try_seek
now updatescontrols.position
before returning. Calls toSink.get_pos
done immediately after a seek will now return the correct value.
SamplesBuffer
is nowClone
- Adds a new source
track_position
. It keeps track of duration since the beginning of the underlying source.
- Mp4a with decodable tracks after undecodable tracks now play. This matches VLC's behaviour.
- Seek no longer hangs if the sink is empty.
Source
trait is now also implemented forBox<dyn Source>
and&mut Source
fn new_vorbis
is now also available when thesymphonia-vorbis
feature is enabled
- 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 errorUnsupported
. - Adds
SpatialSink::clear()
bringing it in line withSink
- 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
- Build fix for
minimp3
backend.
- Add
EmptyCallback
source. - Fix index out of bounds bug.
- Use non-vulnerable
minimp3
fork. - Add filter functions with additional q parameter.
- Disable
symphonia
's default features.
- Update
cpal
to 0.15. - Default to
symphonia
for mp3 decoding.
- Remove requirement that the argument
Decoder::new
andLoopedDecoder::new
implementSend
. - Add optional symphonia backend.
WavDecoder
'stotal_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 af32
instead of au32
.- Add
len()
method toSpatialSink
.
- Re-export
cpal
in full. - Replace panics when calling
OutputStream::try_default
,OutputStream::try_from_device
with newStreamError
variants. OutputStream::try_default
will now fallback to non-default output devices if anOutputStream
cannot be created from the default device.
- Fix panic when no
pulseaudio-alsa
was installed.
- Update
cpal
to 0.13. - Add Android support.
- Breaking: Update
cpal
to 0.12. - 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.
- 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.
- Remove exclusive
&mut
borrow requirements inSink
&SpatialSink
setters. - Use
nalgebra
instead ofcgmath
forSpatial
source.
- Update
lewton
dependency to 0.9 - Change license from
Apache-2.0
only toApache-2.0 OR MIT
- Add mp3 decoding capabilities via
minimp3
- Update
cpal
dependency to 0.8, and adopt the new naming convention - BREAKING CHANGES:
- renamed
Endpoint
toDevice
- split
default_endpoint()
intodefault_output_device()
anddefault_input_device()
- renamed
endpoints()
todevices()
- introduced
output_devices()
andinput_devices()
- renamed