You are not logged in.
I Just replace pipewire-media-session with wireplumber , everything works as expected but I found this warning (which I would like to get rid of).
Sender : pipewire-pulse
time :
Message :Security mod.filter-chain: error id:3 seq:21 res:-2 (No such file or directory): no node available
Audi Session : 4
Priority : 3
pipewire-pulse.service - PipeWire PulseAudio
Loaded: loaded (/usr/lib/systemd/user/pipewire-pulse.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2022-05-12 09:41:47 +07; 50min ago
TriggeredBy: ● pipewire-pulse.socket
Main PID: 1290 (pipewire-pulse)
Tasks: 2 (limit: 16603)
Memory: 35.6M
CPU: 18.402s
CGroup: /user.slice/user-1000.slice/user@1000.service/session.slice/pipewire-pulse.service
└─ 1290 /usr/bin/pipewire-pulse
May 12 09:41:47 archbox systemd[1043]: Started PipeWire PulseAudio.
May 12 09:41:47 archbox pipewire-pulse[1298]: 536870912
May 12 09:41:47 archbox pipewire-pulse[1304]: 536870914
May 12 09:41:47 archbox pipewire-pulse[1300]: 536870915
May 12 09:41:47 archbox pipewire-pulse[1290]: mod.filter-chain: error id:3 seq:21 res:-2 (No such file or directory): no node available
~
Pipewire-pulse.conf
# PulseAudio config file for PipeWire version "0.3.51" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/pipewire-pulse.conf.d/ for system-wide changes or in
# ~/.config/pipewire/pipewire-pulse.conf.d/ for local changes.
#
context.properties = {
## Configure properties in the system.
#mem.warn-mlock = false
#mem.allow-mlock = true
#mem.mlock-all = false
#log.level = 2
#default.clock.quantum-limit = 8192
}
context.spa-libs = {
audio.convert.* = audioconvert/libspa-audioconvert
support.* = support/libspa-support
}
context.modules = [
{ name = libpipewire-module-rt
args = {
nice.level = -11
#rt.prio = 88
#rt.time.soft = -1
#rt.time.hard = -1
}
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 = {
# contents of pulse.properties can also be placed here
# to have config per server.
}
}
]
# Extra modules can be loaded here. Setup in default.pa can be moved here
context.exec = [
{ path = "pactl" args = "load-module module-always-sink" }
{ path = "pactl" args = "load-module module-ladspa-sink sink_name=compressor1 sink_master=compressor2 plugin=sc4_1882 label=sc4 control=1,180,350,-26.67,1.4,7,10" }
{ path = "pactl" args = "load-module module-ladspa-sink sink_name=compressor2 sink_master=normalized3 plugin=sc4_1882 label=sc4 control=0,2,650,-30,1.4,6,0" }
{ path = "pactl" args = "load-module module-ladspa-sink sink_name=normalized3 sink_master=alsa_output.usb-E__Corp._DAC_Audio-01.iec958-stereo plugin=fast_lookahead_limiter_1913 label=fastLookaheadLimiter control=10,0,0.5057" }
{ path = "pactl" args = "set-default-sink compressor1" }
#{ path = "pactl" args = "load-module module-switch-on-connect" }
#{ path = "/usr/bin/sh" args = "~/.config/pipewire/default.pw" }
]
stream.properties = {
#node.latency = 1024/96000
#node.autoconnect = true
resample.quality = 10
#channelmix.normalize = false
channelmix.mix-lfe = true
#channelmix.upmix = true
#channelmix.upmix-method = psd # none, simple
#channelmix.lfe-cutoff = 150
#channelmix.fc-cutoff = 12000
#channelmix.rear-delay = 12.0
#channelmix.stereo-widen = 0.0
#channelmix.hilbert-taps = 0
}
pulse.properties = {
# the addresses this server listens on
server.address = [
"unix:native"
#"unix:/tmp/something" # absolute paths may be used
#"tcp:4713" # IPv4 and IPv6 on all addresses
#"tcp:[::]:9999" # IPv6 on all addresses
#"tcp:127.0.0.1:8888" # IPv4 on a single address
#
#{ address = "tcp:4713" # address
# max-clients = 64 # maximum number of clients
# listen-backlog = 32 # backlog in the server listen queue
# client.access = "restricted" # permissions for clients
#}
]
#pulse.min.req = 256/48000 # 5ms
#pulse.default.req = 960/48000 # 20 milliseconds
#pulse.min.frag = 256/48000 # 5ms
#ipulse.default.frag = 96000/48000 # 2 seconds
#pulse.default.tlength = 96000/48000 # 2 seconds
#pulse.min.quantum = 256/48000 # 5ms
pulse.default.format = S24LE
#pulse.default.position = [ FL FR ]
# These overrides are only applied when running in a vm.
vm.overrides = {
pulse.min.quantum = 1024/48000 # 22ms
}
}
# client/stream specific properties
pulse.rules = [
{
matches = [
{
# all keys must match the value. ~ starts regex.
#client.name = "Firefox"
#application.process.binary = "teams"
#application.name = "~speech-dispatcher.*"
}
]
actions = {
update-props = {
#node.latency = 512/48000
}
# Possible quirks:"
# force-s16-info forces sink and source info as S16 format
# remove-capture-dont-move removes the capture DONT_MOVE flag
#quirks = [ ]
}
}
{
# skype does not want to use devices that don't have an S16 sample format.
matches = [
{ application.process.binary = "teams" }
{ application.process.binary = "teams-insiders" }
{ application.process.binary = "skypeforlinux" }
]
actions = { quirks = [ force-s16-info ] }
}
{
# firefox marks the capture streams as don't move and then they
# can't be moved with pavucontrol or other tools.
matches = [ { application.process.binary = "firefox" } ]
actions = { quirks = [ remove-capture-dont-move ] }
}
{
# speech dispatcher asks for too small latency and then underruns.
matches = [ { application.name = "~speech-dispatcher*" } ]
actions = {
update-props = {
pulse.min.req = 1024/48000 # 21ms
pulse.min.quantum = 1024/48000 # 21ms
}
}
}
]
pactl info
Server String: /run/user/1000/pulse/native
Library Protocol Version: 35
Server Protocol Version: 35
Is Local: yes
Client Index: 296
Tile Size: 65472
User Name: lamud
Host Name: archbox
Server Name: PulseAudio (on PipeWire 0.3.51)
Server Version: 15.0.0
Default Sample Specification: s24le 2ch 48000Hz
Default Channel Map: front-left,front-right
Default Sink: compressor1
Default Source: alsa_output.usb-E__Corp._DAC_Audio-01.iec958-stereo.monitor
Last edited by mrlamud (2022-09-29 12:25:11)
Offline
F.Y.I - Problems solved by using filter-chain format drop-in file.
I found information how to compose daisy-chain ladspa plugins to filter-chain format that works from :
https://forum.endeavouros.com/t/pipewir … sion/31661
by Echoa...Thank you very much.
For the example this is the filter-chain file dropped in ~/.config/pipewire/filter-chain.conf.d/
~/.config/pipwire/filter-chain.conf.d/whatever.conf
# Dynamic compress
# ~/.config/pipewire/filter-chain.conf.d/
context.modules = [
{ name = libpipewire-module-filter-chain
args = {
node.description = "Dynamic compression Ladspa"
media.name = "Dynamic compression Ladspa"
filter.graph = {
nodes = [
{
type = ladspa
name = comp2
plugin = /usr/lib/ladspa/sc4_1882.so
label = sc4
control = {"RMS/peak" = 0 "Attack time (ms)" = 2 "Release time (ms)" = 650 "Threshold level (dB)" = -30 "Ratio (1:n)" = 1.4 "Knee radius (dB)" = 6 "Makeup gain (dB)" = 10 }
}
{
type = ladspa
name = comp1
plugin = /usr/lib/ladspa/sc4_1882.so
label = sc4
control = { "RMS/peak" = 1 "Attack time (ms)" = 180 "Release time (ms)" = 350 "Threshold level (dB)" = -26.67 "Ratio (1:n)" = 1.4 "Knee radius (dB)" = 7 "Makeup gain (dB)" = 10 }
}
{
type = ladspa
name = norm3
plugin = /usr/lib/ladspa/fast_lookahead_limiter_1913.so
label = fastLookaheadLimiter
control = { "Input gain (dB)" = 8 "Limit (dB)" = 0 "Release time (s)" = 0.5057 }
}
]
links = [
{ output = "comp2:Left output" input = "comp1:Left input" }
{ output = "comp2:Right output" input = "comp1:Right input" }
{ output = "comp1:Left output" input = "norm3:Input 1" }
{ output = "comp1:Right output" input = "norm3:Input 2" }
]
inputs = [ "comp2:Left input" "comp2:Right input" ]
outputs = [ "norm3:Output 1" "norm3:Output 2" ]
}
capture.props = {
node.name = "effect_input.dynamic"
audio.channels = 2
audio.position = [ FL FR ]
#node.passive = true
media.class = Audio/Sink
}
playback.props = {
node.name = "effect_output.dynamic"
node.passive = true
audio.channels = 2
audio.position = [ FL FR ]
node.target = "alsa_output.target"
}
}
}
]
The plugin's control , Output, Input can be obtained by running analyseplugin command for example: -
SC4_1882
$analyseplugin sc4_1882
Plugin Name: "SC4"
Plugin Label: "sc4"
Plugin Unique ID: 1882
Maker: "Steve Harris <steve@plugin.org.uk>"
Copyright: "GPL"
Must Run Real-Time: No
Has activate() Function: No
Has deactivate() Function: No
Has run_adding() Function: Yes
Environment: Normal or Hard Real-Time
Ports: "RMS/peak" input, control, 0 to 1, default 0
"Attack time (ms)" input, control, 1.5 to 400, default 101.125
"Release time (ms)" input, control, 2 to 800, default 401
"Threshold level (dB)" input, control, -30 to 0, default 0
"Ratio (1:n)" input, control, 1 to 20, default 1
"Knee radius (dB)" input, control, 1 to 10, default 3.25
"Makeup gain (dB)" input, control, 0 to 24, default 0
"Amplitude (dB)" output, control, -40 to 12
"Gain reduction (dB)" output, control, -24 to 0
"Left input" input, audio
"Right input" input, audio
"Left output" output, audio
"Right output" output, audio
fast_lookahead_limiter_1913
$fast_lookahead_limiter_1913
Plugin Name: "Fast Lookahead limiter"
Plugin Label: "fastLookaheadLimiter"
Plugin Unique ID: 1913
Maker: "Steve Harris <steve@plugin.org.uk>"
Copyright: "GPL"
Must Run Real-Time: No
Has activate() Function: Yes
Has deactivate() Function: No
Has run_adding() Function: Yes
Environment: Normal or Hard Real-Time
Ports: "Input gain (dB)" input, control, -20 to 20, default 0
"Limit (dB)" input, control, -20 to 0, default 0
"Release time (s)" input, control, 0.01 to 2, default 0.5075
"Attenuation (dB)" output, control, 0 to 70
"Input 1" input, audio
"Input 2" input, audio
"Output 1" output, audio
"Output 2" output, audio
"latency" output, control
You can test the filter-chain config file by running
$ pipewire -c filter-chain.conf
after execute the above command , it should be in wait-state , not begin new prompt line until you decide to terminate it by Ctrl+c. On the other hand if something wrong with the filter-chain file, after execute the command , new prompt line will appear instead of the wait-stae and without any error messages.
Your could review the by running command:
$ pipewire -c ~/.config/pipewire/filter-chain.conf.d/whatever.conf
The output:
[E][04111.333744] pw.core | [ core.c: 382 core_new()] 0x5597bcf05c50: can't find protocol 'PipeWire:Protocol:Native': Operation not supported
[E][04111.333812] mod.filter-chain | [module-filter-ch: 2248 pipewire__module_init()] can't connect: Operation not supported
[E][04111.334026] pw.conf | [ conf.c: 594 load_module()] 0x5597bcec3130: could not load mandatory module "libpipewire-module-filter-chain": Operation not supported
[E][04111.334097] default | [ pipewire.c: 125 main()] failed to create context: Operation not supported
any errors beside the above example (which I have no clue about them...stupid me!) could be told what's wrong in your new created filter-chain config file .
After all experiment - if it works, you can put the command
{ path = "/usr/bin/pipewire" args = "-c filter-chain.conf" }
under context.exec[.......
....] section either in pipewire or pipewire-pulse config file
Thanks for reading , anyone should have any advices to improve my config file will be highly appreciate.
Offline