Up to [cvs.NetBSD.org] / pkgsrc / audio / librespot
Request diff between arbitrary revisions
Keyword substitution: kv
Default branch: MAIN
audio/librespot: update to 0.6.0 This version takes another step into the direction of the HTTP API, fixes a couple of bugs, and makes it easier for developers to mock a certain platform. Also it adds the option to choose avahi, dnssd or libmdns as your zeroconf backend for Spotify Connect discovery. Changed [core] The access_token for http requests is now acquired by login5 [core] MSRV is now 1.75 (breaking) [discovery] librespot can now be compiled with multiple MDNS/DNS-SD backends (avahi, dns_sd, libmdns) which can be selected using a CLI flag. The defaults are unchanged (breaking). Added [core] Add get_token_with_client_id() to get a token for a specific client ID [core] Add login (mobile) and auth_token retrieval via login5 [core] Add OS and os_version to config.rs [discovery] Added a new MDNS/DNS-SD backend which connects to Avahi via D-Bus. Fixed [connect] Fixes initial volume showing zero despite playing in full volume instead [core] Fix "source slice length (16) does not match destination slice length (20)" panic on some tracks
Pullup ticket #6908 - requested by pin audio/librespot: update to restore functionality Revisions pulled up: - audio/librespot/Makefile 1.30,1.29,1.28 - audio/librespot/cargo-depends.mk 1.10 - audio/librespot/distinfo 1.12 --- Module Name: pkgsrc Committed By: pin Date: Sun Oct 20 13:20:55 UTC 2024 Modified Files: pkgsrc/audio/librespot: Makefile Log Message: audio/librespot: attempt to fix broken build --- Module Name: pkgsrc Committed By: pin Date: Sat Oct 19 15:32:44 UTC 2024 Modified Files: pkgsrc/audio/librespot: Makefile Log Message: audio/librespot: fix broken build --- Module Name: pkgsrc Committed By: pin Date: Wed Oct 16 10:05:03 UTC 2024 Modified Files: pkgsrc/audio/librespot: Makefile cargo-depends.mk distinfo Log Message: audio/librespot: update to 0.5.0 This version is be a major departure from the architecture up until now. It focuses on implementing the "new Spotify API". This means moving large parts of the Spotify protocol from Mercury to HTTP. A lot of this was reverse engineered before by @devgianlu of librespot-java. It was long overdue that we started implementing it too, not in the least because new features like the hopefully upcoming Spotify HiFi depend on it. Splitting up the work on the new Spotify API, v0.5.0 brings HTTP-based file downloads and metadata access. Implementing the "dealer" (replacing the current Mercury-based SPIRC message bus with WebSockets, also required for social plays) is a large and separate effort, slated for some later release. While at it, we are taking the liberty to do some major refactoring to make librespot more robust. Consequently not only the Spotify API changed but large parts of the librespot API too. For downstream maintainers, we realise that it can be a lot to move from the current codebase to this one, but believe us it will be well worth it. All these changes are likely to introduce new bugs as well as some regressions. We appreciate all your testing and contributions to the repository: https://github.com/librespot-org/librespot Changed [all] Assertions were changed into Result or removed (breaking) [all] Purge use of unwrap, expect and return Result (breaking) [all] chrono replaced with time (breaking) [all] time updated (CVE-2020-26235) [all] Improve lock contention and performance (breaking) [all] Use a single player instance. Eliminates occasional player and audio backend restarts, which can cause issues with some playback configurations. [all] Updated and removed unused dependencies [audio] Files are now downloaded over the HTTPS CDN (breaking) [audio] Improve file opening and seeking performance (breaking) [core] MSRV is now 1.74 (breaking) [connect] DeviceType moved out of connect into core (breaking) [connect] Update and expose all spirc context fields (breaking) [connect] Add Clone, Default traits to spirc contexts [connect] Autoplay contexts are now retrieved with the spclient (breaking) [contrib] Updated Docker image [core] Message listeners are registered before authenticating. As a result there now is a separate Session::new and subsequent session.connect. (breaking) [core] ConnectConfig moved out of core into connect (breaking) [core] client_id for get_token moved to SessionConfig (breaking) [core] Mercury code has been refactored for better legibility (breaking) [core] Cache resolved access points during runtime (breaking) [core] FileId is moved out of SpotifyId. For now it will be re-exported. [core] Report actual platform data on login [core] Support Session authentication with a Spotify access token [core] Credentials.username is now an Option (breaking) [core] Session::connect tries multiple access points, retrying each one. [core] Each access point connection now timeout after 3 seconds. [core] Listen on both IPV4 and IPV6 on non-windows hosts [main] autoplay {on|off}now acts as an override. If unspecified, librespot now follows the setting in the Connect client that controls it. (breaking) [metadata] Most metadata is now retrieved with the spclient (breaking) [metadata] Playlists are moved to the playlist4_external protobuf (breaking) [metadata] Handle playlists that are sent with microsecond-based timestamps [playback] The audio decoder has been switched from lewton to Symphonia. This improves the Vorbis sound quality, adds support for MP3 as well as for FLAC in the future. (breaking) [playback] Improve reporting of actual playback cursor [playback] The passthrough decoder is now feature-gated (breaking) [playback] rodio: call play and pause [protocol] protobufs have been updated Added [all] Check that array indexes are within bounds (panic safety) [all] Wrap errors in librespot Error type (breaking) [audio] Make audio fetch parameters tunable [connect] Add option on which zeroconf will bind. Defaults to all interfaces. Ignored by DNS-SD. [connect] Add session events [connect] Add repeat, set_position_ms and set_volume to spirc.rs [contrib] Add event_handler_example.py [core] Send metrics with metadata queries: client ID, country & product [core] Verify Spotify server certificates (prevents man-in-the-middle attacks) [core] User attributes are stored in Session upon login, accessible with a getter and setter, and automatically updated as changes are pushed by the Spotify infrastructure (breaking) [core] HTTPS is now supported, including for proxies (breaking) [core] Resolve spclient and dealer access points (breaking) [core] Get and cache tokens through new token provider (breaking) [core] spclient is the API for HTTP-based calls to the Spotify servers. It supports a lot of functionality, including audio previews and image downloads even if librespot doesn't use that for playback itself. [core] Support downloading of lyrics [core] Support parsing SpotifyId for local files [core] Support parsing SpotifyId for named playlists [core] Add checks and handling for stale server connections. [core] Fix potential deadlock waiting for audio decryption keys. [discovery] Add option to show playback device as a group [main] Add all player events to player_event_handler.rs [main] Add an event worker thread that runs async to the main thread(s) but sync to itself to prevent potential data races for event consumers [metadata] All metadata fields in the protobufs are now exposed (breaking) [oauth] Standalone module to obtain Spotify access token using OAuth authorization code flow. [playback] Explicit tracks are skipped if the controlling Connect client has disabled such content. Applications that use librespot as a library without Connect should use the 'filter-explicit-content' user attribute in the session. [playback] Add metadata support via a TrackChanged event [connect] Add activate and load functions to Spirc, allowing control over local connect sessions [metadata] Add Lyrics [discovery] Add discovery initialisation retries if within the 1st min of uptime Fixed [connect] Set PlayStatus to the correct value when Player is loading to avoid blanking out the controls when self.play_status is LoadingPlay or LoadingPause in spirc.rs [connect] Handle attempts to play local files better by basically ignoring attempts to load them in handle_remote_update in spirc.rs [connect] Loading previous or next tracks, or looping back on repeat, will only start playback when we were already playing [connect, playback] Clean up and de-noise events and event firing [core] Fixed frequent disconnections for some users [core] More strict Spotify ID parsing [discovery] Update active user field upon connection [playback] Handle invalid track start positions by just starting the track from the beginning [playback] Handle disappearing and invalid devices better [playback] Handle seek, pause, and play commands while loading [playback] Handle disabled normalisation correctly when using fixed volume [playback] Do not stop sink in gapless mode [metadata] Fix missing colon when converting named spotify IDs to URIs
audio/librespot: update to 0.5.0 This version is be a major departure from the architecture up until now. It focuses on implementing the "new Spotify API". This means moving large parts of the Spotify protocol from Mercury to HTTP. A lot of this was reverse engineered before by @devgianlu of librespot-java. It was long overdue that we started implementing it too, not in the least because new features like the hopefully upcoming Spotify HiFi depend on it. Splitting up the work on the new Spotify API, v0.5.0 brings HTTP-based file downloads and metadata access. Implementing the "dealer" (replacing the current Mercury-based SPIRC message bus with WebSockets, also required for social plays) is a large and separate effort, slated for some later release. While at it, we are taking the liberty to do some major refactoring to make librespot more robust. Consequently not only the Spotify API changed but large parts of the librespot API too. For downstream maintainers, we realise that it can be a lot to move from the current codebase to this one, but believe us it will be well worth it. All these changes are likely to introduce new bugs as well as some regressions. We appreciate all your testing and contributions to the repository: https://github.com/librespot-org/librespot Changed [all] Assertions were changed into Result or removed (breaking) [all] Purge use of unwrap, expect and return Result (breaking) [all] chrono replaced with time (breaking) [all] time updated (CVE-2020-26235) [all] Improve lock contention and performance (breaking) [all] Use a single player instance. Eliminates occasional player and audio backend restarts, which can cause issues with some playback configurations. [all] Updated and removed unused dependencies [audio] Files are now downloaded over the HTTPS CDN (breaking) [audio] Improve file opening and seeking performance (breaking) [core] MSRV is now 1.74 (breaking) [connect] DeviceType moved out of connect into core (breaking) [connect] Update and expose all spirc context fields (breaking) [connect] Add Clone, Default traits to spirc contexts [connect] Autoplay contexts are now retrieved with the spclient (breaking) [contrib] Updated Docker image [core] Message listeners are registered before authenticating. As a result there now is a separate Session::new and subsequent session.connect. (breaking) [core] ConnectConfig moved out of core into connect (breaking) [core] client_id for get_token moved to SessionConfig (breaking) [core] Mercury code has been refactored for better legibility (breaking) [core] Cache resolved access points during runtime (breaking) [core] FileId is moved out of SpotifyId. For now it will be re-exported. [core] Report actual platform data on login [core] Support Session authentication with a Spotify access token [core] Credentials.username is now an Option (breaking) [core] Session::connect tries multiple access points, retrying each one. [core] Each access point connection now timeout after 3 seconds. [core] Listen on both IPV4 and IPV6 on non-windows hosts [main] autoplay {on|off}now acts as an override. If unspecified, librespot now follows the setting in the Connect client that controls it. (breaking) [metadata] Most metadata is now retrieved with the spclient (breaking) [metadata] Playlists are moved to the playlist4_external protobuf (breaking) [metadata] Handle playlists that are sent with microsecond-based timestamps [playback] The audio decoder has been switched from lewton to Symphonia. This improves the Vorbis sound quality, adds support for MP3 as well as for FLAC in the future. (breaking) [playback] Improve reporting of actual playback cursor [playback] The passthrough decoder is now feature-gated (breaking) [playback] rodio: call play and pause [protocol] protobufs have been updated Added [all] Check that array indexes are within bounds (panic safety) [all] Wrap errors in librespot Error type (breaking) [audio] Make audio fetch parameters tunable [connect] Add option on which zeroconf will bind. Defaults to all interfaces. Ignored by DNS-SD. [connect] Add session events [connect] Add repeat, set_position_ms and set_volume to spirc.rs [contrib] Add event_handler_example.py [core] Send metrics with metadata queries: client ID, country & product [core] Verify Spotify server certificates (prevents man-in-the-middle attacks) [core] User attributes are stored in Session upon login, accessible with a getter and setter, and automatically updated as changes are pushed by the Spotify infrastructure (breaking) [core] HTTPS is now supported, including for proxies (breaking) [core] Resolve spclient and dealer access points (breaking) [core] Get and cache tokens through new token provider (breaking) [core] spclient is the API for HTTP-based calls to the Spotify servers. It supports a lot of functionality, including audio previews and image downloads even if librespot doesn't use that for playback itself. [core] Support downloading of lyrics [core] Support parsing SpotifyId for local files [core] Support parsing SpotifyId for named playlists [core] Add checks and handling for stale server connections. [core] Fix potential deadlock waiting for audio decryption keys. [discovery] Add option to show playback device as a group [main] Add all player events to player_event_handler.rs [main] Add an event worker thread that runs async to the main thread(s) but sync to itself to prevent potential data races for event consumers [metadata] All metadata fields in the protobufs are now exposed (breaking) [oauth] Standalone module to obtain Spotify access token using OAuth authorization code flow. [playback] Explicit tracks are skipped if the controlling Connect client has disabled such content. Applications that use librespot as a library without Connect should use the 'filter-explicit-content' user attribute in the session. [playback] Add metadata support via a TrackChanged event [connect] Add activate and load functions to Spirc, allowing control over local connect sessions [metadata] Add Lyrics [discovery] Add discovery initialisation retries if within the 1st min of uptime Fixed [connect] Set PlayStatus to the correct value when Player is loading to avoid blanking out the controls when self.play_status is LoadingPlay or LoadingPause in spirc.rs [connect] Handle attempts to play local files better by basically ignoring attempts to load them in handle_remote_update in spirc.rs [connect] Loading previous or next tracks, or looping back on repeat, will only start playback when we were already playing [connect, playback] Clean up and de-noise events and event firing [core] Fixed frequent disconnections for some users [core] More strict Spotify ID parsing [discovery] Update active user field upon connection [playback] Handle invalid track start positions by just starting the track from the beginning [playback] Handle disappearing and invalid devices better [playback] Handle seek, pause, and play commands while loading [playback] Handle disabled normalisation correctly when using fixed volume [playback] Do not stop sink in gapless mode [metadata] Fix missing colon when converting named spotify IDs to URIs
audio/librespot: update to 0.4.2 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. 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
audio/librespot: update to 0.4.1 0.4.1 - 2022-05-23 Changed [chore] The MSRV is now 1.56 Fixed [playback] Fixed dependency issues when installing from crate
audio/librespot: update to 0.4.0 0.4.0 - 2022-05-21 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
audio/librespot: update to 0.3.1 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
audio/librespot: update to 0.3.0 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 - [connect] Fix looping back to the first track after the last track of an album or playlist - [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)
audio/librespot: update to 0.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)
audio/librespot: update to 0.1.6 Upstream responded to my request. We no longer need the patch and a new release is out.
audio/librespot: update to 0.1.5 Upstream does not provide a ChangeLog and, with six months since the previous release, changes are too many to pick manually. Unfortunately, the commit we have been pulling from, and that made it possible to build without patches (a2f832dff171914935f7e1a98a5da3d7c8a0b789), has been reverted. The package again depends on get_if_addrs instead of if-addrs. get_if_addrs is as an archived crate and needs to be patched to build on NetBSD. It's not either possible to upstream patches. Actually, the needed patch has already been upstremed and merged but, it didn't make it into the final release. On the other hand, if-addrs is actively maintained and would be a better option. I've contacted the developers by e-mail and asked for the revert reason.
audio/librespot: simplify Makefile add cargo-depends.mk