Home | About | Community | Download | Documentation | Planet |
PulseAudio 15.0 release notes
- Notes for end users
- Support for LDAC and AptX bluetooth codecs, plus "SBC XQ" (SBC with higher-quality parameters)
- Support for HFP bluetooth profiles
- Support for Bluetooth A2DP AVRCP Absolute Volume
- ALSA path configuration files can now be placed in user home directory
- module-virtual-surround-sink rewritten
- More options for module-jackdbus-detect
- Improved hardware support
- New udev variable: PULSE_MODARGS
- max_latency_msec argument added to module-null-source
- module-filter-apply can take filter parameters from device properties
- module-match can now be loaded multiple times
- Improvements to FreeBSD support
- Windows support added to Meson
- Additional commands for pactl
- Card profiles can be set to sticky
- Notes for application developers
- Notes for packagers
- Autotools build system have been dropped
- The startup script can now read additional configuration from the /etc/pulse/default.pa.d/ directory
- Option to build client library and utilities only
- Avoid loading X11 modules on Wayland (GNOME-only for now)
- OSS support is now configurable in Meson
- Valgrind support is now configurable in Meson
- git shortlog
Notes for end users
Support for LDAC and AptX bluetooth codecs, plus "SBC XQ" (SBC with higher-quality parameters)
PulseAudio now supports the LDAC and AptX codecs for A2DP. In order to use them, the device has to support the codecs too. Also "XQ" configuration variants for the old SBC codec are available. The SBC XQ variants have a fixed (and higher than the "normal" SBC) bitrate, so they may have more drop-outs if the wireless connection is bad, but on the other hand the quality is always good if the connection is good. For variable bitrate, pulseaudio is now able to increase the bitrate again after it was reduced due to connectivity issues.
Switching the codec can be done on the command line with pactl send-message /card/bluez_card.XX_XX_XX_XX_XX_XX/bluez switch-codec '"CODEC"'
(note the double quotes inside single quotes, this is needed because the server expects the double quotes and without the single quotes the shell would remove the double quotes before the string gets sent to the server). Replace XX_XX_XX_XX_XX_XX
with the device address, which can be found for example with LANG=C pactl list cards | grep Name
. Replace CODEC
with one of the available codec names: aptx
, aptx_hd
, ldac_hq
("High Quality"), ldac_sq
("Standard Quality"), ldac_mq
("Mobile Quality"), sbc
, sbc_xq_453
, sbc_xq_512
, sbc_xq_552
. A list of codecs supported by the device can be obtained with pactl send-message /card/bluez_card.XX_XX_XX_XX_XX_XX/bluez list-codecs
and the currently active codec can be queried with pactl send-message /card/bluez_card.XX_XX_XX_XX_XX_XX/bluez get-codec
. A simplified way of switching codecs is already implemented in pavucontrol and will be provided with the next pavucontrol release.
Support for HFP bluetooth profiles
Native support for HFP AG role has been added. The native backend has become the default backend for HSP/HFP. Support for ofono is still available when setting the backend parameter to auto
or ofono
. The native backend currently only implements the HFP AG role, but not the HFP HS role, therefore ofono is still required for this role. Additionally, support for mSBC has been implemented to improve voice quality.
Support for Bluetooth A2DP AVRCP Absolute Volume
AVRCP Absolute Volume allows PulseAudio to control the volume of the connected A2DP device (when playing to it) or for a connected device to control volume in PulseAudio (when the device plays to PulseAudio). Previously when playing to e.g. a headset, PulseAudio did its own volume control in software, and the headset did its own volume in hardware. Having two levels of volumes sometimes made it difficult to get high enough volume, now there's only one level of volume control.
This feature can be disabled by passing avrcp_absolute_volume=false
to module-bluetooth-discover in the default.pa
configuration file.
ALSA path configuration files can now be placed in user home directory
The code that loads the ALSA path configuration files now checks if the files exist in the directories specified with the XDG_DATA_HOME
or XDG_DATA_DIRS
environment variables (under pulseaudio/alsa-mixer/paths
subdirectory). Those environment variables are defined by the XDG Base Directory Spec, and even if those environment variables aren't set, the XDG Base Directory Spec defines default locations that PulseAudio uses. In particular, in the usual case where XDG_DATA_HOME
isn't set, the default value is $HOME/.local/share
, so PulseAudio will look for path configuration files from that directory under the user's home. This is useful when it's necessary to customize the path configuration files. Previously the files in /usr/share/pulseaudio/alsa-mixer/paths
had to be modified, and the modifications were lost whenever upgrading PulseAudio.
module-virtual-surround-sink rewritten
The convolution processing code has been rewritten to use a blocked FFT function, supporting potentially much larger impulse responses. Existing impulses will continue to function with the rewrite. The filter optionally supports asymmetrical responses, which may be enabled by specifying two sets of impulse files, using the hrir_left
and hrir_right
options instead of the original hrir
option. Impulses should be matching format and channel layouts. The channel layout of the actual audio input for processing may be specified using the channel_map
setting, so long as all specified channels are present in one or both impulses.
More options for module-jackdbus-detect
module-jackdbus-detect automatically loads a JACK sink and source when JACK starts. It's now possible to better configure the parameters of the sink and source. module-jackdbus-detect accepts these new arguments:
sink_name
- Name for the JACK sinksource_name
- Name for the JACK sourcesink_properties
- Additional properties to set on the JACK sinksink_channel_map
- Channel map for the JACK sinksource_channel_map
- Channel map for the JACK sourcesource_properties
- Additional properties to set on the JACK sourcesink_client_name
- The name that the JACK sink uses when it registers a client with JACKsource_client_name
- The name that the JACK source uses when it registers a client with JACK
Improved hardware support
SteelSeries Arctis 9
The same custom configuration that is used with several other USB gaming headsets is now applied to SteelSeries Arctis 9, which makes the device much more functional.
HP Thunderbolt Dock 120W G2
HP Thunderbolt Dock 120W G2 has a 3.5 mm headset connector, and there's a separate audio module sold for the dock that provides speakerphone functionality (integrated microphone and speaker with echo cancellation). PulseAudio now has configuration that improves the device descriptions shown to the user and marks the speakerphone as a preferred device for voice audio.
Behringer U-Phoria UMC22
Behringer U-Phoria UMC22 has two mono microphone inputs, which show up as a single stereo device in ALSA. PulseAudio now has custom configuration for this sound card, allowing the user to select a profile that enables only one or the other of the channels. That way recording applications don't end up recording a stereo track that has audio only on one channel.
OnePlus Type-C Bullets
OnePlus Type-C Bullets is a simple USB-C headset device. It works with the default configuration too, but custom configuration was added to hide card profiles that don't make sense (for example, HDMI showed up as a supported profile with the default configuration).
Sennheiser GSX 1000/1200 PRO
Sennheiser GSX 1000 and 1200 PRO are USB DACs designed for gaming. They have a separate mono output for voice audio, and they also provide a virtual surround device that downmixes 7.1 surround audio to headphones in hardware. Custom configuration was added to expose these devices properly.
New udev variable: PULSE_MODARGS
It's now possible to set module-alsa-card module arguments via udev configuration by using the PULSE_MODARGS variable. This allows for example setting tsched=false
for a particular sound card that has trouble with the timer-based scheduling. Previously the options were to pass the tsched option to module-udev-detect in default.pa, causing all sound cards to be affected, or to give up automatic sound card detection and hotplug support altogether and configure each sound card manually in default.pa.
max_latency_msec argument added to module-null-source
It's now possible to configure the upper limit for latency of module-null-source with the max_latency_msec
module argument.
module-filter-apply can take filter parameters from device properties
module-filter-apply automatically loads a filter module when a stream wants to be filtered (i.e. has the filter.want
property). Previously additional filter module arguments could be provided by the stream in the filter.apply.<filter>.paramaters
property, now it's possible to set filter.apply.<filter>.parameters
also in the hardware sink/source properties, so a stream can simply request a filter without specifying the parameters, and the hardware device can set the (possibly hardware specific) parameters.
module-match can now be loaded multiple times
The original expectation was that there wouldn't be need for loading module-match multiple times, so it was marked as a module that isn't meant to (and can't) be loaded multiple times. However, it turned out to be useful to match against different properties with different configuration files, so the module can now be loaded multiple times.
Improvements to FreeBSD support
Several patches from FreeBSD have been upstreamed. Unplugging sound cards should behave better now, devices have better descriptions, hotplugging devices is now supported with module-devd-detect.
Windows support added to Meson
PulseAudio's Meson build system was lagging behind the old Autotools build system when it came to building for Windows, now it should be possible to build PulseAudio for Windows with Meson using MinGW. There are also various fixes for Windows and PA can now be run as a service on Win32.
Additional commands for pactl
pactl now supports the following additional commands: get-default-{sink|source}
, get-{sink|source}-volume
and get-{sink|source}-mute
Card profiles can be set to sticky
Card profiles can be set to sticky using the command pactl send-message /card/<card name> set-profile-sticky 'true|false'
. The current status can be queried using pactl send-message /card/<card name> get-profile-sticky
. If a card profile is sticky, it will always be restored, even if the profile is unavailable. Also port availability changes on the card will not impact the profile choice. This is for example useful to set the card profile permanently to "off" for HDMI devices. Setting profiles to sticky is already implemented in pavucontrol and will be provided with the next pavucontrol release.
Notes for application developers
New API for sending messages from clients to PulseAudio objects
The new "message API" was added to facilitate easy communication between clients and pulseaudio objects. It's currently used for switching bluetooth codecs and setting card profiles to sticky. The message API is using JSON format to exchange information between pulseaudio objects and a client.
New mechanism for applications to disable shared memory on their connection to PulseAudio
If an application wants last bits of virtual memory, it can forcefully disable shared memory communication channels by setting the PA_PROP_CONTEXT_FORCE_DISABLE_SHM
boolean proplist value on the pa_context
object when connecting. The primary user would be Wine 32bit with 2Gb vmem limit.
Notes for packagers
Autotools build system have been dropped
As already announced in the 14.0 release notes, the support for autotools finally has been dropped. The meson build system has been improved significantly and is now the standard way to build pulseaudio.
The startup script can now read additional configuration from the /etc/pulse/default.pa.d/ directory
PulseAudio's startup script (default.pa for the normal per-user mode and system.pa for the system mode) defines the set of modules to load automatically on startup. At the end of the scripts there is now an include directive that loads files from /etc/pulse/default.pa.d/
or /etc/pulse/system.pa.d/
. This is primarily meant for distributions when they want to add some module to the configuration when installing a package: it's now easy to install a file containing the configuration for the installed package. Users can of course use this mechanism too if they prefer to add a module to the configuration without modifying the original startup script.
Option to build client library and utilities only
When PipeWire is used to replace PulseAudio, libpulse and PulseAudio utilities are still useful but the PulseAudio daemon is not needed. It's now possible to compile libpulse and the utilities without compiling the daemon. To do this, pass -Ddaemon=false
to Meson.
Avoid loading X11 modules on Wayland (GNOME-only for now)
PulseAudio traditionally loads a few X11 modules automatically on a graphical login via the /etc/xdg/autostart/pulseaudio.desktop
file. That's not really desirable on Wayland, because that will autostart XWayland even if it's not otherwise used. The pulseaudio.desktop
file now contains the line X-GNOME-HiddenUnderSystemd=true
, so when using GNOME and systemd the X11 modules aren't loaded this way any more. If GNOME is run under X11, there's a new systemd service called pulseaudio-x11
that handles loading the X11 modules.
This behaviour is not available on other desktop environments than GNOME, but now that it's implemented once, it should be pretty easy to develop a similar solution for other desktop environments as well.
OSS support is now configurable in Meson
The oss-output
Meson option can be used to explicitly enable or disable OSS support (previously, when using Meson instead of Autotools, OSS support was automatically enabled when the sys/soundcard.h
header was found).
Valgrind support is now configurable in Meson
The valgrind
Meson option can be used to explicitly enable or disable Valgrind support (previously Valgrind support was automatically enabled when the valgrind/memcheck.h
header was found).
git shortlog
Alexey Rubtsov (1): Translated using Weblate (Russian) Alper Nebi Yasak (1): alsa-ucm: Log about the correct path value when probing volumes Anders Jonsson (1): Translated using Weblate (Swedish) Arun Raghavan (13): proplist-util: Drop deprecated G_CONST_RETURN macro glib-mainloop: Drop deprecated g_get_current_time() usage stream-restore,device-restore: Avoid unaligned access mutex-posix: Fix error assignment for unlock() check doc: Add some contributor guidelines Update NEWS Update NEWS gitignore: Add install/ for local prefixed installs build-sys: Bump libpulse soversion build-sys: Fix a couple of meson warnings Update NEWS for 15.0 build-sys: Fix a warning related to gsettings and config data build-sys: Fix a warning related to avahi and config data Ben Buchwald (1): jackdbus-detect: Passthrough more arguments to sink and source Benjamin Valentin (1): alsa-mixer: disable has_dB if max_dB is negative Carlos Garnacho (3): daemon: Add "stop" argument to start-pulseaudio-x11 script daemon: Install start-pulseadio-x11 as a Xwayland-session.d script daemon: Rely on systemd unit file for X11 plugin initialization Carmen Bianca Bakker (2): Added translation using Weblate (Esperanto) Translated using Weblate (Esperanto) Christopher Arndt (1): Add port order metadata to JACK sink / source ports Christopher Snowhill (1): virtual-surround-sink: Use FFTW3 instead of naive approach David (2): Capitalize jack in module-jack-source.c Capitalize jack in module-jack-sink.c Dusan Kazik (1): Translated using Weblate (Slovak) Edward Lee (9): win32: Handle (WSA)EWOULDBLOCK as EAGAIN. win32: Fix (interim) esound paths in module-protocol-stub.c win32: Check WSAGetLastError() in pa_is_unix_socket_stale. win32: (Temporarily) Add sockaddr_un definition fromwin32: Add support for Unix sockets in autoconf build. win32: Change linkage of lt_preloaded_symbols to match definition in libtool in daemon/main.c. win32: Fix meson build system for Windows. Win32: Fix build issues. Win32: Use WAVEFORMATEX for multi-channel audio output on Windows. Emilio Herrera (1): Translated using Weblate (Spanish) Evan Miller (1): Fix a strict-prototypes warning Fabian Affolter (1): Translated using Weblate (German) Faidon Liambotis (2): tests: fix use of uninitialized variable cpu_info buildsys/autotools: add pulseaudio-x11.service.in Felipe Sateler (3): treewide: fix a bunch of typos Don't link libpulsecommon with GLib and GTK tests: fix json test for large numbers Frédéric Danis (1): core, modules: Remove useless EINTR tests Georg Chini (17): protocol-native: add message sending capability pactl, pacmd, cli-command: Add send-message command core: add message handler pactl: Implement list message-handlers message-params: Allow parameter strings to contain escaped curly braces core-util: Add pa_atoi64() and pa_atou64() functions message-params: Add read/write functions for various simple data types message-params: Add read functions for arrays message-params: Fix array reading functions loopback: Fix sink latency calculation if source is alsa source with fixed latency sink: Unlink monitor source before unlinking sink null-source: Change max_rewind when the latency changes source-output: Fix source-output volume after move of virtual source stream alsa-sink: Do not increase watermark when requested to rewind 0 bytes loopback: Fix crash bug stream-restore: Fix use of uninitialized variable null-sink: Request no more than the configured latency from sink-input Greg V (19): build-sys: meson: set HAVE_DLADDR even if it's in libc (FreeBSD), not libdl build-sys: meson: when libc iconv is used, tell libiconv header to pretend to be libc's iconv build-sys: meson: check for shm_open even if it's in libc (FreeBSD), not librt build-sys: meson: add missing pthread dependency on alsa tests padsp: fix build on FreeBSD (use same ioctl signature as glibc) raop: add missing netinet include on FreeBSD build-sys: meson: add execinfo dependency for FreeBSD build-sys: meson: support memfd without SYS_memfd_create (FreeBSD 13) iochannel: support credentials passing on FreeBSD pulsecore: remove ancient __FreeBSD_version < 600000 code util: implement pa_get_binary_name on FreeBSD without procfs requirement detect: fix/improve FreeBSD support oss: do not fall back to write() mode on FreeBSD oss: support 24-bit sample formats oss: support hot-unplug on FreeBSD oss: parse device names correctly on FreeBSD module-devd-detect: new module for soundcard hotplug on FreeBSD atomic-test: unbreak on FreeBSD (cpuset_t) build-sys: meson: only warn about lack of udev on Linux Göran Uddeborg (4): Translated using Weblate (Swedish) Translated using Weblate (Swedish) Translated using Weblate (Swedish) Translated using Weblate (Swedish) Hela Basa (1): Added translation using Weblate (Sinhala) Henri Chain (1): systemd: move to session slice Hui Wang (8): alsa-mixer: disable the Auto-Mute once the system has speaker switch-on-port-available: Switch to headset or mic on unknown avail alsa-card: add dynamic priority bonus base for alsa profiles switch-on-port-available: checking the off profile when switching profile alsa-mixer: increase the max number of HDMI/DP output device to 11 Revert "alsa-mixer: Set "Front" control to 0 dB on headphone path" alsa-mixer: only use switch to mute Front in the Headphone path alsa-sink/source: set volume to hw immediately if ucm_port changing Igor V. Kovalenko (88): pa-info: look for alsa-info.sh in /usr/sbin as well build-sys: meson: add oss-output option for OSS output support build-sys: meson: use target_machine.cpu_family() for CANONICAL_HOST message-params: add read length param reference to array read methods message-params: consume array enclosing {} by array read methods module-alsa-card: handle udev PULSE_MODARGS build-sys: meson: change oss-output boolean to Meson feature bluetooth: align max renderable block size to frame size context: add property to forcefully disable shared memory channels ladspa-sink: do not call pa_sink_suspend if PA_SINK_IS_LINKED is false x11: gracefully handle X11 connection error x11: gracefully handle ICE connection error daemon: fix default daemon.conf when running from build tree database: extract common method to handle machine id and architecture database: use existing database matching same architecture prefix database: drop arch from newly created database file name database: pick old database file from any arch database: clean up remaining references to CANONICAL_HOST alsa-mixer: add support for SteelSeries Arctis 9 buildsys: autotools: move map-file to src/pulse buildsys: meson: implement update-map-file target map-file: regenerate bluetooth: Make GStreamer threads realtime bluetooth: allow increasing output bitrate bluetooth: allow increasing SBC output bitrate bluetooth: pass output_rate_refresh_interval_ms module parameter bluetooth: a2dp dual channel SBC XQ codec configurations bluetooth: support increasing bitrate for SBC XQ build-sys: drop gconf support build-sys: meson: add tcp-wrappers build-sys: meson: support elogind alternative for module-systemd-login bluetooth: remove unwanted change from bluez fallback code bluetooth: enable module-bluez5-discover argument enable_native_hfp_hf bluetooth: fix headset=auto ofono handover bluetooth: prefer headset HFP HF connection with native backend bluetooth: complete bluetooth profile separation bluetooth: use device flag to prevent assertion failure during shutdown bluetooth: rename enable_hs_role to enable_shared_profiles bluetooth: clean up rfcomm_write usage bluetooth: fix typo checking if target codec is available bluetooth: correct rfcomm command and reply formatting build-sys: drop autotools build system build-sys: meson: fix meson dist version bluetooth: accept +VGM/+VGS unsolicited reply with '=' and ':' separator json: improve supported numbers json: add JSON encoder message-params: use JSON instead of custom format message-params: clean up bluetooth: update messaging api reference bluetooth: prioritize native backend HFP HF connection bluetooth: unify encoder code paths bluetooth: unify decoder code paths bluetooth: add CVSD codec implementation bluetooth: apply write MTU detection based on read packet size bluetooth: use helper to set multiple transport object attributes bluetooth: mSBC: ignore all-zero packets bluetooth: mSBC: ignore empty encoded frame bluetooth: prepare to redo transport writeout scheduling bluetooth: add mSBC to backend-ofono bluetooth: show negotiated HFP codec bluetooth: remember negotiated HFP codec in native backend bluetooth: produce silence on mSBC decoding error bluetooth: add more call indicators bluetooth: set initial packet size to 60 bluetooth: split BT codec from A2DP SEP configuration api bluetooth: add modarg to allow disabling mSBC codec bluetooth: mSBC: log lost input audio packets at debug level bluetooth: handle HFP codec list in any order bluetooth: disable HSP HS profile by default alsa-mixer: Allow selected fallback mappings in all profile sets build-sys: meson: allow building client libraries only build-sys: meson: do not install manpages for disabled parts bluetooth: adjust sync to source with different sample spec build-sys: meson: only require libltdl if daemon is built build-sys: meson: make doxygen optional alsa-mixer: Add support for usb audio in the Dell dock WD19 alsa-mixer: prevent double-free on decibel fixes object key build-sys: meson: restore big endian detection json: remove json from public API build-sys: meson: check HAVE_MMX and HAVE_SSE before calling initializers alsa-mixer: check if mapping is NULL before using it card: handle sticky profile flag doc: link to site documentation for IRC channels alsa-mixer: updated Sennheiser GSX 1200 device ID build-sys: meson: require GIO dependency for RTP-GStreamer build-sys: meson: Require bluez dependency if bluez5 feature is enabled module-gsettings: Handle I/O hangup alsa-ucm: fix persistent port names with alsa-lib >= 1.2.5 Ilja van Sprundel (1): webrtc: Avoid using dynamic strings as format strings Jaechul Lee (3): null-sink: Change block size to 50 msec when norewinds is set null-source: Add max_latency_msec argument null-source: Fix max_latency_msec argument is not changed James Bottomley (6): bluetooth: use consistent profile names bluetooth: separate HSP and HFP bluetooth: add correct HFP rfcomm negotiation bluetooth: make native the default backend bluetooth: add support for mSBC codec bluetooth: add wideband audio codec negotiation to HFP Jan Alexander Steffens (heftig) (1): build-sys: meson: Add missing include dir 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 (3): alsa: mixer - use safe dB range values when the override mask is unset alsa: mixer - add support up 8 mixer channels alsa: fix the plug: PCM device name creation Jason Nader (9): man: clarify pactl command arguments pactl: add `get_default_sink` command pactl: add `get-sink-volume` command pactl: add `get_default_source` command pactl: add `get_source_volume` command Apply 1 suggestion(s) to 1 file(s) Apply 1 suggestion(s) to 1 file(s) Apply 1 suggestion(s) to 1 file(s) Apply 3 suggestion(s) to 1 file(s) Johannes Wolf (1): alsa-profiles: Add NI Komplete Audio 6 profiles Julien Humbert (1): Translated using Weblate (French) Kai-Heng Feng (3): alsa-mixer: Add support for HP Thunderbolt Dock alsa-mixer: Handle the index for ALSA mixer jack identifiers alsa-mixer: Support dual Front Headphone Jack Karl Ove Hufthammer (2): Translated using Weblate (Norwegian Nynorsk) Translated using Weblate (Norwegian Nynorsk) Klaas van Schelven (1): pactl: add `get-(source|sink)-mute` commands Laurent Bigonville (2): tests: Fix incompatible pointer type on Debian kfreebsd iochannel: Fix FTBFS on Debian kfreebsd Laurențiu Nicola (1): alsa-mixer: Add OnePlus Bullets udev rule Lyndon Brown (1): proplist: tweak documentation for `pa_proplist_get()` Marijn Suijten (31): bluetooth/bluez5-util: Do not reply to ClearConfiguration bluetooth: Check support for encoding and decoding separately bluetooth: Add missing can_be_supported check to is_codec_available bluetooth/gst: Add assertions around element_add_pad and bin_add bluetooth/gst: Determine PA input/output caps in generic code bluetooth/aptx: Deduplicate caps setup for encoding and decoding bluetooth/aptx: Use capsfilter instead of appsink/appsrc "caps" prop bluetooth/gst: Move common enc/dec initialization back to generic init bluetooth: improve indentation around dbus_message_iter_open_container bluetooth: Unify BlueZ macro defines shared between util and native bluetooth: Consistently use BlueZ defines for strings treewide: Use DBus defines instead of direct string literals tests: Update ladspa-dbus to Python 3 bluetooth: Remove unused ts_elapsed variable bluetooth/aptx: Simplify lifetime of `caps` bluetooth/aptx: Call the non-HD encode_buffer function bluetooth/gst: Unify encoder and decoder pipeline setup bluetooth: switch_codec should start with pa_blueooth_device_ bluetooth: Move HSP gain conversions into backend-native bluetooth: backend-native: Round volume to closest instead of up bluetooth: Generalize speaker/microphone naming to sink/source bluetooth: Move attenuation decision to shared function bluetooth: Perform software attenuation until HF/HS reports gain control bluetooth: Set up hardware gain control if init volume is received late bluetooth: Only use hardware volume callbacks for peer attenuation bluetooth: Move HSP_MAX_GAIN to header for reuse in n_volume_steps bluetooth: Update source software volume on AVRCP SetAbsoluteVolume bluetooth: Synchronize AVRCP Absolute Volume with A2DP sink bluetooth: Report a2dp_source volume changes to the source device bluetooth: Delay A2DP Absolute Volume setup until property is available bluetooth: Add avrcp_absolute_volume module flag for disablement Martin Wilck (2): parecord: fix "Failed to open audio file" for FLAC and OGG parecord: really fix recording OGG Mattias Jernberg (1): alsa-mixer: Enable volume control of SteelSeries Arctis stereo output Milo Casagrande (2): Translated using Weblate (Italian) Translated using Weblate (Italian) Nazar Mokrynskyi (1): alsa-mixer: add mono input support for Behringer UMC22 Oğuz Ersen (2): Translated using Weblate (Turkish) Translated using Weblate (Turkish) Patrick Gaskin (16): cli: Fix crash when using .include with an empty directory waveout: Fix compile warnings client: Make auto_connect_localhost respect HAVE_IPv6 and OS_IS_WIN32 win32: Fix WSAStartup issues win32: Fix duplicate definitions in arpa-inet.h, arpa-inet.c, and poll.h win32: Use __MINGW_PRINTF_FORMAT instead of __printf__ for MinGW builds win32: Fix format specifiers for DWORD values win32: Fix privlibdir for running on Windows build-sys: meson: Merge system_conf config data from default_conf cli-command: Replace config dir with toplevel for .include on win32 win32: Use DACLs when setting socket permissions win32: Fix minimum Windows version for inet_{ntop,pton} win32: Fix environment variables set with pa_{unset,set}_env not taking effect win32: Misc Unix socket fixes daemon: Add support for running as a service on win32 win32: Add DACLs for directories created by system daemon Patrick McLean (1): alsa-mixer: add support for Sennheiser GSX 1000 gaming DAC Paul Seyfert (1): zsh-completion Add completion of sample names Pierre Ossman (1): tunnel-sink-new: log buffer events Piotr Drąg (5): i18n: Remove src/pulsecore/dllmain.c from POTFILES.in Translated using Weblate (Polish) Translated using Weblate (Polish) Translated using Weblate (Polish) Translated using Weblate (Polish) Pjotr Vertaalt (5): Translated using Weblate (Dutch) Translated using Weblate (Dutch) Translated using Weblate (Dutch) Translated using Weblate (Dutch) Translated using Weblate (Dutch) Ricky Tigg (5): Translated using Weblate (Finnish) Translated using Weblate (Finnish) Translated using Weblate (Finnish) Translated using Weblate (Finnish) Translated using Weblate (Finnish) Robin Lahtinen (1): Translated using Weblate (Finnish) Samuel Thibault (1): alsa-sink: increase watermark when there is nothing to rewind Sanchayan Maity (19): Add default.pa.d folder support module-match: Allow loading module more than once bluetooth: a2dp-codec-util: Use lower index for higher priority bluez5-util: Add support for using RegisterApplication D-Bus API bluetooth: Support A2DP codec switching via messaging API bluetooth: Add a generic GStreamer codec module bluetooth: Add LDAC support via GStreamer bluetooth: Add aptX support via GStreamer bluetooth: Add support for getting list of negotiated codecs bluetooth: Add currently active codec name to card/sink/source proplist bluetooth: Add support for getting current active codec bluetooth: Introduce a can_be_supported API for A2DP codecs bluetooth: Prevent registration of an unavailable codec at runtime bluetooth: Register an endpoint according to encode or decode support bluetooth: Move codec specific bits to their own respective files bluetooth: Fix unregistering of the message handler bluetooth: ldac: Use format as FLOAT32LE bluetooth: ldac: Fix missing check for RTP LDAC payloader element bluetooth: aptX: Improve error message for when aptX element is not found Scott Worley (1): gsettings: Emit glib logs on stderr, not stdout Sebastian Krzyszkowiak (1): filter-apply: Look for filter parameters also in device properties SimonP (1): alsa-mixer: Respect XDG base directory spec when loading path configs Takashi Sakamoto (1): udev: fix match expression to Focusrite Saffire Pro i/o series for ignorance Tanu Kaskinen (32): raop-sink: Don't set device.intended_roles=music mutex-posix: Log pthread_mutex_unlock() error main: set LC_NUMERIC to C alsa-mixer: Add support for the Center/LFE element alsa-mixer: Expand comments in the HP Thunderbolt Dock configuration core-util: Make range checks easier to read introspect: Add version check to pa_context_send_message_to_object() core-util: Reduce repetition in number parsing functions core-util: Never parse integers as octal core-util-test: Test parsing integer strings with leading zeros core-util-test: Drop "modargs" from test function names core-util-test: Test pa_atou64() and pa_atoi64() i18n: Update pulseaudio.pot module: Check version before loading a module build-sys: Add an option for enabling/disabling Valgrind pstream: Log "Cannot send block reference..." only once per pstream sink: Reduce chat sink priority alsa-mixer: Pick at most one fallback mapping sink: Increase JACK device priority alsa-mixer: Use unambiguous descriptions with dual headphone outputs alsa-mixer: Move HP EliteDesk 800 SFF/DM second headphone output to path analog-output-headphones-2 alsa-mixer: Add support for the Headphone,1 element i18n: Update pulseaudio.pot switch-on-port-available: Pass correct port_pointers to switch_to_port() Update NEWS alsa-mixer: Accept negative max_dB when using decibel fixes i18n: Update .pot and .po files i18n: Update .pot and .po files sink-input, source-output: Add hooks for preferred device changes stream-restore: Fix NULL preferred device handling i18n: Update .pot and .po files stream-restore: make version check stricter when dropping old entries Tobias Weise (1): Translated using Weblate (German) Toni Estevez (2): Translated using Weblate (Spanish) Translated using Weblate (Spanish) Yaron Shahrabani (6): Translated using Weblate (Hebrew) Translated using Weblate (Hebrew) Translated using Weblate (Hebrew) Translated using Weblate (Hebrew) Translated using Weblate (Hebrew) Translated using Weblate (Hebrew) Yuri Chornoivan (2): Translated using Weblate (Ukrainian) Translated using Weblate (Ukrainian) garrison (1): build-sys: meson: check if NEON code can be compiled on arm morrishoresh (1): bluetooth: correct possible segmentation fault pseyfert (1): fix handling of symbolic port names in zsh completion scootergrisen (3): Translated using Weblate (Danish) Translated using Weblate (Danish) Translated using Weblate (Danish) simmon (6): Translated using Weblate (Korean) Translated using Weblate (Korean) Translated using Weblate (Korean) Translated using Weblate (Korean) Translated using Weblate (Korean) Translated using Weblate (Korean)