docs: close the AEC default-sink question raised by §6.1.0

Checked ~/.config/peerspeak/config.json: output_device and input_device are
both pinned to the Arctis, so echo_cancel::enable always passes sink_master
explicitly and the AEC binds to real hardware regardless of Sunshine owning
the default sink. Not live for this user.

Kept as a low-priority general defect: on "system default", the master args
are omitted (echo_cancel.rs:89-94) and module-echo-cancel binds to whatever
the default is, which on a box like this one is a null sink. Hardening would
be to resolve and validate the default before load. Own task, not this
feature.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 05:22:32 -04:00
co-authored by Claude Opus 4.8
parent 8768cd242c
commit fd72e6f018
+13 -5
View File
@@ -334,11 +334,19 @@ path, with no EasyEffects involved. Consequences:
4. §10 item 2 (`@DEFAULT_SINK@` resolved once) is worse than described: the default sink 4. §10 item 2 (`@DEFAULT_SINK@` resolved once) is worse than described: the default sink
here is a *transient app-owned null sink* that appears and disappears with Sunshine. here is a *transient app-owned null sink* that appears and disappears with Sunshine.
⚠️ **Separate, UNVERIFIED question this raises for peerspeak itself** (not this feature): **Separate item this raised for peerspeak itself — RESOLVED for this machine, kept as a
`echo_cancel::enable` passes `sink_master` only when the user has picked a device, else it low-priority general defect** (not part of this feature): `echo_cancel::enable` appends
binds to system defaults (`echo_cancel.rs:83-94`). With the default sink being Sunshine's `sink_master=` / `source_master=` only when the configured device is `Some` and non-empty
null sink, what does the AEC bind to, and does call audio still reach the user's speakers? (`echo_cancel.rs:89-94`); otherwise `module-echo-cancel` binds to whatever PipeWire calls
**This is a question, not a finding — do not repeat it as a bug until it is tested.** the default. On a box where an application owns the default sink — as Sunshine does here —
that means the AEC would bind to a null sink.
**Not live for this user:** `~/.config/peerspeak/config.json` pins
`output_device = alsa_output.usb-SteelSeries_…Arctis_1_Wireless-00.analog-stereo` and
`input_device = …mono-fallback`, so `sink_master` is always passed explicitly and the AEC
binds to the Arctis regardless of the default. The exposure exists only for a user on
"system default". Possible hardening (own task, not this feature): resolve and validate
the default sink before load, and refuse or warn when it is a null/virtual sink.
The canonical *installed* instance: **EasyEffects.** When it is running, applications play into The canonical *installed* instance: **EasyEffects.** When it is running, applications play into
`ee_sink` and EasyEffects emits a single combined output stream to the hardware. That `ee_sink` and EasyEffects emits a single combined output stream to the hardware. That