# OPTIONAL. Copy to ~/.config/pipewire/pipewire.conf.d/60-echo-cancel.conf on the Pi # (drop the ".optional") only if the robot hears its own voice and Hermes keeps # interrupting itself (barge-in tripped by speaker bleed). # # It creates an echo-cancelled mic ("robot_ec_source") and a matching speaker # ("robot_ec_sink"). After enabling it, uncomment the pulse.device lines in the # Omarchy tunnel config (host/omarchy/50-robot-tunnel.conf) so the tunnels use these nodes instead of the # raw ones. # # UNTESTED: it only matters once the speakers are fitted (the robot has none yet). WebRTC echo # cancellation costs some CPU, and the Pi 4 already runs the whole robot with about 40% of the machine # idle; check `top` and `robot://status` (temperature) after enabling it. context.modules = [ { name = libpipewire-module-echo-cancel args = { library.name = aec/libspa-aec-webrtc capture.props = { node.name = "robot_ec_capture" node.passive = true } source.props = { node.name = "robot_ec_source" node.description = "Robot mic (echo-cancelled)" } sink.props = { node.name = "robot_ec_sink" node.description = "Robot speaker (echo-cancelled)" } playback.props = { node.name = "robot_ec_playback" node.passive = true } } } ]