Local Modules

The LocalModule object (which binds the WpImplModule C API) provides a way to load PipeWire modules in the WirePlumber process. Instantiating the object loads the module, and when the last reference to the returned module object is dropped, the module is unloaded. Alternatively, the module can be unloaded at a deterministic point in time with LocalModule.unload().

The module is loaded in the client context: a secondary pw_context that runs on its own thread, so that the module is never held up by whatever WirePlumber's main loop is doing. See support.client-context in Well-known features. If that feature is disabled, the module is loaded in WirePlumber's main pw_context instead.

Constructors

LocalModule(name, arguments, properties)

Loads the named module with the provided arguments and properties (either of which can be nil).

Parameters:
  • name (string) -- the module name, such as "libpipewire-module-loopback"

  • arguments (string) -- should be either nil or a string with the desired module arguments

  • properties (table) -- can be nil or a table that can be converted to WpProperties

Returns:

a new LocalModule

Return type:

LocalModule (WpImplModule)

Since:

0.4.2

Methods

LocalModule.unload(self)

Unloads the module immediately, instead of waiting for the last reference to the object to be dropped and the garbage collector to finalize it.

This is useful when the module must be torn down before another module that provides objects with the same names is loaded. Relying on the garbage collector in that case is not sufficient, because collection happens at an unspecified point in time and the two modules may end up loaded simultaneously.

Calling this method more than once has no additional effect and the object remains valid afterwards.

Since:

0.5.16

Example:

local module = LocalModule("libpipewire-module-loopback", args, {})
-- ... later, when the module is no longer needed:
module:unload()
module = nil