Commit graph

102 commits

Author SHA1 Message Date
Christian König 84804b6bfc Update glib
Signed-off-by: Christian König <ckoenig@posteo.de>
2023-08-23 21:54:17 +02:00
yubiuser e14dac3ff3
Remove and update dependencies (#1140) 2023-04-11 20:33:45 +02:00
Roderick van Domburg d569d37966
Merge pull request #1136 from eladyn/jack_update
update jack to match alsa requirement
2023-03-22 13:38:52 +01:00
eladyn 9836db2c2c
update jack to match alsa requirement 2023-03-22 13:35:15 +01:00
Federico a50d0d4510
Update rodio to 0.17.1 and cpal to 0.15.1 #1191
Inherit upstream fix https://github.com/RustAudio/cpal/pull/648
2023-03-17 14:57:40 +01:00
Roderick van Domburg 2a79af1f0a
Migrate to Rust 2021 2022-08-02 21:42:38 +02:00
sqozz d09ee4206c Add minimum rust version 2022-08-01 15:14:17 +02:00
Roderick van Domburg 786f8832d1
Update version numbers to 0.5.0-dev 2022-07-30 22:28:12 +02:00
Roderick van Domburg 37794c5b78
Merge branch 'new-api' into dev 2022-07-29 23:39:06 +02:00
Roderick van Domburg 6537c441c3
Update Cargo.lock 2022-07-29 22:05:10 +02:00
Roderick van Domburg 05b9b13cf8
Merge branch 'dev' into new-api and update crates 2022-07-27 23:31:11 +02:00
Roderick van Domburg 88e64bd884
Update Cargo.lock 2022-05-23 21:43:16 +02:00
JasonLG1979 0b7508a2bf Update deps round 2 2022-05-23 13:17:18 -05:00
JasonLG1979 c03d3ad102 Bump deps
This bumps deps that don't need major code refactoring or MSRV bumps.
2022-05-23 10:19:54 -05:00
Roderick van Domburg dff19377fa
Update version numbers to 0.4.0 2022-05-21 22:31:15 +02:00
Roderick van Domburg b08502c801
Update crates 2022-05-21 21:51:37 +02:00
Sean McNamara 3d298768b3
Backport #964 GStreamer backend cleanup (#979) 2022-05-21 20:55:55 +02:00
JasonLG1979 3be6990a13 Update dependencies 2022-04-19 17:29:37 -05:00
Sebastian Dröge ab562cc8d8
Update GStreamer to 0.18 and clean up (#964)
* Update GStreamer backend to 0.18
* Don't manually go through all intermediate states when shutting down the GStreamer backend; that happens automatically
* Don't initialize GStreamer twice
* Use less stringly-typed API for configuring the appsrc
* Create our own main context instead of stealing the default one; if the application somewhere else uses the default main context this would otherwise fail in interesting ways
* Create GStreamer pipeline more explicitly instead of going via strings for everything
* Add an audioresample element before the sink in case the sink doesn't support the sample rate
* Remove unnecessary `as_bytes()` call
* Use a GStreamer bus sync handler instead of spawning a new thread with a mainloop; it's only used for printing errors or when the end of the stream is reached, which can also be done as well when synchronously handling messages.
* Change `expect()` calls to proper error returns wherever possible in GStreamer backend
* Store asynchronously reported error in GStreamer backend and return them on next write
* Update MSRV to 1.56
2022-02-13 21:52:02 +01:00
Philip Deljanov e64f09fd77 Upgrade to Symphonia v0.5. 2022-02-01 19:02:14 -05:00
Roderick van Domburg 827b815da9
Update Rodio and neatly call play/pause 2022-01-26 22:54:04 +01:00
Roderick van Domburg 552d9145f4
Feature-gate passthrough decoder 2022-01-25 20:46:10 +01:00
Roderick van Domburg 75e6441db9
Downgrade for MSRV 1.53 2022-01-09 22:24:34 +01:00
Roderick van Domburg 59d00787c9
Update player crates and transitive dependencies 2022-01-09 16:04:53 +01:00
Roderick van Domburg 5cc3040bd8
Update futures 2022-01-08 21:21:31 +01:00
Roderick van Domburg 7921f23927
Improve format handling and support MP3
- Switch from `lewton` to `Symphonia`. This is a pure Rust demuxer
  and decoder in active development that supports a wide range of
  formats, including Ogg Vorbis, MP3, AAC and FLAC for future HiFi
  support. At the moment only Ogg Vorbis and MP3 are enabled; all
  AAC files are DRM-protected.

- Bump MSRV to 1.51, required for `Symphonia`.

- Filter out all files whose format is not specified.

- Not all episodes seem to be encrypted. If we can't get an audio
  key, try and see if we can play the file without decryption.

- After seeking, report the actual position instead of the target.

- Remove the 0xa7 bytes offset from `Subfile`, `Symphonia` does
  not balk at Spotify's custom Ogg packet before it. This also
  simplifies handling of formats other than Ogg Vorbis.

- When there is no next track to load, signal the UI that the
  player has stopped. Before, the player would get stuck in an
  infinite reloading loop when there was only one track in the
  queue and that track could not be loaded.
2022-01-03 00:13:28 +01:00
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 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 f03a7e95c1
Merge remote-tracking branch 'librespot-org/dev' into new-api-wip 2021-12-08 19:11:53 +01:00
Roderick van Domburg 47badd61e0
Update tokio and fix build 2021-11-27 14:26:13 +01: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
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
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
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
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
Roderick van Domburg 8062bd2518
Improve sample rounding and clean up noise shaping leftovers (#771) 2021-05-29 22:53:19 +02:00
Roderick van Domburg 11dfedea3b
Remove with-vorbis and with-tremor features (#750) 2021-05-26 21:43:20 +02:00
Roderick van Domburg bb3dd64c87
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 21:19:17 +02:00
Roderick van Domburg a590b778de
Bump jack and Rodio crates 2021-05-25 22:35:35 +02:00
johannesd3 555274b5af
Move decoder to playback crate 2021-05-11 20:36:53 +02:00
dependabot[bot] fce91f4e61
Bump jack from 0.6.6 to 0.7.0 (#720) 2021-05-09 21:03:25 +00:00
Sasha Hilton 2ef3928691 Update version numbers to 0.2.0 2021-05-04 13:05:13 +01:00
johannesd3 17b04c4b6e
Remove libc dep 2021-05-01 13:00:30 +02:00
johannesd3 26c127c2ec Merge branch 'dev' into tokio_migration 2021-04-10 12:59:47 +02:00
Roderick van Domburg 222f9bbd01 Bump playback crates to the latest supporting Rust 1.41.1
For Rodio, this fixes garbled sound on some but not all Alsa hosts.
2021-04-09 20:01:21 +02:00
Roderick van Domburg bfca1ec15e Minor code improvements and crates bump 2021-03-27 21:13:14 +01:00