PipeWire: Difference between revisions

imported>Kittywitch
m Fixed syntax error in PulseAudio backend
imported>Fufexan
Change examples to a better "drop-in" config
Line 146: Line 146:
   config.pipewire = {
   config.pipewire = {
     "context.properties" = {
     "context.properties" = {
       "default.clock.min-quantum" = 32; # default; going lower may cause crackles and distorted audio
      "link.max-buffers" = 16;
      "log.level" = 2;
      "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";
     };
     };
    "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"; }
    ];
   };
   };
};
};
Line 159: Line 196:
services.pipewire = {
services.pipewire = {
   config.pipewire-pulse = {
   config.pipewire-pulse = {
    "context.properties" = {
      "log.level" = 2;
    };
     "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-client-node"; }
      { name = "libpipewire-module-adapter"; }
      { name = "libpipewire-module-metadata"; }
       {
       {
         name = "libpipewire-module-protocol-pulse";
         name = "libpipewire-module-protocol-pulse";
         args = {
         args = {
           "pulse.min.quantum" = 32; # controls minimum playback quant
           "pulse.min.req" = "32/48000";
           "pulse.min.req" = 32; # controls minimum recording quant
          "pulse.default.req" = "32/48000";
           "pulse.min.frag" = 32; # controls minimum fragment size
           "pulse.max.req" = "32/48000";
           "server.address" = [ "unix:native" ]; # the default address of the server
           "pulse.min.quantum" = "32/48000";
          "pulse.max.quantum" = "32/48000";
           "server.address" = [ "unix:native" ];
         };
         };
       }
       }
     ];
     ];
    "stream.properties" = {
      "node.latency" = "32/48000";
      "resample.quality" = 1;
    };
   };
   };
};
};
Line 184: Line 244:
         actions = {
         actions = {
           update-props = {
           update-props = {
             "audio.format" = "S16LE";
             "audio.format" = "S32LE";
             "audio.rate" = 48000;
             "audio.rate" = 96000; # for USB soundcards it should be twice your desired rate
             "api.alsa.period-size" = 160; # defaults to 1024, tweak by trial-and-error
             "api.alsa.period-size" = 32; # defaults to 1024, tweak by trial-and-error
             #"api.alsa.disable-batch" = true; # generally, USB soundcards use the batch mode
             #"api.alsa.disable-batch" = true; # generally, USB soundcards use the batch mode
           };
           };