- Store and output samples as 32-bit floats instead of 16-bit integers.
This provides 24-25 bits of transparency, allowing for 42-48 dB of
headroom to do volume control and normalisation without throwing
away bits or dropping dynamic range below 96 dB CD quality.
- Perform volume control and normalisation in 64-bit arithmetic.
- Add a dynamic limiter with configurable threshold, attack time,
release or decay time, and steepness for the sigmoid transfer
function. This mimics the native Spotify limiter, offering greater
dynamic range than the old limiter, that just reduced overall gain
to prevent clipping.
- Make the configurable threshold also apply to the old limiter, which
is still available.
Resolves: librespot-org/librespot#608
A bunch of stuff got moved around; means of constructing audio output port
changed.
I simply used the commits, mostly from [1], to their examples to figure
out how to address the errors that resulted from compiling after the
version bump. It compiles cleanly again now.
[1]: https://github.com/RustAudio/rust-jack/pull/89
(needed to be done together)
there was no changelog for gstreamer and far too many commits to check
compatibility, but compiling with the gstreamer backend feature works fine
with these new versions.
requires adding dependency on libpulse-simple-sys since the PulseAudio
simple components were moved to their own crate (the original version
did not stick to the one crate per one system library rule).
this fixes the licensing compatibility issue discussed in #539 ([1])
(the original v0.0.0 was LGPL-3.0 licensed, while v1.11 onwards are
'MIT OR Apache-2.0').
[1]: https://github.com/librespot-org/librespot/issues/539
This prevents over or underestimating of the period.
While it is unlikely, with comparitively small period
sizes overestimating can cause buffer underruns and
underestimating causes more writes than necessary.
It also properly accounts for the number of channels,
which I had overlooked.
Writing to the pcm more often than necessary is
just a waste of resources and depending
on the pcm it can have quite an impact
on performance. The pcm expects full periods
anyway.