PulseAudio 3.0 Release Notes

We're, back with another shiny PulseAudio release! While the 3.0 release was a little delayed, it brings a number of important improvements, and bug fixes. A summary of changes follows.

Notable Changes

ALSA Use Case Manager (UCM) support

Runtime editable LADSPA filter parameters

Out-of-the-box support for Bluetooth sources

ARM NEON optimisations

Configurable device latency offset

Adhere to the XDG Base Directory Specification

Various ALSA changes

Lots of infrastructure improvements

Packaging

Bluetooth support requires now "sbc", a library for the SBC codec. The codec used to be included within PulseAudio, but it has now been split off into a separate library. It's available at http://www.bluez.org.

Support for the "socket API" of BlueZ has been dropped in favour of the D-Bus based "media API". Due to this change, the minimum supported version of BlueZ is now 4.99. Also, make sure that you don't have "Disable=Media" in /etc/bluetooth/audio.conf. And due to a bug in BlueZ, it's probably necessary to have "Disable=Socket", otherwise there will be problems with the A2DP profile.

Support for HAL has been removed. This shouldn't affect anyone, but if it does, please configure PulseAudio to use udev instead. module-hal-detect still exists for maintaining configuration file compatibility, but all it does is to load module-udev-detect. module-hal-detect may get completely removed in 4.0.

Changes in More Detail

ALSA Use Case Manager (UCM) Support

The audio hardware on desktop and laptop computers is usually standard enough for PulseAudio to handle using a common set of configuration files. The situation is different on e.g. phones and tablets. Practically all of those devices need separate configuration files for describing the hardware so that PulseAudio can properly use all basic features of the hardware. The configuration could be shipped as PulseAudio configuration files, but the ALSA folks have been working on a system that allows applications (such as PulseAudio) to use the hardware without needing any extra configuration in the application. The system is called UCM, and PulseAudio now has support for it.

Runtime Editable LADSPA Filter Parameters

The LADSPA module now exposes a basic D-Bus interface for changing the filter parameters on the fly. Previously the parameters could not be changed after loading the filter.

Out-of-the-box support for Bluetooth sources

PulseAudio can be used in a Bluetooth headset role, for example to connect a laptop to a mobile phone and pretend that the laptop is a headset. It's often desirable in that case to loop back the audio from the phone to the laptop's sound card. That is now done automatically by module-bluetooth-policy, which is loaded by default. Users do need to enable Source support in their BlueZ configuration, though.

ARM NEON optimisations

Optimisations were added for sample format conversion between S16LE and floating point formats using the ARM NEON instructions. Support for these is detected at compile-time (based on FPU flags) as well as run-time (based on /proc/cpuinfo). As part of this effort, the groundwork has been laid for adding more NEON optimisations in the future.

Configurable Device Latency Offset

Accurate latency reporting is important for e.g. "lip sync" in video playback. PulseAudio relies on the audio hardware to provide accurate information about the audio delay. If that information is not accurate for some reason, it is now possible to configure an offset to be applied to each latency report, thanks to Damir Jelić's Google Summer of Code work. For example, if you're watching a video and you use a Bluetooth headset for audio output, the lip sync might be a bit off, because PulseAudio doesn't currently have proper support for querying the latency for Bluetooth devices. With the upcoming version of pavucontrol, you will be able to fix the synchronization problem by adjusting the latency offset of the Bluetooth headset.

Adhere to the XDG Base Directory Specification

The location of configuration files has been moved from ~/.pulse to ~/.config/pulse (or if $XDG_CONFIG_HOME is set, then use that). If ~/.pulse exists, however, it will still be used so that the user configuration is not lost when updating PulseAudio. The authentication cookie has also been moved from ~/.pulse-cookie to ~/.config/pulse/cookie.

The location of runtime files (i.e. files that don't need to be kept across reboots, e.g. sockets) has been moved from a random directory under /tmp to $XDG_RUNTIME_DIR/pulse. In case $XDG_RUNTIME_DIR is not set, the old scheme is still used as a fallback.

Various ALSA Changes

A regression in 2.0, that could cause some machines not to have "Speaker" or "Internal Mic" ports, has been mostly fixed in 3.0 - when used together with Linux 3.6 or higher. Also, a workaround for older kernels is applied to certain most common machines.

Pierre-Louis Bossart introduced a change to improve accuracy of timestamp queries, and thus timer-based scheduling, by querying a number of ALSA timing parameters atomically.

We have added icon name property to ALSA ports, which could help UI makers to display better per-port icons.

Also, there has been a few other changes, such as removing the troublesome lfe-on-mono port, and adding more mixer control names to better stay in sync with the kernel.

Improvements for Automatic Testing

Deng Zhengrong improved PulseAudio's automatic testing support as part of his Google Summer of Code work. The improvements include support for test coverage reporting with gcov, changing the existing tests to use the "check" framework, and making it possible to launch a PulseAudio daemon for testing purposes while simultaneously having the normal daemon running.

Unloading Modules by Name

pactl and pacmd now support unloading modules by name. Previously unloading could only be done by the module index, which was a bit inconvenient, because usually you don't know the index without somehow looking it up first.

Logging Improvements

In addition to the automatic testing improvements, GSoC student Deng worked also on PulseAudio's logging facilities. It's now possible to change the log target of a running daemon with pacmd, using the set-log-target command. Also, a new log target type was added: "newfile". The "newfile" target is like the old "file" target, with the difference that if the given file name already exists, the file is not overwritten, but instead a new file is created with a numbered suffix.

Bluetooth Code Refactoring

There has been a lot of refactoring work done on the Bluetooth modules, as preparation for the upcoming BlueZ 5 support and for making the code more pleasant to work with in general. These are not directly user-visible changes, but we'd like to take the opportunity here to thank Mikel Astiz anyway for the great work he has done.

Next Steps

The development continues as always, and the 4.0 release is targeted to happen in April (so far we haven't been very good at maintaining a 4 month release cycle, though, so take that with a grain of salt). The report from PulseConf 2012 offers some clues about what might be coming next.