2021-05-04 22:08:49 +00:00
# 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.0.0/ ),
and this project adheres to [Semantic Versioning ](https://semver.org/spec/v2.0.0.html ) since v0.2.0.
2022-05-21 20:52:39 +00:00
## [Unreleased]
### Changed
2022-07-21 01:27:45 +00:00
- [playback] `subprocess` : Better error handling
- [playback] `pipe` : Better error handling
2022-05-21 20:52:39 +00:00
### Added
2022-07-21 01:27:45 +00:00
- [playback] `pipe` : Implement stop
2022-05-21 20:52:39 +00:00
### Fixed
2022-05-28 14:08:50 +00:00
- [playback] `alsamixer` : make `--volume-ctrl fixed` work as expected when combined with `--mixer alsa`
2022-07-21 01:27:45 +00:00
- [main] fix `--opt=value` line argument logging
2022-05-21 20:52:39 +00:00
### Removed
2022-05-23 20:21:56 +00:00
## [0.4.1] - 2022-05-23
### Changed
- [chore] The MSRV is now 1.56
### Fixed
- [playback] Fixed dependency issues when installing from crate
2022-05-21 20:14:18 +00:00
## [0.4.0] - 2022-05-21
2021-10-04 19:44:03 +00:00
2021-10-30 19:22:24 +00:00
### Changed
2022-05-21 20:14:18 +00:00
- [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
2022-01-14 22:31:29 +00:00
- [playback] More robust dynamic limiter for very wide dynamic range (breaking)
2022-05-21 20:14:18 +00:00
- [playback] `alsa` : improve `--device ?` output for the Alsa backend
2022-05-21 18:55:55 +00:00
- [playback] `gstreamer` : create own context, set correct states and use sync handler
2022-05-21 20:14:18 +00:00
- [playback] `pipe` : create file if it doesn't already exist
- [playback] `Sink` : `write()` now receives ownership of the packet (breaking)
2021-10-30 19:22:24 +00:00
2021-10-27 03:18:10 +00:00
### Added
2022-05-21 20:14:18 +00:00
- [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)
2021-10-27 03:18:10 +00:00
2021-10-28 14:10:10 +00:00
### Fixed
2022-05-21 20:14:18 +00:00
- [connect] Don't panic when activating shuffle without previous interaction
2022-01-23 18:02:04 +00:00
- [core] Removed unsafe code (breaking)
2022-05-21 20:14:18 +00:00
- [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
2021-10-30 19:22:24 +00:00
### Removed
2022-05-21 20:14:18 +00:00
- [playback] `alsamixer` : previously deprecated options `mixer-card` , `mixer-name` and `mixer-index` have been removed
2021-10-28 14:10:10 +00:00
2021-10-24 18:07:11 +00:00
## [0.3.1] - 2021-10-24
2021-10-14 10:57:33 +00:00
### Changed
- Include build profile in the displayed version information
2021-10-19 20:33:04 +00:00
- [playback] Improve dithering CPU usage by about 33%
2021-10-14 10:57:33 +00:00
2021-10-13 18:37:46 +00:00
### Fixed
- [connect] Partly fix behavior after last track of an album/playlist
## [0.3.0] - 2021-10-13
2021-10-04 19:44:03 +00:00
2021-05-24 13:53:32 +00:00
### Added
2021-05-26 18:50:42 +00:00
- [discovery] The crate `librespot-discovery` for discovery in LAN was created. Its functionality was previously part of `librespot-connect` .
Implement dithering (#694)
Dithering lowers digital-to-analog conversion ("requantization") error, linearizing output, lowering distortion and replacing it with a constant, fixed noise level, which is more pleasant to the ear than the distortion.
Guidance:
- On S24, S24_3 and S24, the default is to use triangular dithering. Depending on personal preference you may use Gaussian dithering instead; it's not as good objectively, but it may be preferred subjectively if you are looking for a more "analog" sound akin to tape hiss.
- Advanced users who know that they have a DAC without noise shaping have a third option: high-passed dithering, which is like triangular dithering except that it moves dithering noise up in frequency where it is less audible. Note: 99% of DACs are of delta-sigma design with noise shaping, so unless you have a multibit / R2R DAC, or otherwise know what you are doing, this is not for you.
- Don't dither or shape noise on S32 or F32. On F32 it's not supported anyway (there are no integer conversions and so no rounding errors) and on S32 the noise level is so far down that it is simply inaudible even after volume normalisation and control.
New command line option:
--dither DITHER Specify the dither algorithm to use - [none, gpdf,
tpdf, tpdf_hp]. Defaults to 'tpdf' for formats S16
S24, S24_3 and 'none' for other formats.
Notes:
This PR also features some opportunistic improvements. Worthy of mention are:
- matching reference Vorbis sample conversion techniques for lower noise
- a cleanup of the convert API
2021-05-26 19:19:17 +00:00
- [playback] Add support for dithering with `--dither` for lower requantization error (breaking)
2021-05-24 13:53:32 +00:00
- [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
2021-05-30 18:09:39 +00:00
- [playback] Add `--format F64` (supported by Alsa and GStreamer only)
2021-10-04 19:44:03 +00:00
- [playback] Add `--normalisation-gain-type auto` that switches between album and track automatically
2021-05-24 13:53:32 +00:00
### Changed
2021-09-20 17:29:12 +00:00
- [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)
2021-05-31 20:32:39 +00:00
- [audio, playback] Use `Duration` for time constants and functions (breaking)
2021-05-26 18:50:42 +00:00
- [connect, playback] Moved volume controls from `librespot-connect` to `librespot-playback` crate
- [connect] Synchronize player volume with mixer volume on playback
2021-05-30 18:09:39 +00:00
- [playback] Store and pass samples in 64-bit floating point
2021-05-24 13:53:32 +00:00
- [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)
2021-10-04 19:44:03 +00:00
- [playback] `alsamixer` : query card dB range for the volume control unless specified otherwise
2021-05-24 13:53:32 +00:00
- [playback] `alsamixer` : use `--device` name for `--mixer-card` unless specified otherwise
2021-06-18 18:25:09 +00:00
- [playback] `player` : consider errors in `sink.start` , `sink.stop` and `sink.write` fatal and `exit(1)` (breaking)
2021-06-30 07:54:02 +00:00
- [playback] `player` : make `convert` and `decoder` public so you can implement your own `Sink`
2021-09-20 17:22:02 +00:00
- [playback] `player` : update default normalisation threshold to -2 dBFS
- [playback] `player` : default normalisation type is now `auto`
2021-05-04 22:08:49 +00:00
2021-05-26 18:50:42 +00:00
### Deprecated
2021-05-26 19:03:06 +00:00
- [connect] The `discovery` module was deprecated in favor of the `librespot-discovery` crate
2021-08-26 20:35:45 +00:00
- [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`
2021-04-13 08:29:34 +00:00
2021-05-24 13:53:32 +00:00
### Removed
2021-05-26 18:50:42 +00:00
- [connect] Removed no-op mixer started/stopped logic (breaking)
2021-05-26 19:43:20 +00:00
- [playback] Removed `with-vorbis` and `with-tremor` features
2021-08-26 20:35:45 +00:00
- [playback] `alsamixer` : removed `--mixer-linear-volume` option, now that `--volume-ctrl {linear|log}` work as expected on Alsa
2021-04-13 08:29:34 +00:00
2021-05-16 20:30:35 +00:00
### Fixed
2021-05-26 18:50:42 +00:00
- [connect] Fix step size on volume up/down events
2021-10-05 20:08:26 +00:00
- [connect] Fix looping back to the first track after the last track of an album or playlist
2021-05-26 19:03:06 +00:00
- [playback] Incorrect `PlayerConfig::default().normalisation_threshold` caused distortion when using dynamic volume normalisation downstream
2021-05-26 18:50:42 +00:00
- [playback] Fix `log` and `cubic` volume controls to be mute at zero volume
2021-05-30 18:57:46 +00:00
- [playback] Fix `S24_3` format on big-endian systems
2021-05-26 18:50:42 +00:00
- [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
2021-05-30 18:57:46 +00:00
- [playback] `alsa` , `gstreamer` , `pulseaudio` : always output in native endianness
2021-06-09 18:50:24 +00:00
- [playback] `alsa` : revert buffer size to ~500 ms
2021-06-30 19:14:23 +00:00
- [playback] `alsa` , `pipe` , `pulseaudio` : better error handling
2021-09-20 17:20:44 +00:00
- [metadata] Skip tracks whose Spotify ID's can't be found (e.g. local files, which aren't supported)
2021-05-16 20:30:35 +00:00
2021-05-04 22:08:49 +00:00
## [0.2.0] - 2021-05-04
## [0.1.6] - 2021-02-22
## [0.1.5] - 2021-02-21
## [0.1.3] - 2020-07-29
## [0.1.2] - 2020-07-22
## [0.1.1] - 2020-01-30
## [0.1.0] - 2019-11-06
2022-05-23 20:21:56 +00:00
[unreleased]: https://github.com/librespot-org/librespot/compare/v0.4.1..HEAD
[0.4.1]: https://github.com/librespot-org/librespot/compare/v0.4.0..v0.4.1
2022-05-21 20:14:18 +00:00
[0.4.0]: https://github.com/librespot-org/librespot/compare/v0.3.1..v0.4.0
2021-10-24 18:07:11 +00:00
[0.3.1]: https://github.com/librespot-org/librespot/compare/v0.3.0..v0.3.1
2021-10-04 19:44:03 +00:00
[0.3.0]: https://github.com/librespot-org/librespot/compare/v0.2.0..v0.3.0
2021-05-04 22:08:49 +00:00
[0.2.0]: https://github.com/librespot-org/librespot/compare/v0.1.6..v0.2.0
[0.1.6]: https://github.com/librespot-org/librespot/compare/v0.1.5..v0.1.6
[0.1.5]: https://github.com/librespot-org/librespot/compare/v0.1.3..v0.1.5
[0.1.3]: https://github.com/librespot-org/librespot/compare/v0.1.2..v0.1.3
[0.1.2]: https://github.com/librespot-org/librespot/compare/v0.1.1..v0.1.2
[0.1.1]: https://github.com/librespot-org/librespot/compare/v0.1.0..v0.1.1
[0.1.0]: https://github.com/librespot-org/librespot/releases/tag/v0.1.0