Librespot Versions Save

Open Source Spotify client library

v0.4.2

1 year ago

Besides a couple of small fixes, this point release is mainly to blacklist the ap-gew4 and ap-gue1 access points that caused librespot to fail to playback anything.

Development will now shift to the new HTTP-based API, targeted for a future v0.5.0 release. The new-api branch will therefore be promoted to dev. This is a major departure from the old API and although it brings many exciting new things, it is also likely to introduce new bugs and some regressions.

Long story short, this v0.4.2 release is the most stable that librespot has yet to offer. But, unless anything big comes up, it is also intended as the last release to be based on the old API. Happy listening.

Changelog

Changed

  • [playback] pipe: Better error handling
  • [playback] subprocess: Better error handling

Added

  • [core] apresolve: Blacklist ap-gew4 and ap-gue1 access points that cause channel errors
  • [playback] pipe: Implement stop

Fixed

  • [main] fix --opt=value line argument logging
  • [playback] alsamixer: make --volume-ctrl fixed work as expected when combined with --mixer alsa

v0.4.1

1 year ago

This release fixes dependency issues when installing from crates. v0.4.0 has been yanked.

v0.4.0

1 year ago

Note: This version was yanked, because a corrupt package was uploaded and failed to install.

This is a polishing release, adding a few little extras and improving on many others. We had to break a couple of API's to do so, and therefore bumped the minor version number. v0.4.x may be the last in series before we migrate from the current channel-based Spotify backend to a more HTTP-based backend. Targeting that major effort for a v0.5 release sometime, we intend to maintain v0.4.x as a stable branch until then.

Changelog

Changed

  • [chore] The MSRV is now 1.53
  • [contrib] Hardened security of the systemd service units
  • [core] Session: connect() now returns the long-term credentials
  • [core] Session: connect() now accepts a flag if the credentails should be stored via the cache
  • [main] Different option descriptions and error messages based on what backends are enabled at build time
  • [playback] More robust dynamic limiter for very wide dynamic range (breaking)
  • [playback] alsa: improve --device ? output for the Alsa backend
  • [playback] gstreamer: create own context, set correct states and use sync handler
  • [playback] pipe: create file if it doesn't already exist
  • [playback] Sink: write() now receives ownership of the packet (breaking)

Added

  • [main] Enforce reasonable ranges for option values (breaking)
  • [main] Add the ability to parse environment variables
  • [main] Log now emits warning when trying to use options that would otherwise have no effect
  • [main] Verbose logging now logs all parsed environment variables and command line arguments (credentials are redacted)
  • [main] Add a -q, --quiet option that changes the logging level to WARN
  • [main] Add disable-credential-cache flag (breaking)
  • [main] Add a short name for every flag and option
  • [playback] pulseaudio: set the PulseAudio name to match librespot's device name via PULSE_PROP_application.name environment variable (user set env var value takes precedence) (breaking)
  • [playback] pulseaudio: set icon to audio-x-generic so we get an icon instead of a placeholder via PULSE_PROP_application.icon_name environment variable (user set env var value takes precedence) (breaking)
  • [playback] pulseaudio: set values to: PULSE_PROP_application.version, PULSE_PROP_application.process.binary, PULSE_PROP_stream.description, PULSE_PROP_media.software and PULSE_PROP_media.role environment variables (user set env var values take precedence) (breaking)

Fixed

  • [connect] Don't panic when activating shuffle without previous interaction
  • [core] Removed unsafe code (breaking)
  • [main] Fix crash when built with Avahi support but Avahi is locally unavailable
  • [main] Prevent hang when discovery is disabled and there are no credentials or when bad credentials are given
  • [main] Don't panic when parsing options, instead list valid values and exit
  • [main] --alsa-mixer-device and --alsa-mixer-index now fallback to the card and index specified in --device.
  • [playback] Adhere to ReplayGain spec when calculating gain normalisation factor
  • [playback] alsa: make --volume-range overrides apply to Alsa softvol controls

Removed

  • [playback] alsamixer: previously deprecated options mixer-card, mixer-name and mixer-index have been removed

v0.3.1

2 years ago

Changed

  • Include build profile in the displayed version information
  • [playback] Improve dithering CPU usage by about 33%

Fixed

  • [connect] Partly fix behavior after last track of an album/playlist

