diff --git a/roles/pulseaudio/tasks/main.yml b/roles/pulseaudio/tasks/main.yml new file mode 100644 index 0000000..4bb5542 --- /dev/null +++ b/roles/pulseaudio/tasks/main.yml @@ -0,0 +1,16 @@ +#!/usr/bin/env ansible-playbook +# vim:ft=ansible: +- name: assure pulse package + apt: name=pulseaudio + when: ansible_os_family == 'Debian' +- name: template out configs + template: src={{ item.src }} dest={{ item.dest }} mode=0644 + loop: + - { src: "pulse-client.conf", dest: "/etc/pulse/client.conf" } + - { src: "pulse-daemon.conf", dest: "/etc/pulse/daemon.conf" } + - { src: "pulse-default.pa", dest: "/etc/pulse/default.pa" } + - { src: "pulseaudio.service", dest: "/etc/systemd/system/pulseaudio.service" } +- name: assure pulse user + user: name=pulseaudio password="!" system=yes home=/var/lib/pulse groups=audio +- name: enable pulse service + systemd: name=pulseaudio enabled=yes state=started daemon_reload=yes diff --git a/roles/pulseaudio/templates/pulse-client.conf b/roles/pulseaudio/templates/pulse-client.conf new file mode 100644 index 0000000..116187e --- /dev/null +++ b/roles/pulseaudio/templates/pulse-client.conf @@ -0,0 +1,3 @@ +# Managed via Ansible +autospawn = no +default-server = unix:/tmp/pulse-server diff --git a/roles/pulseaudio/templates/pulse-daemon.conf b/roles/pulseaudio/templates/pulse-daemon.conf new file mode 100644 index 0000000..11af05c --- /dev/null +++ b/roles/pulseaudio/templates/pulse-daemon.conf @@ -0,0 +1,23 @@ +# Configuration file for the PulseAudio daemon. See pulse-daemon.conf(5) for +# more information. Default values are commented out. Use either ; or # for +# commenting. + +# Bugfixes for my desktop's audio card +realtime-scheduling = no # Fixes a weird stutter issue + +# Sanity +flat-volumes = no + +# Audio Quality +default-sample-format = s32le # Pulse does 16bit sampling by default for some reason +default-sample-rate = 48000 # Higher sample rate than default +alternate-sample-rate = 44100 +resample-method = speex-float-5 # Increase resampling quality +avoid-resampling = true + +default-fragments = 5 # Pulse, why are you so friggin latent by default? +default-fragment-size-msec = 10 + +high-priority = yes +nice-level = -19 + diff --git a/roles/pulseaudio/templates/pulse-default.pa b/roles/pulseaudio/templates/pulse-default.pa new file mode 100644 index 0000000..464f143 --- /dev/null +++ b/roles/pulseaudio/templates/pulse-default.pa @@ -0,0 +1,77 @@ +#!/usr/bin/pulseaudio -nF +#!/usr/bin/pulseaudio -nF +# +.fail + +load-module module-device-restore +load-module module-stream-restore +load-module module-card-restore +load-module module-augment-properties +### Should be after module-*-restore but before module-*-detect +load-module module-switch-on-port-available +### Use hot-plugged devices like Bluetooth or USB automatically (LP: #1702794) +.ifexists module-switch-on-connect.so +load-module module-switch-on-connect +.endif + +# Device detection +.ifexists module-udev-detect.so +load-module module-udev-detect +.else +load-module module-detect +.endif + +# Bluetooth +.ifexists module-bluetooth-policy.so +load-module module-bluetooth-policy +.endif +.ifexists module-bluetooth-discover.so +load-module module-bluetooth-discover +.endif + +# Protocols +.ifexists module-esound-protocol-unix.so +load-module module-esound-protocol-unix +.endif +load-module module-native-protocol-unix auth-group=audio socket=/tmp/pulse-server + +# Load GSettings/paprefs modules +.ifexists module-gsettings.so +.nofail +load-module module-gsettings +.fail +.endif + +load-module module-default-device-restore +load-module module-always-sink +load-module module-intended-roles +load-module module-suspend-on-idle + +### If autoexit on idle is enabled we want to make sure we only quit +### when no local session needs us anymore. +.ifexists module-console-kit.so +load-module module-console-kit +.endif +.ifexists module-systemd-login.so +load-module module-systemd-login +.endif + +# Enable positioned event sounds +load-module module-position-event-sounds +# Cork music/video streams when a phone stream is active +load-module module-role-cork +# Block audio recording for snap confined packages +.ifexists module-snap-policy.so +load-module module-snap-policy +.endif + +load-module module-filter-heuristics +load-module module-filter-apply + +## Gets around a weird audio skipping bug on my desktop +.ifexists module-udev-detect.so +load-module module-udev-detect tsched=0 + +## My laptop gets sink suspension popping when using headphones +unload-module module-suspend-on-idle + diff --git a/roles/pulseaudio/templates/pulseaudio.service b/roles/pulseaudio/templates/pulseaudio.service new file mode 100644 index 0000000..3d07b92 --- /dev/null +++ b/roles/pulseaudio/templates/pulseaudio.service @@ -0,0 +1,23 @@ +# vim:ft=systemd +# NOTE: This service is ONLY useful IF you have the following: +# * client.conf is set to not autospawn and listen to a socket instead +# * default.pa is configured to start such a socket +# Using this unit file and complaining to me that it doesn't work without +# the other configs in place will result in me not giving a shit + +## THIS UNIT DOES NOT START PULSE IN SYSTEM MODE +## THIS UNIT DOES NOT START PULSE IN SYSTEM MODE +## THIS UNIT DOES NOT START PULSE IN SYSTEM MODE +## THIS UNIT DOES NOT START PULSE IN SYSTEM MODE +## THIS UNIT DOES NOT START PULSE IN SYSTEM MODE +[Unit] +Description=Pulseaudio sound server + +[Service] +User=pulseaudio +Group=pulseaudio +ExecStart=/usr/bin/pulseaudio --disallow-exit +ExecReload=/bin/kill -HUP $MAINPID + +[Install] +WantedBy=multi-user.target diff --git a/site.yml b/site.yml index da9e622..a974240 100755 --- a/site.yml +++ b/site.yml @@ -41,6 +41,9 @@ - SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0664", GROUP="plugdev" become: yes tags: [ desktop, udev ] + - role: pulseaudio + become: yes + tags: [ desktop, pulse, pulseaudio ] - role: zerotier become: yes tags: [ desktop, zerotier ]