Pulseaudio
Pulseaudio is used for routing audio to a Bluetooth device. With additional configuration it can also be used to receive audio and stream to multi-device (multi-room) configurations.
The tutorials on this page are basically using four commands:
pactl load-module <name>to load a pulseaudio module (not all are loaded by default)pactl set-default-sinkto set the pulseaudio output devicepactl set-default-sourceto set the pulseaudio input devicepactl infoto check the current sink/source configuration
Sample pactl info output:
LibreELEC:~ # pactl info
Server String: /var/run/pulse/native
Library Protocol Version: 31
Server Protocol Version: 31
Is Local: yes
Client Index: 41
Tile Size: 65472
User Name: root
Host Name: LibreELEC
Server Name: pulseaudio
Default Sample Specification: s16le 2ch 44100Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.platform-aml_m8_snd.45.analog-stereo
Default Source: alsa_input.platform-aml_m8_snd.45.analog-stereoBluetooth Sending
This is the default configuration. Simply pair a Bluetooth audio device in the LibreELEC settings add-on and change the Kodi output device (in Kodi settings) to Bluetooth Audio.
Bluetooth Receiving
This allows you to stream Bluetooth audio from a smartphone or other Bluetooth device. Before you start, pair the device in the LibreELEC settings add-on.
Stop Kodi (else it holds onto the audio device):
systemctl stop kodiLoad the pulseaudio udev module:
pactl load-module module-udev-detectList the names of pulseaudio output devices using the pactl utility:
pactl list short sinksFor example:
1 alsa_output.platform-aml_m8_snd.45.analog-stereo module-alsa-card.c s32le 2ch 44100Hz SUSPENDEDConfigure the pulseaudio output device:
pactl set-default-sink alsa_output.platform-aml_m8_snd.45.analog-stereoUse pactl to find your Bluetooth audio device:
pactl list short sourcesFor example:
12 bluez_source.B8_53_AC_01_8F_E7 module-bluez5-device.c s16le 2ch 44100Hz SUSPENDEDConfigure the pulseaudio source device:
pactl set-default-source bluez_source.B8_53_AC_01_8F_E7Restart Kodi:
systemctl start kodiSelect the audio output device in Kodi if you want audio from your device, and from playing files in Kodi.
Network Sending
This requires another computer or device running pulseaudio, e.g. an MPD music player or another LibreELEC device.
On the pulseaudio target device, ensure the native-protocol-tcp and zeroconf-publish modules are loaded:
pactl load-module module-native-protocol-tcp auth-anonymous=1
pactl load-module module-zeroconf-publishOn the pulseaudio source (LibreELEC) device, stop Kodi and find the output device:
systemctl stop kodi
pactl list short sinksFor example:
39 module-tunnel-sink server=[[192.168.1.70]]:4713 sink=alsa_output.pci-0000_00_08.0.analog-stereo format=s16le channels=2 rate=44100 sink_name=tunnel.lukas-macbook-pro.local.alsa_output.pci-0000_00_08.0.analog-stereo channel_map=front-left,front-rightOn the pulseaudio source, configure the pulseaudio output device:
pactl set-default-sink tunnel.lukas-macbook-pro.local.alsa_output.pci-0000_00_08.0.analog-stereoRestart Kodi:
systemctl start kodiYou can now select the default pulseaudio output device in Kodi settings. Audio will be broadcast on the network and other pulseaudio devices can select it as their audio source.
Network Receiving
This requires another pulseaudio device in the network, e.g. an MPD player or another LibreELEC device.
Stop Kodi else it will hold onto the audio output device:
systemctl stop kodiLoad the pulseaudio udev module:
pactl load-module module-udev-detectUse pactl to list pulseaudio output devices:
pactl list short sinksFor example:
1 alsa_output.platform-aml_m8_snd.45.analog-stereo module-alsa-card.c s32le 2ch 44100Hz SUSPENDEDConfigure the pulseaudio output device:
pactl set-default-sink alsa_output.platform-aml_m8_snd.45.analog-stereoOn the source pulseaudio device, load the native-protocol-tcp and zeroconf-discover modules:
pactl load-module module-native-protocol-tcp auth-anonymous=1
pactl load-module module-zeroconf-discoverOn the target device, use pactl to list available input devices:
pactl list short sourcesFor example:
38 module-tunnel-source server=[[192.168.1.70]]:4713 source=alsa_input.pci-0000_00_08.0.analog-stereo format=s16le channels=2 rate=44100 source_name=tunnel.lukas-macbook-pro.local.alsa_input.pci-0000_00_08.0.analog-stereo channel_map=front-left,front-rightConfigure the pulseaudio input device:
pactl set-default-source tunnel.lukas-macbook-pro.local.alsa_input.pci-0000_00_08.0.analog-stereoRestart Kodi:
systemctl start kodiConfiguration
Custom pulseaudio configuration is stored in /storage/.config/pulse-daemon.conf.d as /etc/pulse is inside the read-only filesystem. Files must have a .conf extension. The file daemon.conf is processed first, followed by other files in alphabetical order so if the same option is set in multiple files, the last one to be read will be used. If files have the same name as a default (embedded) file they override (replace) the embedded file.
To make custom configurations persistent, we must override /etc/pulse/default.pa which is read on startup. Create /storage/.config/pulse-daemon.conf.d/custom.conf and set the following to override the startup script file location:
default-script-file = /storage/.config/pulse-daemon.conf.d/custom.paNow create /storage/.config/pulse-daemon.conf.d/custom.pa to extend the default startup script:
#!/usr/bin/pulseaudio -nF
.fail
.include /etc/pulse/default.pa
# extend default startup script here e.g.
load-module module-rtp-recv latency_msec=250 sap_address=0.0.0.0Sample Rates and Resampling
Create /storage/.config/pulse-daemon.conf.d/custom.conf with your custom options, e.g.
resample-method = soxr-vhq
default-sample-format = s16le
default-sample-rate = 44100To see the available resample methods:
pulseaudio --dump-resample-methodsFor example:
trivial
ffmpeg
auto
copy
peaks
soxr-mq
soxr-hq
soxr-vhqLast updated
Was this helpful?