Commit graph

278 commits

Author SHA1 Message Date
Guillaume Desmottes
3ce9854df5 player: ensure load threads are done when dropping PlayerInternal
Fix a race where the load operation was trying to use a disposed tokio
context, resulting in panic.
2021-12-29 16:00:45 +01:00
Roderick van Domburg
332f9f04b1
Fix error hitting play when loading
Further changes:

 - Improve some debug and trace messages

 - Default to streaming download strategy

 - Synchronize mixer volume on loading play

 - Use default normalisation values when the file position isn't
   exactly what we need it to be

 - Update track position only when the decoder reports a
   successful seek
2021-12-28 23:46:37 +01:00
Roderick van Domburg
b7c047bca2
Fix alternative tracks 2021-12-27 09:35:11 +01:00
Roderick van Domburg
b4f7a9e35e
Change to parking_lot and remove remaining panics 2021-12-26 23:02:02 +01:00
Roderick van Domburg
62461be1fc
Change panics into Result<_, librespot_core::Error> 2021-12-26 21:18:42 +01:00
Roderick van Domburg
0d51fd43dc
Remove unwraps from librespot-audio 2021-12-18 23:44:13 +01:00
Roderick van Domburg
82b2653c5f
Merge remote-tracking branch 'librespot-org/dev' into new-api-wip 2021-12-16 23:01:56 +01:00
Roderick van Domburg
2f7b9863d9
Implement CDN for audio files 2021-12-16 22:42:37 +01:00
Roderick van Domburg
1736e7c52b
Merge pull request #905 from roderickvd/fix-exit-on-decoder-error
Skip track on decoding error
2021-12-15 19:01:15 +01:00
JasonLG1979
d5efb8a620 Dynamic failable buffer sizing alsa-backend
Dynamically set the alsa buffer and period based on the device's reported min/max buffer and period sizes. In the event of failure use the device's defaults.

This should have no effect on devices that allow for reasonable buffer and period sizes but would allow us to be more forgiving with less reasonable devices or configurations.

Closes: https://github.com/librespot-org/librespot/issues/895
2021-12-14 16:49:09 -06:00
Roderick van Domburg
8f23c3498f
Clean up warnings 2021-12-12 20:01:05 +01:00
Roderick van Domburg
79c4040a53
Skip track on decoding error 2021-12-12 12:56:02 +01:00
Roderick van Domburg
f03a7e95c1
Merge remote-tracking branch 'librespot-org/dev' into new-api-wip 2021-12-08 19:11:53 +01:00
Roderick van Domburg
0e2686863a
Major metadata refactoring and enhancement
* Expose all fields of recent protobufs

 * Add support for user-scoped playlists, user root playlists and
   playlist annotations

 * Convert messages with the Rust type system

 * Attempt to adhere to embargos (tracks and episodes scheduled for
   future release)

 * Return `Result`s with meaningful errors instead of panicking on
   `unwrap`s

 * Add foundation for future playlist editing

 * Up version in connection handshake to get all version-gated features
2021-12-07 23:22:24 +01:00
JasonLG1979
4370258716 Address clippy lint warnings for rust 1.57 2021-12-03 12:51:41 -06:00
Roderick van Domburg
47badd61e0
Update tokio and fix build 2021-11-27 14:26:13 +01:00
Roderick van Domburg
d19fd24074
Add spclient and HTTPS support
* Change metadata to use spclient
 * Add support for HTTPS proxies
 * Start purging unwraps and using Result instead
2021-11-26 23:28:37 +01:00
JasonLG1979
c006a23644 Improve --device ? functionality for the alsa backend
This makes `--device ?` only show compatible devices (ones that support 2 ch 44.1 Interleaved) and it shows what `librespot` format(s) they support.

This should be more useful to users as the info maps directly to `librespot`'s `--device` and `--format` options.
2021-11-20 13:51:24 -06:00
JasonLG1979
0e9fdbe6b4 Refactor main.rs
* Don't panic when parsing options. Instead list valid values and exit.
* Get rid of needless .expect in playback/src/audio_backend/mod.rs.
* Enforce reasonable ranges for option values (breaking).
* Don't evaluate options that would otherwise have no effect.
* Add pub const MIXERS to mixer/mod.rs very similar to the audio_backend's implementation. (non-breaking though)
* Use different option descriptions and error messages based on what backends are enabled at build time.
* Add a -q, --quiet option that changed the logging level to warn.
* Add a short name for every flag and option.
* Note removed options.
* Other misc cleanups.
2021-11-17 15:31:16 -06:00
Roderick van Domburg
0e6b1ba9dc
Update version numbers to 0.3.1 2021-10-24 20:12:33 +02:00
Roderick van Domburg
ff3648434b
Change hand-picked RNGs back to SmallRng
While `Xoshiro256+` is faster on 64-bit, it has low linear complexity in the
lower three bits, which *are* used when generating dither.