v0.3.0

2 years ago

Added

  • [discovery] The crate librespot-discovery for discovery in LAN was created. Its functionality was previously part of librespot-connect.
  • [playback] Add support for dithering with --dither for lower requantization error (breaking)
  • [playback] Add --volume-range option to set dB range and control log and cubic volume control curves
  • [playback] alsamixer: support for querying dB range from Alsa softvol
  • [playback] Add --format F64 (supported by Alsa and GStreamer only)
  • [playback] Add --normalisation-gain-type auto that switches between album and track automatically

Changed

  • [audio, playback] Moved VorbisDecoder, VorbisError, AudioPacket, PassthroughDecoder, PassthroughError, DecoderError, AudioDecoder and the convert module from librespot-audio to librespot-playback. The underlying crates vorbis, librespot-tremor, lewton and ogg should be used directly. (breaking)
  • [audio, playback] Use Duration for time constants and functions (breaking)
  • [connect, playback] Moved volume controls from librespot-connect to librespot-playback crate
  • [connect] Synchronize player volume with mixer volume on playback
  • [playback] Store and pass samples in 64-bit floating point
  • [playback] Make cubic volume control available to all mixers with --volume-ctrl cubic
  • [playback] Normalize volumes to [0.0..1.0] instead of [0..65535] for greater precision and performance (breaking)
  • [playback] alsamixer: complete rewrite (breaking)
  • [playback] alsamixer: query card dB range for the volume control unless specified otherwise
  • [playback] alsamixer: use --device name for --mixer-card unless specified otherwise
  • [playback] player: consider errors in sink.start, sink.stop and sink.write fatal and exit(1) (breaking)
  • [playback] player: make convert and decoder public so you can implement your own Sink
  • [playback] player: update default normalisation threshold to -2 dBFS
  • [playback] player: default normalisation type is now auto

Deprecated

  • [connect] The discovery module was deprecated in favor of the librespot-discovery crate
  • [playback] alsamixer: renamed mixer-card to alsa-mixer-device
  • [playback] alsamixer: renamed mixer-name to alsa-mixer-control
  • [playback] alsamixer: renamed mixer-index to alsa-mixer-index

Removed

  • [connect] Removed no-op mixer started/stopped logic (breaking)
  • [playback] Removed with-vorbis and with-tremor features
  • [playback] alsamixer: removed --mixer-linear-volume option, now that --volume-ctrl {linear|log} work as expected on Alsa

Fixed

  • [connect] Fix step size on volume up/down events
  • [playback] Incorrect PlayerConfig::default().normalisation_threshold caused distortion when using dynamic volume normalisation downstream
  • [playback] Fix log and cubic volume controls to be mute at zero volume
  • [playback] Fix S24_3 format on big-endian systems
  • [playback] alsamixer: make cubic consistent between cards that report minimum volume as mute, and cards that report some dB value
  • [playback] alsamixer: make --volume-ctrl {linear|log} work as expected
  • [playback] alsa, gstreamer, pulseaudio: always output in native endianness
  • [playback] alsa: revert buffer size to ~500 ms
  • [playback] alsa, pipe, pulseaudio: better error handling
  • [metadata] Skip tracks whose Spotify ID's can't be found (e.g. local files, which aren't supported)

v0.2.0

2 years ago

Changelog - v0.2.0

BREAKING CHANGES

  • Migrate to tokio 1.0. This required a wholesale refactor of the librespot codebase (#606 #649 #658 #665 #674 #687 #691)
  • Replaced fn instances with const in version.rs (#595)
  • Option to choose between track and album normalisation added. Defaults to album, was previously disabled by default (#573)

Features

  • Add preload event for new track playing soon (#546)
  • Ogg passthrough support (#569 #664)
  • Add high resolution audio control & normalisation (#660)
  • Add shuffle command handling (#666 #708)
  • Add cache size limit (#675)

Bug fixes

  • Fix streaming mode (#693)
  • Fix normalisation (#698)
  • Fix rodio warning for alsa (#696)

Maintenance

  • Bump MSRV to 1.48
  • Bump dependencies (#710)
  • Clean up imports (#652 #667 #668)
  • Update examples (#663)
  • Change panic! to error! when child process fails to start (onevent program) (#684)
  • Reduce boilerplate (#699)