Home | About | Community | Download | Documentation | Planet |
PulseAudio 16.0 release notes
- Notes for end users
- Opus support in the RTP modules
- Stereo output support for EPOS/Sennheiser GSP 670 USB/wireless headset and SteelSeries GameDAC
- Fix input issues for Texas Instruments PCM2902 based sound cards
- Native Instruments Komplete Audio 6 MK2 profiles
- Tunnel latency is now configurable
- Tunnel modules can now reconnect to remote server
- Bluetooth device battery level reporting added
- Tunnel and combine-sink latency fixes
- module-loopback improvements
- Increased flexibility for module-jackdbus-detect
- pactl can show information in JSON format
- Channel remixing can be disabled for module-combine-sink
- Notes for application developers
- Notes for packagers
- Module installation location changed, remember to upgrade paprefs to the latest version!
- Opus support in the RTP modules requires enabling GStreamer
- Bluetooth battery level reporting via BlueZ requires enabling experimentals features in BlueZ
- New time smoother implementation
- Possibility to build the daemon without the client parts
- git shortlog
Notes for end users
Opus support in the RTP modules
The audio sent with module-rtp-send can now be compressed with the Opus codec. To use it, pass enable_opus=true
as a module argument to module-rtp-send. This feature works only when PulseAudio is compiled with GStreamer enabled (both sending and receiving end).
Stereo output support for EPOS/Sennheiser GSP 670 USB/wireless headset and SteelSeries GameDAC
The EPOS/Sennheiser GSP 670 headset has separate mono and stereo output ALSA devices, but with the default configuration only mono worked with PulseAudio. Now both outputs work. The support includes both direct USB connection and the GSA 70 wireless dongle.
The same fix was applied to SteelSeries GameDAC.
Fix input issues for Texas Instruments PCM2902 based sound cards
Texas Instruments PCM2902 is a generic audio chip that is used in multiple USB sound cards. We had custom configuration for Behringer UMC22, which turned out to affect multiple sound cards because they use the same USB ID. The PCM2902 sound cards vary in their capabilities, while our configuration was tailored only for the UMC22 card, which caused some trouble with recording on multiple PCM2902 sound cards. The reported issues have now been fixed.
Native Instruments Komplete Audio 6 MK2 profiles
The Native Instruments Komplete Audio 6 MK2 is similar to the Komplete Audio 6 and is now supported as well.
Tunnel latency is now configurable
The tunnel sink and source modules used to have a fixed 250 ms latency. The desired latency can now be configured with the latency_msec
module argument.
Tunnel modules can now reconnect to remote server
A new reconnect_interval_ms argument was added to all four tunnel sink and source modules. When the argument is specified, the tunnel module will try automatic re-connection to the remote server if the connection fails. The argument specifies the time interval in ms after which a connection attempt is repeated. In particular, this allows to load tunnel sinks and sources from default.pa which will become available as soon as the remote server becomes available.
Bluetooth device battery level reporting added
If a bluetooth device supports battery level reporting, PulseAudio now is able to forward the information to other software. In case your desktop environment doesn't yet support showing the battery level in a nice GUI, the level is also available in the device's card object properties with the bluetooth.battery
key. The property can be read with pactl list cards
, for example.
Tunnel and combine-sink latency fixes
The tunnel and combine-sink latency reporting accuracy has been improved, which should help with audio synchronization issues.
module-loopback improvements
As part of a set of improvements to module-loopback's latency stability, a new argument, adjust_threshold_usec
, was added to module-loopback to fine-tune the controller algorithm. The default value is 250 (microseconds), which should be sufficient in most cases. If it's not enough (caused by inaccurate latency reports from the sink or source), the loopback's sample rate will oscillate, while unnecessarily high values will increase variance in the loopback latency.
Another change is the ability to set the adjust_time
argument to smaller values than 1 second, for example 0.5
sets the adjustment interval to half a second. The default value was changed from 10 seconds to 1 second to make the latency control tighter.
module-loopback used to log a bunch of status information every time it adjusted the playback rate. Now that the default adjustment interval is down from 10 seconds to 1 second, the logging became a bit too much, and the logging was disabled by default. It can now be enabled by setting the log_interval
module argument. The value is given in seconds, it doesn't have to be an integer. The logging still happens at the time the rate adjustment is done, so if log_interval
is less than adjust_time
, then the logging will happen once per adjustment cycle.
Increased flexibility for module-jackdbus-detect
module-jackdbus-detect is used for loading a JACK sink and source when JACK starts up. The module now has new sink_enabled
and source_enabled
arguments that accept boolean values. The new arguments can be used to disable either the sink or the source if loading both is not desired.
module-jackdbus-detect can now also be loaded more than once, allowing multiple JACK sinks or sources with different configurations to be created.
pactl can show information in JSON format
pactl has a new option --format
, which accepts values text
and json
. text
shows the pactl output in the traditional way, json
shows it in the JSON format for easier interfacing with other software.
Channel remixing can be disabled for module-combine-sink
module-combine-sink now accepts a boolean remix
argument, which can be used to disable normal remixing. This is useful when combining multiple sound cards for surround output: if there are 3 stereo sound cards, you might want to set the channel map of one card to front-left,front-right
, another to rear-left,rear-right
and the third to front-center,lfe
. If a combine sink is then created with a 5.1 surround channel map using these sound cards as slaves, audio is copied to all these sound cards, but by default the audio is downmixed to stereo for each card, which doesn't result in proper surround audio. By disabling remixing, no downmixing is done, the channels that don't fit the slave channel map are just dropped, which means that each sound card gets audio only for the intended channels.
Notes for application developers
Stream latency reports now include resampler delay
Sink input and source output latency reporting now includes resampler delay. This delay is bundled into the sink and source latency, respectively. While this is minor semantic change, it should allow for more accurate A/V sync for applications.
Bluetooth device battery level reporting added
If a bluetooth device supports battery level reporting, the level is now reported to BlueZ. Applications can get the battery level using the BlueZ D-Bus Battery API.
The battery level is also available in the device's card object properties with the bluetooth.battery
key. There are no notifications when the property value changes, however (bug reported: #1314).
Notes for packagers
Module installation location changed, remember to upgrade paprefs to the latest version!
Modules are now installed to $libdir/pulseaudio/modules
, previously they were installed to $libdir/pulse-$version/modules
. paprefs has some logic that is sensitive to the module installation path, so if you ship paprefs in your distribution, make sure to upgrade paprefs to version 1.2. Earlier paprefs versions won't work properly with PulseAudio 16.0.
Opus support in the RTP modules requires enabling GStreamer
The new Opus compression is available only when PulseAudio is built with the gstreamer
Meson option enabled (previously it was disabled by default, now it's automatically enabled if the necessary dependencies are found).
Bluetooth battery level reporting via BlueZ requires enabling experimentals features in BlueZ
The Battery API is still marked as an experimental feature in BlueZ, and if you wish to have PulseAudio use it, bluetoothd has to be started with the --experimental
command line argument.
New time smoother implementation
There's a new algorithm for keeping latency stable during adaptive resampling in module-loopback and elsewhere. Part of that is a new "time smoother" implementation. It will deliver more accurate and stable latency estimations compared to the current algorithm. This is mainly important where a fixed relationship between different streams is required (A/V sync, module-loopback, module-combine-sink, module-echo cancel, ...). Since this is a fair bit of complex new code in the core audio processing parts, the old implementation is kept around for a while to have a backup in case bugs show up. The new time smoother can be disabled with the enable-smoother-2=false
Meson option.
Possibility to build the daemon without the client parts
It's now possible to build the daemon without building the client parts at the same time, by using the -Dclient=false
Meson option. The daemon will still need the client libraries during the build, the libraries installed in the system will be used. Apparently this kind of scheme is useful for Gentoo.
git shortlog
Alexey Rubtsov (1): Translated using Weblate (Russian) Anders Jonsson (3): Translated using Weblate (Swedish) Translated using Weblate (Swedish) Translated using Weblate (Swedish) Andika Triwidada (3): Translated using Weblate (Indonesian) Translated using Weblate (Indonesian) Translated using Weblate (Indonesian) Arun Raghavan (5): combine-sink: Set origin_sink for each output stream tests: Add passthrough test back to daemon tests build-sys: Bump libpulse soversion for 16.0 Update NEWS for 16.0 build-sys: Bump soversion for 16.0 release Biswapriyo Nath (2): Fix pointer to integer cast warnings Install modules in bindir for Windows BtbN (1): channelmap: make channel map tables static Chengyi Zhao (2): alsa-mixer: Recognize rear mic jack mixer of USB audio bluetooth: Try to reconnect SCO Chupligin Sergey (1): Fix spelling of warning Craig Howard (5): tunnel-sink-new: refactor sink creation tunnel-sink-new: create sink *after* connection tunnel-sink-new: reinit module tunnel-source-new: add restart/reconnect logic module-tunnel: restart module Daniel Dantur (1): Translated using Weblate (Spanish) Daniel Hernandez (1): Translated using Weblate (Spanish) Diederik de Haas (1): conf: Note configuration snippets must end in .pa Dylan Van Assche (1): Update NEWS for 16.0 Emilio Herrera (1): Translated using Weblate (Spanish) Ettore Atalan (1): Translated using Weblate (German) Fran Diéguez (1): Translated using Weblate (Galician) Georg Chini (43): combine-sink: Fix latency calculations combine-sink: Add rate controller combine-sink: Improve initial latency reports combine-sink: Use configured resampler, reduce update time to 1s tunnel: Fix latency calculations tunnel: Make fixed latency configurable sink-input: Add history memblockq resampler: Add pa_resampler_prepare() and pa_resampler_get_delay() functions sink-input: Implement resampler pseudo rewinding sink-input: Change move logic source-output: Fix rewinding virtual sources: Include resampler delay in latency reports loopback: Add resampler delay to latency snapshots sink-input: Limit rewinding to max_rewind for virtual sinks sink-input: Query sink inputs for max_rewind value when setting max_rewind tests: Add resampler rewind test pulsecore: Add alternative time smoother implementation Add configuration option enable-smoother-2 to enable alternative smoother code alsa sink/source: Allow alsa to use alternative smoother code bluetooth: Allow bluetooth to use alternative smoother code stream: Allow stream.c to use alternative smoother code combine-sink: Allow module-combine-sink to use alternative smoother code tunnel: Allow module-tunnel to use alternative smoother code esound-sink: Allow module-esound-sink to use alternative smoother code raop-sink: Allow module-raop-sink to use alternative smoother code solaris: Allow module-solaris to use alternative smoother code loopback: Do not detect underruns during initial latency adjustments loopback: Limit controller step size to 2.01‰ loopback: Optimize adaptive re-sampling loopback: Add latency prediction and Kalman filter loopback: Track prediction error; debug and cosmetic changes loopback: Add adjust_threshold_usec parameter loopback: Only use controller weight after target latency has been crossed twice loopback: Change adjust_time parameter to double to allow adjust times below 1s loopback: Add log_interval parameter module-tunnel-sink/source-new: Add PA_STREAM_ADJUST_LATENCY flag at stream creation time-smoother-2: Fix integer type problem tunnel modules: Fix threading issues tunnel modules: Fix crash when the module was unloaded while waiting for re-init module-tunnel: Improve latency calculation zeroconf-publish: Fix crash when avahi_client_new() fails various places: Include resampler delay to latency reports and calculations combine-sink: Fix latency reports Gogo Gogsi (4): Translated using Weblate (Croatian) Translated using Weblate (Croatian) Translated using Weblate (Croatian) Translated using Weblate (Croatian) Göran Uddeborg (3): Translated using Weblate (Swedish) Translated using Weblate (Swedish) Translated using Weblate (Swedish) Hela Basa (1): Translated using Weblate (Sinhala) Hui Wang (1): card-restore: setting preferred ports in entry_from_card Igor V. Kovalenko (35): alsa-mixer: Set mdev to NULL if there is no mapping rtp: Initialize adapter to NULL for early pipeline error build-sys: meson: Require xice, xsm and xtst for daemon only build-sys: meson: Check if cpuid.h header is usable alsa-mixer: Add EPOS/Sennheiser GSP 670 and GSA 70 bluetooth: Allow SCO socket packet size to be larger than mSBC frame mainloop-test: Disarm io callback on EOF alsa-mixer: add support for SteelSeries Arctis Pro + GameDAC combine-sink: Add remix modarg ladspa-sink: fix compiled in default LADSPA_PATH string socket-server: Move systemd socket activation code to pulsecore Fix expression with side effect in pa_assert thread-mainloop: Release once_unlocked_data object after callback bluetooth: Add missing breaks to profile availability check message-params: If message paremeters is not JSON, wrap into JSON string bluetooth: Release container with device UUID strings message-params: Remove unwanted translations from log statements x11: Close session manager connection on ICE I/O error callback null-sink: Recalculate max_request and max_rewind while resuming sink lirc: Fix module version bluetooth: Fix device->adapter dependency while releasing discovery build-sys: meson: change daemon-only to client build-sys: meson: Move remaining tests under daemon and client builds build-sys: meson: Rearrange dependencies under client and daemon options build-sys: meson: Rearrange shell completion between daemon and client build-sys: meson: Fix indentation in daemon/client blocks build-sys: meson: Make glib and fftw common dependencies thread-test: Increase test timeout bluetooth: Limit effective SBC bitpool of incoming bluetooth connection bluetooth: Make sure there is at least one SBC frame to encode module-suspend-on-idle: Allow suspending a sink when the monitor source becomes idle module-device-destore: Log restored port name pa-info: Handle configuration files from .d directories module-tunnel: Initialize `auto` param default value to false bluetooth: mSBC: Decode packets larger than mSBC frame Jan Kuparinen (6): Translated using Weblate (Finnish) Translated using Weblate (Finnish) Translated using Weblate (Finnish) Translated using Weblate (Finnish) Translated using Weblate (Finnish) Translated using Weblate (Finnish) Jaroslav Kysela (5): alsa: ucm - remove duplicate assignment alsa: ucm - fix h/w mute mixer control probe alsa: ucm - update the mixer path also after volume probe alsa: mixer - more clever alias cache implementation alsa: ucm - use possible mixer private device prefix for ELD controls Josef Haider (1): alsa-profiles: Add NI Komplete Audio 6 MK2 profiles João Paulo Rechi Vita (11): bluetooth: Keep a list of local adapters' UUIDs bluetooth: backend-native: Rename profile to object in register_profile* bluetooth: backend-native: Pass profile id in register_profile* bluetooth: Add mechanism to track profile's status bluetooth: backend-native: Keep track of profiles' status bluetooth: Create PA_BLUETOOTH_HOOK_ADAPTER_UUIDS_CHANGED bluetooth: backend-native: Handle RegisterProfile failure bluetooth: Consider adapter UUIDs when evaluating profile support bluetooth: Add debug logging to pa_bluetooth_device_supports_profile bluetooth: Do not create a card profile for unsupported profiles bluetooth: Add debug logging to profile creation Juho Hämäläinen (1): bluetooth: Only remove cards belonging to the device. Karl Ove Hufthammer (4): Translated using Weblate (Norwegian Nynorsk) Translated using Weblate (Norwegian Nynorsk) Translated using Weblate (Norwegian Nynorsk) Translated using Weblate (Norwegian Nynorsk) Laurent Bigonville (2): iochannel: Fix FTBFS on GNU/Hurd util: Fix getting the binary name for GNU/Hurd Luna Jernberg (4): Translated using Weblate (Swedish) Translated using Weblate (Swedish) Translated using Weblate (Swedish) Translated using Weblate (Swedish) Lv Genggeng (1): Translated using Weblate (Chinese (Simplified) (zh_CN)) Marijn Suijten (19): bt/bluez5-device: Update link to assigned Baseband numbers bluetooth/native: Signal support for dock status in XAPL reply bt/native: Answer AT command with ERROR if unhandled bt/native: Parse specified number of arguments in IPHONEACCEV bluetooth: Provide (HSP/HFP-received) battery level as device property bluetooth: Register as BlueZ experimental BatteryProvider1 bluetooth: Deregister battery provider when profile disconnects bluetooth/native: Accept and report battery HF indicator value daemon/cmdline: Invert log-level list to match numerical values bluetooth/native: Include util header for pa_msleep gitlab-ci: Bump Ubuntu image to 20.04 gitlab-ci: Turn on Werror for meson builds tests/mix-test: Don't pass unnecessary NULL fmt argument to fail_unless pulsecore/shm: Remove shm_marker struct packing for pa_atomic_t fields bluetooth/backend-native: Replace tab-indents with spaces bluetooth/gst: Use GStreamer synchronously within PA's IO thread bluetooth/gst: Replace buffer accumulation in adapter with direct pull bluetooth/gst: Timestamp encoding buffers according to PA clock bluetooth: Demote "No such property 'Volume'" error to warning Mart Raudsepp (2): build-sys: meson: Relax sanity checks for daemonless builds build-sys: meson: Allow building the daemon only Mathy Vanvoorden (2): jackdbus-detect: Make it possible to disable sink or source jackdbus-detect: Allow to configure multiple sinks/sources Olivier Gayot (1): pactl: fix invalid JSON output by overriding LC_NUMERIC Ovari (1): Translated using Weblate (Hungarian) Oğuz Ersen (6): Translated using Weblate (Turkish) Translated using Weblate (Turkish) Translated using Weblate (Turkish) Translated using Weblate (Turkish) Translated using Weblate (Turkish) Translated using Weblate (Turkish) Piotr Drąg (5): Translated using Weblate (Polish) Translated using Weblate (Polish) Translated using Weblate (Polish) Translated using Weblate (Polish) Translated using Weblate (Polish) Rafael Fontenelle (1): Translated using Weblate (Portuguese (Brazil)) Rico Tzschichholz (1): vala: Couple of libpulse binding fixes Sanchayan Maity (3): rtp: Enable support for OPUS bluetooth: ldac: Fix RTP payloading of encoded packet bluetooth: Rename rtp_sbc_payload to rtp_payload Sebastian Reichel (1): bluetooth: backend-native: add battery level reporting Sergey A (4): Translated using Weblate (Russian) Translated using Weblate (Russian) Translated using Weblate (Russian) Translated using Weblate (Russian) Sibo Dong (1): shell-completion: bash: Localize word variable Sungjoon Moon (2): Translated using Weblate (Korean) Translated using Weblate (Korean) Takashi Sakamoto (1): Revert "udev: use ID_MODEL/ID_VENDOR to give friendly name for FireWire devices" Takuro Onoue (1): Translated using Weblate (Japanese) Tanu Kaskinen (8): build-sys: Remove version number from the module path i18n: Update .pot and .po files i18n: Update .pot and .po files alsa-mixer: Improve documentation in texas-instruments-pcm2902.conf i18n: Update .pot and .po files meson: Enable GStreamer-based RTP by default (when available) alsa-mixer: Add analog-input path to TI PCM2902 mappings i18n: Update .pot and .po files Temuri Doghonadze (1): Added translation using Weblate (Georgian) Will Thompson (2): CONTRIBUTING.md: fix typo CONTRIBUTING.md: fix another typo Yuri Chornoivan (5): Translated using Weblate (Ukrainian) Translated using Weblate (Ukrainian) Translated using Weblate (Ukrainian) Translated using Weblate (Ukrainian) Translated using Weblate (Ukrainian) acheronfail (1): pactl: add format flag for JSON output baek inchan (1): Translated using Weblate (Korean) guest271314 (1): pacat: Include the special default device names in documentation liaohanqin (1): pactl: optimized code simmon (5): Translated using Weblate (Korean) Translated using Weblate (Korean) Translated using Weblate (Korean) Translated using Weblate (Korean) Translated using Weblate (Korean) simple (2): alsa-mixer: Fix mono input for Texas Instruments PCM2902 alsa-mixer: Rename behringer-umc22.conf to texas-instruments-pcm2902.conf tensorknower69 (1): fix a single typo in pulse-client.conf.5.xml.in 김인수 (1): Translated using Weblate (Korean)