PulseAudio 8.0 release notes
Changes at a glance
- Automatic routing more likely to change profile
- OS X and NetBSD support improvements
- Systemd journal logging for clients
- New LFE balance programming interface
- Module-dbus-protocol improvements
- More flexible configuration file handling
- pulsecore-8.0.so moved to a private directory
- New script for measuring memory consumption
- Various bug fixes and small improvements
Notes for end users
Automatic routing more likely to change profile
In case a sound card contains more than one profile (e g analog and HDMI profiles), module-switch-on-port-available will now switch away from the profile when no ports are available. E g, on a HTPC with headphones and HDMI outputs only, unplugging headphones will reroute the sound to HDMI, which did not work before. In addition, we also remember the last used profile for a port, so the expected HDMI profile is chosen (instead of just falling back to stereo).
Note that many systems have HDMI and analog output on separate sound cards, so this might not improve the situation for all systems.
OS X support improvements
Some improvements were made to PulseAudio's OS X support. The most notable change is that the default configuration should now work out-of-the-box, thanks to adding module-coreaudio-detect to the default configuration.
NetBSD support improvements
PulseAudio is available to NetBSD users through the pkgsrc framework. The pkgsrc version of PulseAudio has carried many patches, most of which have now been applied upstream, so the difference between the upstream and pkgsrc versions is now much smaller.
PULSE_LOG_JOURNAL environment variable
If the PULSE_LOG_JOURNAL environment variable is defined, all client libraries will log their output to the systemd journal. (If both PULSE_LOG_JOURNAL and PULSE_LOG_SYSLOG are defined, logging to the systemd journal takes a higher precedence.)
New script for measuring memory consumption
A new script was created for measuring, and plotting, the server memory consumption growth when the number of clients increases. The script's location is scripts/benchmark_memory_usage.sh in the source code tree, and it's meant to only be run from the source code tree.
Notes for application developers
New LFE balance programming interface
There's a new API for controlling the LFE (a.k.a. subwoofer) channel volume relative to all other (except mono and aux) channels.
Some background: the "native" volume representation in PulseAudio is to have independent volume for each channel, but some UIs may prefer to have one "overall volume" slider and two sliders for controlling the left-right and rear-front balances. There have always been helper functions for mapping the left-right and rear-front balances to per-channel volumes and vice versa. The LFE channel is not included in any of the conversions, however. To allow users to also control the LFE channel volume some UIs (at least the Gnome sound configuration tool) have added the LFE channel control as a separate slider, but in practice that had weird interactions with the overall volume slider.
To resolve this problem, we now have helper functions for controlling the balance between LFE and non-LFE channels, which allow changing the balance without affecting the overall volume. All applications that present the left-right and rear-front balances to the user are advised to start using the new API for dealing with the LFE volume.
The new functions are
Port and card profile availability is now visible through the D-Bus API.
Notes for packagers
More flexible configuration file handling
The configuration files /etc/pulse/client.conf and /etc/pulse/daemon.conf can now be amended by creating files under /etc/pulse/client.conf.d and /etc/pulse/deamon.conf.d. This makes it easier for distributions to handle a situation where some configuration option should be set differently if a particular package is installed. Options set in the files installed in the .d directories override the options set in the main files.
pulsecore-8.0.so moved to a private directory
pulsecore-X.Y.so used to be installed in the top level /usr/lib directory, but that was not a good place for it, since it's an internal library not meant for applications. The library is now installed under /usr/lib/pulseaudio.
Ahmed S. Darwish (5): log: Introduce PULSE_LOG_JOURNAL environment variable log: Fix compilation error on non-systemd systems build-sys: bootstrap.sh: Do a make only if configure has succeeded scripts: Introduce benchmark_memory_usage.sh scripts: Plot memory benchmarks using gnuplot Alexander E. Patrakov (1): alsa-sink: Don't pretend to support passthrough on HDMI surround sinks Andrey Semashev (1): soxr: Use soxr_clear() if libsoxr version is 0.1.2 or later. Arun Raghavan (15): resampler: Don't expose soxr methods if they are not supported tests: Set appropriate timeouts for a couple of tests build: Add IRC notifications to Travis sink: Make early drain reporting propagate down to filters source: Deal with filter having more channels than the master alsa: Use helper function for byte conversion across sample specs tests: Make echo-cancel-test not crash echo-cancel: Don't skip canceller when sink is inactive build: Move to using Travis trusty images daemon: Sanitise message about unsupported high res timers alsa: Don't disable timer-based scheduling on USB devices sink-input, source-output: Add some debug output on start_move() stream: Clarify pa_stream_writable_size() documentation build-sys: Use #ifdef with HAVE_FAST_64BIT_OPERATIONS Update NEWS for 8.0 David Henningsson (23): alsa-mixer: Add "Mic Boost" and "Line Boost" to analog-input.conf client: Use pa_xnew0 when creating a client card: Use pa_xnew0 when creating a card shm: Warn on not being able to open shm files card: Use pa_xmalloc0 when creating card profiles module-alsa-card: Report available ports before unavailable ones pstream: Fix use-after-free in srb_callback alsa-mixer: Ignore volume with unexpected number of channels volume: Refactor get/set balance/fade volume: Add LFE balance API alsa-mixer: Add "Front Headphone" to headset mic path alsa-mixer: Return early in case of no mixer poll descriptors card: Add variables for splitting up a profile alsa-mixer: Fill in input and output names device-port: Add preferred_profile field to pa_device_port card: Update preferred_profile for ports when profile changes card-restore: Save and restore "preferred profile" of port module-switch-on-port-available: Use input and output names module-switch-on-port-available: Route to preferred profile module-card-restore: Remove "version" from internal entry struct card: Only update port's preferred profile if profile is saved typedefs.h: Move some typedefs to a separate file gitignore: Add .orig and .rej to gitignore Deepak Srivastava (1): Rename functions with "tostring" in the name to one with "to_string" to conform with the convention. Felipe Sateler (5): daemon: Use Type=notify for systemd service pulseaudio.1: document that systemd notification only works without daemonization build-sys: Make pulsecore a private library travis: Run make install in travis. build-sys: Fix install order of libpulsecore Georg Chini (2): null-sink: correct update of timestamp when state changes to RUNNING or IDLE loopback: Validate the rate parameter Jason Gerecke (1): bluetooth: Prevent aborts caused by invalid module arguments John Horan (1): make availability of ports visible over dbus Juho Hämäläinen (2): dbus: Add card profile availability info to API alsa-mixer: Have valid proplist for synthesized path as well. Julien Isorce (2): core-util: avoid calling fchmod if already right mode thread-mainloop: keep SIGSYS unblocked if currently trapped Kamil Rytarowski (7): netbsd: NetBSD ships with paccept(2) a superset of Linux-specific accept4() netbsd: Improve handling of
and headers netbsd: Fix unportable test(1) construct core-rtclock: Add missing declaration of struct timespec core, pulse, modules: Fix undefined behavior with array subscript of invalid type netbsd: Revamp NetBSD platform checks NetBSD: Stop depending upon nonstandard __WORDSIZE KimJeongYeon (1): module-tunnel: Fix double free Kiran Krishnappa (1): module: Remove redundant core argument from pa_module_unload() Lev Melnikovsky (1): rtp: fix non null terminated string / non portable sscanf Manish Sogi (1): bluetooth: bluez4: Remove the unused "auto_connect" parameter as it is not used in bluez4 Mihai Moldovan (4): configure.ac: add HAVE_COREAUDIO to automake and code. default.pa.in: load module-coreaudio-detect if HAVE_COREAUDIO. system.pa.in: load module-coreaudio-detect if HAVE_COREAUDIO. module-coreaudio-device: get channel name as CFString and convert to plain C string. Mingye Wang (Arthur2e5) (1): i18n: Updated zh_CN translation Nazar Mokrynskyi (1): alsa-mixer: sb-omni-surround-5.1.conf: remove analog-surround-21, add Linux 4.3+ support Peter Mattern (1): pacmd: Fix typo in set-default-* help Peter Meerwald (1): core: Fallbacks for machine-id in filesystem Pierre Ossman (1): context: continue without srbchannel if it fails Ross Burton (1): git-version-gen: Avoid further processing when tarball-version is present Shawn Walker (1): build-sys: don't use the nodelete linker flag on executables Takashi Iwai (1): alsa-mixer: Recognize "Dock Line Out" jack Tanu Kaskinen (12): alsa-mixer: Add "Dock Line Out" jack handling to analog-output-speaker-always build-sys: fix the default bash completion directory alsa-ucm: fix pa_device_port.profiles leak man: document when system.pa is used instead of default.pa man: remove a reference to pacmd from default.pa.5 core-util: improve comments in pa_machine_id() build-sys: fix PULSE_LOCALEDIR definition conf-parser: add support for .d directories client-conf, daemon-conf: enable .d directories always-sink: simplify hook management with pa_module_hook_connect() build-sys: bump sonames build-sys: add typedefs.h to libpulsecore SOURCES Thomas Petazzoni (1): pulsecore/packet: avoid redefinition of pa_packet structure Yuri Chornoivan (1): i18n: Update Ukrainian translation Zbigniew Kempczyński (1): alsa-sink: Avoid unloading alsa-sink module before calling try_recover() jungsup lee (1): rtpoll: Fix build error when building with DEBUG_TIMING