summaryrefslogtreecommitdiff
path: root/Software/PulseAudio/Notes/16.0.mdwn
blob: a3d359dd7f0150df47b1ed9e77eaa5eccd369868 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
[[!inline pages="Software/PulseAudio/TOC" quick="yes" raw="yes"]]

# PulseAudio 16.0 release notes (draft)

[[!toc startlevel=2 levels=3]]

Contains changes up to commit 325108e532e770a7b5951b84acb55ff95a568535 (commit date 2022-05-17).

## 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

### 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|https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/battery-api.txt]].

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|https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/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

<pre>
TODO
</pre>