diff --git a/config/profiles/gui/sound.nix b/config/profiles/gui/sound.nix index 7125c10c..043089bd 100644 --- a/config/profiles/gui/sound.nix +++ b/config/profiles/gui/sound.nix @@ -17,21 +17,80 @@ config = { pipewire = { "context.properties" = { + "link.max-buffers" = 16; "log.level" = 2; - "default.clock.min-quantum" = - 32; # default; going lower may cause crackles and distorted audio + "default.clock.rate" = 48000; + "default.clock.quantum" = 32; + "default.clock.min-quantum" = 32; + "default.clock.max-quantum" = 32; + "core.daemon" = true; + "core.name" = "pipewire-0"; }; - pipewire-pulse = { - "context.modules" = [{ + "context.modules" = [ + { + name = "libpipewire-module-rtkit"; + args = { + "nice.level" = -15; + "rt.prio" = 88; + "rt.time.soft" = 200000; + "rt.time.hard" = 200000; + }; + flags = [ "ifexists" "nofail" ]; + } + { name = "libpipewire-module-protocol-native"; } + { name = "libpipewire-module-profiler"; } + { name = "libpipewire-module-metadata"; } + { name = "libpipewire-module-spa-device-factory"; } + { name = "libpipewire-module-spa-node-factory"; } + { name = "libpipewire-module-client-node"; } + { name = "libpipewire-module-client-device"; } + { + name = "libpipewire-module-portal"; + flags = [ "ifexists" "nofail" ]; + } + { + name = "libpipewire-module-access"; + args = {}; + } + { name = "libpipewire-module-adapter"; } + { name = "libpipewire-module-link-factory"; } + { name = "libpipewire-module-session-manager"; } + ]; + }; + pipewire-pulse = { + "context.properties" = { + "log.level" = 2; + }; + "context.modules" = [ + { + name = "libpipewire-module-rtkit"; + args = { + "nice.level" = -15; + "rt.prio" = 88; + "rt.time.soft" = 200000; + "rt.time.hard" = 200000; + }; + flags = [ "ifexists" "nofail" ]; + } + { name = "libpipewire-module-protocol-native"; } + { name = "libpipewire-module-client-node"; } + { name = "libpipewire-module-adapter"; } + { name = "libpipewire-module-metadata"; } + { name = "libpipewire-module-protocol-pulse"; args = { - "pulse.min.quantum" = 32; # controls minimum playback quant - "pulse.min.req" = 32; # controls minimum recording quant - "pulse.min.frag" = 32; # controls minimum fragment size - "server.address" = - [ "unix:native" ]; # the default address of the server + "pulse.min.req" = "32/48000"; + "pulse.default.req" = "32/48000"; + "pulse.max.req" = "32/48000"; + "pulse.min.quantum" = "32/48000"; + "pulse.max.quantum" = "32/48000"; + "server.address" = [ "unix:native" ]; }; - }]; + } + ]; + "stream.properties" = { + "node.latency" = "32/48000"; + "resample.quality" = 1; }; }; };