> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes. # setEchoCancellation > Toggle echo cancellation on the local mic at runtime. ```ts setEchoCancellation(enabled): Promise ``` Toggle echo cancellation on the local mic at runtime. Applied via `track.applyConstraints`; browsers that don't honour runtime constraints (notably iOS Safari) fall back to re-acquiring the track with the new constraint set and plumbing the replacement through the local audio pipeline if one is active. ## **Parameters** **`enabled`** `boolean` — required Whether echo cancellation should be enabled. --- ## **Returns** `Promise` — whether the constraint reached the microphone. `false` is an outcome rather than an error: a leg sending media the SDK did not capture is left alone. A UI that reflects the toggle must read this value instead of assuming the call succeeded. Any failure behind a `false` is also reported on [`errors$`](/docs/browser-sdk/v4/reference/webrtc-call/errors\$). ## **Examples** ### Toggle from a UI switch ```ts echoSwitch.addEventListener('change', async (e) => { const applied = await call.setEchoCancellation(e.target.checked); echoSwitch.checked = applied ? e.target.checked : !e.target.checked; }); ``` ## **See** * [`setAutoGainControl`](/docs/browser-sdk/v4/reference/webrtc-call/set-auto-gain-control), [`setNoiseSuppression`](/docs/browser-sdk/v4/reference/webrtc-call/set-noise-suppression) — companion processing toggles. > Toggle echo cancellation on the local mic at runtime.