---
title: "Never play sound by itself · Agent Wranglers"
url: https://agentwranglers.se/playbook/website/accessibility/audio-control
updated: 2026-10-21
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Never play sound by itself

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Accessibility](https://agentwranglers.se/playbook/website/accessibility.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers). Updated 2026-10-21.

- Level: Required
- Chapter: [Accessibility](https://agentwranglers.se/playbook/website/accessibility)
- Rule: Never start sound when a page loads. If any audio plays by itself for more than 3 seconds, give a control that pauses or stops it. This is WCAG criterion 1.4.2 (A).
- Risk: A law broken
- How: Start audio, and video with sound, only when someone presses play. A background video may start by itself only with `muted`. Sound that starts alone drowns out a screen reader, so its user cannot find the stop button. Embedded players count too, so load them as [Load embedded videos and maps only after a click](https://agentwranglers.se/playbook/website/privacy/click-to-load-embeds) says.
- Check: A browser test loads each page type and waits 4 seconds. Every `audio` and `video` element is paused or muted, and every element with `autoplay` also has `muted`.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### HTML example

```html
<!-- Not this: sound starts on load. -->
<video autoplay src="/welcome.mp4"></video>

<!-- This: silent background loop, sound only on play. -->
<video autoplay muted loop playsinline src="/workshop-loop.mp4"></video>
<audio controls preload="none" src="/episode-1.mp3"></audio>
```

### JavaScript example

```js
await page.goto('https://example.com/');
await page.waitForTimeout(4000);
const loud = await page.$$eval('audio, video', els => els.filter(el => !el.paused && !el.muted).length);
expect(loud).toBe(0);
```

### Python example

```python
page.goto("https://example.com/")
page.wait_for_timeout(4000)
loud = page.eval_on_selector_all("audio, video", "els => els.filter(el => !el.paused && !el.muted).length")
assert loud == 0
```

## Sources

- [WCAG 2.2 – 1.4.2 Audio Control](https://www.w3.org/TR/WCAG22/#audio-control)

## Related rules

- [Load embedded videos and maps only after a click](https://agentwranglers.se/playbook/website/privacy/click-to-load-embeds) in Website

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/website/accessibility/audio-control">Agent Wranglers website playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Style from the state](https://agentwranglers.se/playbook/website/accessibility/css-state-selectors)
- Next: [Give instructions that work without seeing the page](https://agentwranglers.se/playbook/website/accessibility/sensory-characteristics)
- [Accessibility](https://agentwranglers.se/playbook/website/accessibility)
