1.2.9 Audio-only (Live)

WCAG 2.2 · 1.2.9 AAA Perceivable

What it requires

An alternative for time-based media that presents equivalent information must be provided for live audio-only content. In practice this means giving a real-time text alternative — such as live captioning or a text transcript produced as the audio plays — for content like a live, audio-only podcast, webcast, or radio-style broadcast that carries no synchronised video. The text must convey the same information the audio conveys, so that people who cannot hear the live stream can follow it as it happens.

Failing this criterion excludes:

  • Deaf and hard-of-hearing users, who cannot access information that exists only as live sound.
  • Deafblind users relying on a braille display, who need the live text stream to route output to their device.
  • People in sound-restricted environments or without working audio hardware, who depend on text to participate in real time.

How to detect it

Checks for live audio-only alternatives
Check How What passes
Identify live audio-only Manual review of any live stream that is audio with no video track. Each such stream is flagged as in scope.
Real-time text exists Watch the broadcast and confirm live captions or a running transcript appear. Equivalent text is available during the live event.
Equivalence Compare the text against the spoken content for completeness and accuracy. Text conveys the same information, including speaker turns.
Screen reader / braille Confirm the live text region is exposed and announced (e.g. an ARIA live region). AT users receive updates as they arrive.
Automated tools Run axe or similar. Cannot verify; automation can flag a missing region but not equivalence — manual review is required.

How to fix it

  1. Identify every live audio-only broadcast you publish.
  2. Arrange a real-time text alternative — live human captioning (CART) or a live transcript service — delivered as the audio plays.
  3. Surface the text in a visible, programmatically updated region so it is announced by assistive technology and reaches braille displays.
  4. Indicate clearly where the live text is and keep it in sync with the broadcast.

Expose the running text in a polite live region so updates are announced without interrupting the user:

<section aria-label="Live transcript">
  <h2>Live transcript</h2>
  <div role="log" aria-live="polite" aria-atomic="false">
    <p><strong>Host:</strong> Welcome to the live broadcast.</p>
    <!-- new lines appended in real time -->
  </div>
</section>

Copy-paste tests

Automated coverage

There is no fully automated axe-core rule for 1.2.9: tools cannot tell whether a live audio-only stream has an equivalent real-time text alternative. This criterion needs manual review using the console check and steps below.

Run this in the browser console

console — find-live-audio.js
// Read-only: surfaces audio-only media and live-text regions for manual review.
const media = [...document.querySelectorAll('audio, video')].filter(
  el => el.tagName === 'AUDIO' || el.videoWidth === 0
);
const liveRegions = [...document.querySelectorAll(
  '[aria-live], [role=log], [role=status]'
)];
media.forEach(el => { el.style.outline = '3px solid red'; });
console.table(media.map(el => ({
  tag: el.tagName, src: el.currentSrc || el.src, paused: el.paused
})));
console.log('Candidate live-text regions:', liveRegions);

What to check manually: watch an actual live broadcast and confirm a real-time text alternative (live captions or a running transcript) appears as it airs and conveys the same information, including speaker turns — no script can confirm equivalence or that the text is genuinely live.