Search topics
Podcasts with loud background music under the speech
A coffee podcast lays its theme tune under every word of its storage tips, only about 6 dB below the voice, and offers no version without it.
The problem
Listeners who are hard of hearing can't pick the tips out of the music under them
A coffee roaster's podcast, Small Batch, puts each episode on its website with a transcript under the player. Episode 12 is about storing beans. The host, Sam, says to keep them in an airtight tin somewhere cool and dark, to buy only what you'll use in two weeks, and never to keep them in the fridge. The producer wanted the show to sound warm, so the theme tune plays under the whole episode, not only the opening. They mix it with one FFmpeg command: both tracks levelled to the same loudness, and the music lowered by 8 dB. Measured on the result, the music sits only about 6 dB below the voice, under every word. Someone with normal hearing follows it with a little effort. A listener who is hard of hearing hears a voice and a tune of almost the same weight, and can't pick out whether the fridge is a yes or a no. The page has no way to turn the music off.
Success criterion 1.4.7, at Level AAA, covers prerecorded audio-only content that is mostly speech in the foreground, such as a podcast or an audio guide, and is not an audio CAPTCHA, an audio logo or singing. It asks for one of three things: no background sound; a way to turn the background sound off; or background sound at least 20 dB lower than the speech, apart from occasional sounds of a second or two. WCAG notes that 20 dB lower is about four times quieter, and W3C chose the figure from research on assistive listening systems. Here the music is under the speech throughout, about 6 dB down, and can't be turned off, so it fails all three.
The mix setting is not the gap. Levelling by loudness, as loudnorm does, weighs frequencies the way the ear hears them, while the gap is measured on the sound itself. So lowering the music by 8 dB after levelling left it about 6 dB below the voice, and the producer, reading their own command, believed it was further down than it was. The transcript under the player passes 1.2.1 for people who can't hear the episode, but it doesn't help someone who listens and needs the speech clear.
Anyone listening through a phone speaker, or in a car or a kitchen, has other sound around the episode as well, and the music under the speech makes it harder still. A clear mix helps them too.
2 of 10 groups affected
- No vision (not affected)
- Low vision (not affected)
- Colour vision (not affected)
- No hearing (not affected)
- Hard of hearing (affected)
- No speech (not affected)
- Motor (not affected)
- Reach, strength (not affected)
- Cognitive (affected)
- Seizures (not affected)
- Limited hearing People who are hard of hearing often find it very hard to separate speech from background sound. With the music only about 6 dB down under every word, the storage tips are hard to pick out, and a short word such as "never" is easy to lose.
- Limited language, cognitive and learning abilities Listeners who find it hard to filter out sound may need more effort to follow speech over music.
No rule in axe looks at the sound inside a file. EaseWeb's audit raises a review lead for every recorded <audio> player, under 1.2.1, asking for a transcript; it does not measure the mix. Measuring needs a person to choose the parts: Audacity's Contrast tool compares a selection of speech with a selection of background sound alone, by RMS, and says whether the difference passes 1.4.7. Where the music never stops, the background-only parts are the gaps between lines and the intro, so the producer's separate tracks give the surest numbers. Tools that use AI to split a finished file into voice and music can give an estimate when the tracks are lost.
Try it
Turn the switch on and play the episode without reading along. Where should the beans never go?
The switch muffles high sounds, a rough imitation of one common kind of hearing loss, not of anyone’s own hearing. Under the page, the scale shows how far below the voice the music measures.
Apply a fix to hear the music mixed about 23 dB down, or a Background music button that turns it off and keeps your place.
Broken Can you fix this?
Small Batch, episode 12: storing beans
Transcript
[Theme music plays under the whole episode]
Sam: Welcome to Small Batch. This week: how to store your coffee beans.
Sam: Keep them in an airtight tin, somewhere cool and dark. Buy only what you’ll use in two weeks.
Sam: And never keep them in the fridge. They take in damp, and the smell of everything around them.
How far below the voice the music measures
The fix
Keep music 20 dB below the voice, or let it be turned off
<h2>Small Batch, episode 12: storing beans</h2><audio controls preload="metadata" src="small-batch-12.mp3"></audio><details> <summary>Transcript</summary> <p>[Theme music plays under the whole episode]</p> <p><b>Sam:</b> Welcome to Small Batch. This week: how to store your coffee beans.</p> <p><b>Sam:</b> Keep them in an airtight tin, somewhere cool and dark. Buy only what you’ll use in two weeks.</p> <p><b>Sam:</b> And never keep them in the fridge. They take in damp, and the smell of everything around them.</p></details>What is wrong3 points
- The theme plays under every word, not only between the lines.
- Lowered by 8 dB after levelling, it measures only about 6 dB below the voice.
- There is no version without it, and no control on the page to turn it off.
The music mixed at least 20 dB below the voice
<h2>Small Batch, episode 12: storing beans</h2><audio controls preload="metadata" src="small-batch-12.mp3"></audio><details> <summary>Transcript</summary> <p>[Theme music plays under the whole episode]</p> <p><b>Sam:</b> Welcome to Small Batch. This week: how to store your coffee beans.</p> <p><b>Sam:</b> Keep them in an airtight tin, somewhere cool and dark. Buy only what you’ll use in two weeks.</p> <p><b>Sam:</b> And never keep them in the fridge. They take in damp, and the smell of everything around them.</p></details>How it is fixed3 steps
- Lower the music further in the mix: here by 25 dB after levelling.
- Measure the result, voice against music alone, in several places through the episode. Here it comes out about 23 dB, about 2 dB short of the setting, and over the 20 dB the criterion asks for.
- Write the measured gap beside the command, so the next episode is mixed and checked the same way.
This fixes the Before and passes 1.4.7. The music is still there, but about five times quieter than the voice instead of about one and a half, and every listener gets the same clear file, on the website and in every podcast app. Leaving the music out entirely passes too.
Both pass 1.4.7. Mix the music at least 20 dB down: it does the same job with one file and nothing to find, and the clear mix goes wherever the episode goes, including podcast apps. The button keeps the louder mix for listeners who like it, at the cost of a second file, a script, and a listener who has to know to look for it. If the music matters to the show, use the button as well as a quieter mix, not instead of one.
Lower the music only where someone speaks, if the show needs its theme at full level. Editors call this ducking: the intro and the breaks between segments play the theme as it is, and it drops under each line. An intro, a sting between segments or a jingle where nobody speaks is not background to speech. Under speech, the criterion allows a louder sound only if it is occasional and lasts a second or two, such as a door or a laugh.
Measure the gap on the result, the way the criterion is tested. Audacity's Contrast tool, under Analyze, takes a selection of speech as the foreground and a selection of background sound alone as the background, measures each by RMS, and reports a pass when the difference is 20 dB or more. Its manual says to check several places, which matters here, since music changes through an episode. Settings don't tell you the gap: levelling by loudness, compression and the music's own dynamics all move it, which is why the 8 dB setting here measured about 6.
The criterion covers audio-only content: podcasts, audio guides, audio clips. A video's soundtrack is not covered by 1.4.7, though the same mix helps its viewers too. It doesn't cover audio CAPTCHAs, audio logos such as a station's three-note jingle, or singing and rapping, where the music is the point.
The same goes for sound recorded with the speech, such as an interview in a busy café. It can't be lowered after the fact as easily as a separate music track. Record somewhere quieter, with the microphone close to each speaker, and use noise reduction carefully, since too much makes the voice harder to follow. Then measure the voice against the room's sound alone, in a pause.
A transcript is a separate requirement, 1.2.1, for people who can't hear the episode at all, and it's covered in podcasts and silent videos with no transcript. Keep it whichever fix you choose.
Verify the fix
4 checks, no mouse.
Test with: Audio level measurement, Keyboard, Screen reader
Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step, with the measuring tool and its version. Repeat for each new episode, since the music and the mix change with it.
How screen readers handle aria-pressed
Limits
This is a starting pattern, not a guarantee for every application. A measured gap of 20 dB is the criterion's line, not a promise that every listener will follow the speech: the people who will listen are the best test. Sound that starts by itself is covered in autoplaying sound with no way to stop it, and the transcript in podcasts and silent videos with no transcript. Test the complete journey on the players and podcast apps the episode really plays in.
This is a recreated teaching example, not a finding about a named client. The code is a starting pattern: test it in your own product. No completed assistive-technology test is claimed here.
References
- WCAG Understanding: low-or-no-background-audio (opens in a new tab)
- WCAG Technique G56 (opens in a new tab)
- manual.audacityteam.org: contrast (opens in a new tab)
- ffmpeg.org: ffmpeg-filters (opens in a new tab)
- ffmpeg.org: ffmpeg-filters (opens in a new tab)
- developer.mozilla.org: audio (opens in a new tab)
EaseWeb service
Fixed it? Keep it from coming back.
I turn guides like this one into rules your coding agents follow and checks your CI runs. Then I retest by hand with a keyboard and screen readers, periodically.