PulseAudio is a general-purpose sound server designed to act as a bridge between your programs and hardware devices that support ALSA or OSS. Furthermore, if Avahi is enabled, it can provide simple network streaming across local devices.
Although PipeWire has grown in popularity in recent years and is currently the primary choice for a sound server in many Linux distributions, PulseAudio is not yet out of the game and is still evolving. And its most recent release, PulseAudio 16, proves this.
PulseAudio 16 Sound Server Highlights
We start with the fact that the Opus codec, which is unmatched for interactive speech and music transmission over the Internet, can now be used to compress audio sent with module-rtp-send
. Pass enable opus=true
as a module argument to module-rtp-send
to use it. However, this feature is only available if PulseAudio is built with GStreamer enabled.
Now let’s move on to the most significant change in this release, in our opinion. PulseAudio 16 sound server now supports battery level reporting via Bluetooth. Finally!
In other words, if a Bluetooth device supports battery level reporting, PulseAudio can now transmit the information to other software. Moreover, if your desktop environment does not yet allow displaying the battery level in a pleasant GUI, the level is also accessible via the bluetooth.battery
key in the device’s card object attributes.
Another exciting change in the PulseAudio 16 sound server is some improvements to module-loopback
. This module uses adaptive resampling to compensate for minor changes in clock speeds between the source and sink devices.
A new argument, adjust_threshold_usec
, was added to fine-tune the controller algorithm. The default setting of 250 microseconds should be adequate in most circumstances. However, if it is insufficient, the loopback’s sample rate will oscillate, while too high values will increase the variance in loopback latency.
Another change in module-loopback is setting the adjust time argument to values less than one second, such as 0.5, which sets the adjustment interval to half a second. So, to tighten the latency control, the default value was changed from 10 seconds to 1 second.
In addition, module-jackdbus-detect, which automatically adds JACK sinks and sources whenever the JACK server is started, also received some love in PulseAudio 16.
The sink_enabled
and source_enabled
options have been added to the module and accept boolean values. If loading both the sink and the source is not desired, the new arguments can be used to deactivate either one.
Apart from those mentioned above, some additional changes also deserve to be noted here.
Stereo output functionality has been introduced for the EPOS/Sennheiser GSP 670 USB/wireless headset and SteelSeries GameDAC. In addition, a direct USB connection and the GSA 70 wireless dongle are also supported.
Last but not least, the reporting of sink input and source output latency now includes resampler delay. This delay is included in the sink and source latencies. While this is a modest semantic change, it should enable more precise A/V synchronization for applications.
For more information about all PulseAudio 16.0 sound server changes, you can refer to the Release Notes.