Also, while `Xoshiro128StarStar` access one less variable from the heap,
multiplication is generally slower than addition in hardware.
2021-10-21 19:31:58 +02:00
Roderick van Domburg
4c89a721ee
Improve dithering CPU usage (#866) 2021-10-19 22:33:04 +02:00
Sasha Hilton
6a3377402a Update version numbers to 0.3.0 2021-10-13 15:10:18 +01:00
JasonLG1979
9ef53f5ffb simplify buffer resizing
This way is less verbose, much more simple and less brittle.
2021-10-07 08:44:29 -05:00
Jason Gray
4c1b2278ab
Fix clippy comparison chain warning (#857) 2021-10-04 20:59:18 +02:00
Jason Gray
8d70fd910e
Implement common SinkError and SinkResult (#820)
* Make error messages more consistent and concise.

* `impl From<AlsaError> for io::Error` so `AlsaErrors` can be thrown to player as `io::Errors`. This little bit of boilerplate goes a long way to simplifying things further down in the code. And will make any needed future changes easier.

* Bonus: handle ALSA backend buffer sizing a little better.
2021-09-27 20:46:26 +02:00
Jason Gray
89577d1fc1
Improve player (#823)
* Improve error handling
* Harmonize `Seek`: Make the decoders and player use the same math for converting between samples and milliseconds
* Reduce duplicate calls: Make decoder seek in PCM, not ms
* Simplify decoder errors with `thiserror`
2021-09-20 19:29:12 +02:00
Roderick van Domburg
949ca4fded
Add and default to "auto" normalisation type (#844) 2021-09-20 19:22:02 +02:00
Roderick van Domburg
30717c3db7
Merge pull request #842 from roderickvd/2db-normalisation-threshold
Update default normalisation threshold
2021-09-03 21:48:42 +02:00
Roderick van Domburg
2fcd24164d
Merge pull request #840 from roderickvd/attenuate-last
Attenuate after normalisation
2021-09-02 22:09:30 +02:00
Roderick van Domburg
fe644bc0d7
Update default normalisation threshold 2021-09-02 22:04:30 +02:00
Roderick van Domburg
b016b69772
Fix clippy warnings 2021-09-01 21:25:32 +02:00
Roderick van Domburg
d8e35bf0c4
Remove clamping of float samples 2021-09-01 20:55:28 +02:00
Roderick van Domburg
7da4d0e473
Attenuate after normalisation 2021-09-01 20:54:47 +02:00
Roderick van Domburg
c67e268dc8
Improve Alsa mixer command-line options 2021-08-26 22:35:45 +02:00
Roderick van Domburg
43a8b91a3d
Revert name to softvol 2021-07-09 22:17:29 +02:00
Jason Gray
68bec41e08
Improve Alsa backend buffer (#811)
* Reuse the buffer for the life of the Alsa sink
* Don't depend on capacity being exact when sizing the buffer
* Always give the PCM a period's worth of audio even when draining the buffer
* Refactoring and code cleanup
2021-07-06 08:37:29 +02:00
Jason Gray
9ff33980d6
Better errors in PulseAudio backend (#801)
* More meaningful error messages
* Use F32 if a user requests F64 (F64 is not supported by PulseAudio)
* Move all code that can fail to `start` where errors can be returned to prevent panics
* Use drain in `stop`
2021-06-30 21:14:23 +02:00
Reinier Balt
751ccf63bb
Make convert and decoder public (#814) 2021-06-30 09:54:02 +02:00
Roderick van Domburg
7cd1b7a26a
Merge branch 'dev' into new-api-client 2021-06-26 00:14:20 +02:00
JasonLG1979
bb2477831b Don't explicitly set the number of periods
Doing so on configs that have less than the 4 periods we were asking for caused a crash. Instead ask for a buffer time of 500ms.
2021-06-25 17:10:50 -05:00
Roderick van Domburg
a7326815bd
Merge pull request #802 from JasonLG1979/fix_pipe_backend
Better errors in pipe backend
2021-06-19 22:38:47 +02:00
Roderick van Domburg
113ac94c07
Update protobufs (#796)
* Import Spotify 1.1.61.583 (Windows) protobufs
* Import Spotify 1.1.33.569 protobufs missing in 1.1.61.583
* Remove unused protobufs, no longer present in 1.1.61.583
2021-06-19 22:29:48 +02:00
JasonLG1979
336e714dba Fix clippy warning 2021-06-18 15:30:22 -05:00
JasonLG1979
5ffce0662a Fix clippy warnings
Fix the clippy warnings caused by https://github.com/librespot-org/librespot/pull/797
2021-06-18 15:11:07 -05:00
Jason Gray
2466e0b3c1
Merge branch 'librespot-org:dev' into fix_pipe_backend 2021-06-18 14:12:32 -05:00
Jason Gray
4c77854ffe
Better errors alsa backend (#797)
Better error handling in Alsa backend

* More consistent error messages
* Bail on fatal errors in player
* Capture and log the original error as a warning when trying to write to PCM before trying to recover
2021-06-18 20:25:09 +02:00
JasonLG1979
0bece0d867 Fix pipe backend
* Move all code that can fail to `start` where errors can be returned to prevent a panic!
* Replace unwrap
2021-06-18 04:54:20 -05:00
JasonLG1979
4af095e741 Improve ALSA buffer size
* Go back to 4 periods at 125ms.
* Deal strictly in period time and periods to set ALSA buffer.
* Rename `buffer` to `period_buffer`.
* Add comments and change some other var names to add clarity.
* Let ALSA calculate the size of `period_buffer`.
2021-06-08 23:44:20 -05:00
Roderick van Domburg
d4f466ef58
Revert math::round_half_to_even
This caused quite a bump in CPU usage, which be acceptable if this
actually improved sound quality. However, it turns out that this
function only has one decimal precision, i.e. it would consider
all values from `0.50..0.60` (exclusive) as `0.5` which is in
error for our purposes.
2021-05-31 23:35:48 +02:00