I have two loopbacks (I like having music and games each grouped separately from other audio), an echo-cancel and a noise cancel (filter-chain with a single rnnoise node), all configured via .conf files. As an aside, is there a “best order” to chain echo cancel and noise cancel?
Echo cancel seems to have a quantum/rate of 480/48000 across the board. Loopbacks, rnnoise and alsa_output (my headset) all have 0/0. I imagine it makes sense for the Loopbacks and rnnoise, but should it be something else for the main output?
I have been doing echo-cancel -> rnnoise. That way echo cancel gets a clean stream to do what ever correlations that it needs to do and then rnnoise de-noises what is remaining.
As far as the latency, I think it is because echo cancel needs a bit of a default wait in order to actually hear the sound coming out of your speakers (speed of sound is slow, smh) which is why I think that delay is there (though this is complete speculation, if someone knows better I’d love to know).
The quantum of all of the devices is propagated through the chain so if you have echo cancellation in a graph then all everything will use at least its quantum (if there are not higher quantum objects in the chain). If a device doesn’t have a quantum, it’ll either use the min-quantum or the highest quantum of any node in the graph.
Sounds like a compressor would be a good idea to have anyway. Is that also doable through the config? I’m not opposed to graphical tools, I just feel like working with the config directly is more educational. It’s also more prone to screwing things up, but that’s just bonus lessons on what not to do.
I agree, learning the underlying system pays dividends.
Any LADSPA filter will work as a node in pipewire. So the world is your oyster!
Curiously, the reason I looked at echo-cancel in the first place is that Discord’s own echo fucks with things, cutting me out at times while also not cancelling the echo at others.
Yeah, I’ve had similar experiences. I typically disable any sound processing done by the application and depend on my own plugins to handle that.
Make a file in pipewire.conf.d: ~/.config/pipewire/pipewire.conf.d/min-quantum.conf
With this, replace the quantum with one you’ve found works best:
context.properties = { default.clock.min-quantum = 512 }Restart pipewire for it to take effect.
I have been doing echo-cancel -> rnnoise. That way echo cancel gets a clean stream to do what ever correlations that it needs to do and then rnnoise de-noises what is remaining.
As far as the latency, I think it is because echo cancel needs a bit of a default wait in order to actually hear the sound coming out of your speakers (speed of sound is slow, smh) which is why I think that delay is there (though this is complete speculation, if someone knows better I’d love to know).
The quantum of all of the devices is propagated through the chain so if you have echo cancellation in a graph then all everything will use at least its quantum (if there are not higher quantum objects in the chain). If a device doesn’t have a quantum, it’ll either use the min-quantum or the highest quantum of any node in the graph.
I agree, learning the underlying system pays dividends.
Any LADSPA filter will work as a node in pipewire. So the world is your oyster!
This explains how to set it up better than I can here: https://forum.endeavouros.com/t/pipewire-filter-chains-normalize-audio-noise-suppression/31661
Yeah, I’ve had similar experiences. I typically disable any sound processing done by the application and depend on my own plugins to handle that.