All notable changes to this project will be documented in this file.
Migration guides for incompatible versions can be found in UPGRADE.md file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Adds a function to write a
Sourceto awavfile, seeoutput_to_wav. - Output audio stream buffer size can now be adjusted.
- A
ChannelRouterSourcethat can mix, re-order and extract channels from a multi-channel source.- Several
Sourcetrait helper functions includingextract_channel,extract_channels,mono,mono_to_stereo, anddownmix_51. - A
ChannelRouterControllertype to modify theChannelRouterSourceacross thread boundaries.
- Several
- Sources for directly generating square waves, triangle waves, square waves, and sawtooths have been added.
- An interface for defining
SignalGeneratorpatterns with anfn, seeGeneratorFunction. - Minimal builds without
cpalaudio output are now supported. SeeREADME.mdfor instructions. (#349)
- Breaking:
OutputStreamBuildershould now be used to initialize an audio output stream. - Breaking:
OutputStreamHandleremoved, useOutputStreamandOutputStream::mixer()instead. - Breaking:
DynamicMixerControllerrenamed toMixer,DynamicMixerrenamed toMixerSource. - Breaking:
Sink::try_newrenamed toconnect_newand does not return error anymore.Sink::new_idlewas renamed tonew. - Breaking: In the
Sourcetrait, the methodcurrent_frame_len()was renamed tocurrent_span_len(). - The term 'frame' was renamed to 'span' in the crate and documentation.
- Symphonia decoder
total_durationincorrect value caused by conversion fromTimetoDuration. - An issue with
SignalGeneratorthat caused it to create increasingly distorted waveforms over long run times has been corrected. (#201)
- Builds without the
symphoniafeature did not compile
- Support for ALAC/AIFF
- Add
automatic_gain_controlsource for dynamic audio level adjustment. - New test signal generator sources:
SignalGeneratorsource generates a sine, triangle, square wave or sawtooth of a given frequency and sample rate.Chirpsource generates a sine wave with a linearly-increasing frequency over a given frequency range and duration.whiteandpinkgenerate white or pink noise, respectively. These sources depend on therandcrate and are guarded with the "noise" feature.- Documentation for the "noise" feature has been added to
lib.rs.
- New Fade and Crossfade sources:
fade_outfades an input out using a linear gain fade.linear_gain_rampapplies a linear gain change to a sound over a given duration.fade_outis implemented as alinear_gain_rampandfade_inhas been refactored to use thelinear_gain_rampimplementation.
Sink.try_seeknow updatescontrols.positionbefore returning. Calls toSink.get_posdone immediately after a seek will now return the correct value.
SamplesBufferis 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.
Sourcetrait is now also implemented forBox<dyn Source>and&mut Sourcefn new_vorbisis now also available when thesymphonia-vorbisfeature is enabled
- Adds a new method
try_seekto 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
minimp3backend.
- Add
EmptyCallbacksource. - Fix index out of bounds bug.
- Use non-vulnerable
minimp3fork. - Add filter functions with additional q parameter.
- Disable
symphonia's default features.
- Update
cpalto 0.15. - Default to
symphoniafor mp3 decoding.
- Remove requirement that the argument
Decoder::newandLoopedDecoder::newimplementSend. - Add optional symphonia backend.
WavDecoder'stotal_durationnow returns the total duration of the sound rather than the remaining duration.- Add 32-bit signed in WAV decoding.
SineWave::new()now takes af32instead of au32.- Add
len()method toSpatialSink.
- Re-export
cpalin full. - Replace panics when calling
OutputStream::try_default,OutputStream::try_from_devicewith newStreamErrorvariants. OutputStream::try_defaultwill now fallback to non-default output devices if anOutputStreamcannot be created from the default device.
- Fix panic when no
pulseaudio-alsawas installed.
- Update
cpalto 0.13. - Add Android support.
- Breaking: Update
cpalto 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::capacitybehaviour.
- 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
cpalto 0.10.
- Remove exclusive
&mutborrow requirements inSink&SpatialSinksetters. - Use
nalgebrainstead ofcgmathforSpatialsource.
- Update
lewtondependency to 0.9 - Change license from
Apache-2.0only toApache-2.0 OR MIT
- Add mp3 decoding capabilities via
minimp3
- Update
cpaldependency to 0.8, and adopt the new naming convention - BREAKING CHANGES:
- renamed
EndpointtoDevice - split
default_endpoint()intodefault_output_device()anddefault_input_device() - renamed
endpoints()todevices() - introduced
output_devices()andinput_devices()
- renamed