Language Learning Radio: How We Vet Every Station
Language learning radio is only useful if the station actually speaks the language you're learning. Taalhammer offers 199 live radio stations in 19 languages, and every station we've added since October 2026 had to survive a day of recorded airtime, checked clip by clip by four audio models, and then a human listen. In the last two rounds we started with 6,600 candidates and added 74, roughly one in 90. Here's how the vetting works, and where it still falls short.
Contents
- Can you learn a language by listening to radio?
- Italian radio online is often not Italian
- Step 1: casting a wide net for foreign language radio
- Step 2: does it even play?
- Step 3: a 30-second first impression
- Step 4: recording every station for a day
- Step 5: spoken language identification, where two models must agree
- Step 6: the verdict rules
- Step 7: a human listens
- Step 8: language learning radio in the app
- What our language learning radio still can't do
- FAQ
Can you learn a language by listening to radio?
Not on its own, but it's the easiest extra hour of listening you'll ever get: you put it on while commuting, walking, jogging or at the gym, and you hear the language at native speed from dozens of real voices. That variety matters, because varied native speech from many voices is what pronunciation research rewards (we collected the evidence in what music and talk radio really do for your pronunciation). Treat it as listening for pleasure, put live radio on after your sentence queue, not instead of it, and if you're stuck at the intermediate level, it's a cheap way to add hours. The mechanics are in how to listen to radio stations in the app. The rest of this article is about the part nobody sees: choosing the stations.
Italian radio online is often not Italian
Search for Italian radio online and you'll find hundreds of streams with Italy in the name. Many of them play mostly English songs. That's normal for music radio outside the English-speaking world: the charts are international, and a station plays what its listeners stream. For language learning radio, that's the whole problem.
Some countries push back by law. In France, Law 94-88 of 1 February 1994 requires radio stations to play 40% French-language songs, an obligation that applies since 1996, as a French Senate question on the law records. Italy has no such quota law, so an Italian station's language mix is whatever its programmers choose.
Here is what that looks like when you measure it. These are five Italian stations from our October watch, each recorded for 28 hours. The shares are of voiced time, meaning speech plus singing.
| Station | Kind | Italian | English | Worst hour for English | Verdict |
|---|---|---|---|---|---|
| RTR 99 Canale Pooh | music | 96.8% | 0.0% | 0% | PASS |
| 70 80 90 Italia d'Autore | music | 89.7% | 7.5% | 34% | FAIL |
| Exclusively Italy | music | 83.3% | 10.0% | 33% | FAIL |
| RTL 102.5 | mixed | 65.4% | 23.8% | 82% | FAIL |
| Virgin Radio Italia | music | 30.2% | 56.0% | 100% | short of data |
A station called "Exclusively Italy" ran a tenth of its voiced time in English. A station of Italian classics was nearly there across the whole day, but one hour reached 34% English, and that's the hour you might happen to tune in. The same pattern showed up elsewhere: Dutch and Romanian music stations ran roughly 10–40% English vocals.
We didn't start out measuring this. On 11 October 2026 we checked our own older picks. Stations we had listed as "Only Norwegian music" were playing Toni Braxton, Aerosmith and Zara Larsson. A "24-hour Norwegian news" channel aired English and Danish. And 10 of 24 stations in the four pilot languages wouldn't even start in a browser. A good name and a directory tag told us nothing.
Talk radio has its own traps. News quotes English soundbites. NRK Nyheter, a Norwegian news channel, spent one afternoon relaying a live English football commentary. And a station can be 100% in the language yet still wrong for a learner: Quran recitation stations are pure Arabic, but Classical Arabic, not the spoken language people use. That last case is why a person still listens before anything ships.
Step 1: casting a wide net for foreign language radio
To find good foreign language radio, you first need a lot of bad candidates. For the last two rounds (12 languages) we collected 6,600 of them from four kinds of source:
- radio-browser.info, the big open directory of internet radio streams, searched by country, language tag, genre and station name.
- National directory sites that list local stations radio-browser misses, such as onlineradiobox. This is where the small single-genre channels live, which are often exactly what a learner wants.
- Broadcaster catalogues, the public channel lists of national broadcasters like NRK, DR and ERT.
- Web searches for stations that advertise "100%
music" and for call-in and talk shows.
Name search turned out to matter more than tags. Nordic music stations that play only Norwegian or Danish songs are usually untagged, and so are Chinese storytelling and comedy channels. Stations already in our catalogue were excluded automatically.
Step 2: does it even play?
A stream that plays in a terminal often won't play in a browser. So we tested 6,583 candidates in two passes.
The first pass is a network probe. It follows playlist wrappers (.m3u, .pls), tries https first, reads the Icecast and Shoutcast headers, checks the codec and fetches HLS playlists with the same origin header our web app sends. That left 5,844 streams alive and 4,921 likely playable.
The second pass is a real Chrome browser. For every station that made the shortlist, a script opens our own origin and plays the stream the way the app does. Some streams answer perfectly to command-line tools and still fail here: a server that refuses a browser's origin, an old Icecast build that makes Chrome download the stream instead of playing it, an http-only host on an https page.
Here's what the catalogue runs on today:
| Stream type | Stations |
|---|---|
| Icecast / Shoutcast (MP3, AAC, HE-AAC) | 182 |
| HLS | 17 |
What we reject: links with tokens that expire after minutes or hours, streams that are geo-blocked outside their country, and players that refuse browsers. That's why some famous stations are missing. Korea's KBS and MBC hand out expiring stream links, Japan's radiko is meant for listeners inside Japan, and NHK's domestic radio is geo-blocked. We'd love to carry them. They don't let us.
Step 3: a 30-second first impression
The next filter is cheap. We recorded one 30-second clip from each of 1,587 stations and ran it through the full classifier described in step 5. A clip with several seconds of clearly wrong-language audio, or with nothing but silence, drops the station, unless the station's name explicitly claims the language, in which case it gets the benefit of the doubt.
That left 397 stations on the shortlist. We kept the mix balanced on purpose: music, talk and mixed stations for each language, because a learner who wants news and one who wants songs are both real.
Step 4: recording every station for a day
Thirty seconds can be lucky. So the shortlisted stations were recorded for a day: a 30-second clip every 10 minutes, for 24 to 28 hours per station. That way night shows, ad breaks, the morning programme and the hour where the DJ plays English hits are all in the sample.
The numbers from that run:
- 342 stations recorded for 24–28 hours
- 50,495 clips, about 420 hours of audio
- 25,590 "now playing" song titles read from the stream metadata
- A median of 145 samples per station we shipped, which is one clip every 10 minutes for a full day
All of it ran on one laptop. Recording never pauses, but the classifier does: it backs off when the machine is busy and catches up later, oldest clip first. A station that dies halfway through doesn't get a free pass either. Its missing slots count as dead air, and a station that's down for more than half the slots is marked DEAD.
Step 5: spoken language identification, where two models must agree
Each clip goes through the same chain. Everything runs locally, the results are deterministic and the cost per clip is zero. One clip takes about 4 seconds of CPU on the laptop.
1. What's on air, second by second. PANNs (Kong et al., 2020), a sound-event network trained on Google's AudioSet, labels every second as speech, music or silence. A DJ talking over a music bed counts as speech.
2. Is anyone singing? PANNs has a "singing" label, but it can't hear vocals inside a pop mix. We measured it on four songs with clear vocals and it never scored above 0.06. So for music seconds we use Demucs, in its htdemucs version (Rouard, Massa & Défossez, 2022), to split off the vocal track. If the vocals carry at least 35% of the loudness of the mix, that second is singing; otherwise it's instrumental.
3. Which language? The clip is cut into 10-second windows, and every window with at least 4 seconds of voice gets a language label. For speech, two independent models vote: faster-whisper, a fast version of OpenAI's Whisper (Radford et al., 2022), and a VoxLingua107 model trained on the dataset by Valk & Alumäe (2021).
| Whisper says | VoxLingua says | We record |
|---|---|---|
| target language | target language | target |
| English | English | English |
| the same other language | the same other language | that language |
| anything else | anything else | unsure |
Unsure is never a free pass. It counts against the station. Why two models? Whisper on its own is overconfident when a speaker switches languages mid-sentence, and it confuses close neighbours like Norwegian and Swedish. VoxLingua is weaker on short speech over a music bed. Where they agree, we trust the answer.
4. Which language is being sung? VoxLingua was trained on speech, so for singing we run Whisper alone on the isolated vocal track, and anything under 60% confidence is unsure. Sung language is the weakest signal in the chain, so we have a second source. Many stations send the title of the current song, and we look each one up in MusicBrainz, the open music database, which often records the language of a release. When the title resolves to a language, it overrides the audio model. "Toni Braxton – Un-Break My Heart" needs no audio analysis.
If you've wondered how to identify language from audio yourself, this is the honest answer: one model gives you a guess, and two that agree give you something you can act on. Off-the-shelf language detection for audio is built for a clean voice recording, not for a DJ talking over a song. We use the same habit of checking a measuring tool before trusting it in how we test which TTS voices get pronunciation right and in how pronunciation assessment works.
Step 6: the verdict rules
All shares are counted over voiced time, that is speech plus singing. Instrumental music is neutral: it neither helps nor hurts.
| Verdict | Rule | Can it ship? |
|---|---|---|
| PASS | English ≤ 2%, other languages ≤ 3%, unsure ≤ 5%, target ≥ 90%, and no single hour with English above 10% | yes |
| WATCH | talk-led station (speech ≥ 70% of voiced time): English ≤ 5%, other ≤ 5%, unsure ≤ 8%, target ≥ 85% | yes, talk only |
| FAIL | anything else | no |
| DEAD | fewer than half of the 10-minute slots captured | no |
| Short of data | less than 60 minutes of voiced audio | needs a listen or a second day |
The WATCH tier exists because news quotes people. A 5% allowance covers an English soundbite in a Norwegian news bulletin. Music stations never ship on WATCH.
And here's the real distribution across the 342 stations we recorded:
| Verdict | Stations |
|---|---|
| PASS | 18 |
| WATCH | 7 |
| FAIL | 49 |
| Short of data | 267 |
| DEAD | 1 |
That "short of data" row is large, and it's our own doing. A clip every 10 minutes gives 72 minutes of audio a day, and only 60–80% of that is voice once you take out ads, jingles and instrumentals. Many stations were measured clean but ended up just under the 60-minute bar. We didn't lower the bar to make the table look better. Those stations went to the human listen with their numbers attached, and their English share decided whether they were worth a listen at all.
Across the measured stations we shipped, the median station was 90.4% target language and 0.0% English. That's the bar we think language learning radio should meet, and the reason the list is short.
Step 7: a human listens
The machine produces a ranked list, and a person makes the final call. Every candidate sits on one review page with a play button, its measured shares and its worst hour. Next to it is the report with evidence snippets: the exact 10-second windows the models flagged, transcribed. The reviewer marks each station add or drop and leaves a note.
In round 3 we reviewed 42 stations and added 27. The reasons for dropping a station the machine liked were all things a model doesn't score:
- an expired stream token (KBS 1R)
- silence or an empty signal for long stretches
- church songs, which are in the language but not what a learner is looking for
- English music coming back after a clean stretch
- a stream so quiet you had to turn the volume all the way up
Step 8: language learning radio in the app
A station that passes gets a logo and a short description in all 12 interface languages, written from what we measured. A script checks every description: "only Danish music" is allowed only when English plus other languages came to 2% or less. Stations for the language you're learning come first.
Here is the catalogue today. The kind columns cover the 97 stations we measured with this process; the other 102 stations were hand-picked before the pipeline existed, so we don't have a measured kind for them.
| Language | Stations | Measured: music / talk / mixed |
|---|---|---|
| Indonesian | 21 | 11 / 5 / 2 |
| Chinese | 19 | 3 / 8 / 4 (+1 instrumental) |
| Greek | 15 | 7 / 4 / 3 |
| Norwegian | 14 | 7 / 6 / 1 |
| Portuguese | 14 | 3 / 4 / 1 |
| Italian | 11 | 2 / 2 / 0 |
| Dutch | 11 | 0 / 2 / 0 |
| Arabic | 11 | 3 / 2 / 0 |
| German | 10 | not measured |
| English | 9 | not measured |
| Japanese | 9 | 3 / 1 / 0 |
| Korean | 8 | 1 / 1 / 0 |
| Polish | 8 | not measured |
| Romanian | 8 | 0 / 1 / 1 |
| Danish | 8 | 4 / 2 / 2 |
| Swedish | 7 | not measured |
| French | 6 | not measured |
| Czech | 6 | not measured |
| Spanish | 4 | not measured |
| Total | 199 | 44 / 38 / 14 (+1) |
What our language learning radio still can't do
Sung language is the weakest signal. Norwegian dance-band songs often come out as Swedish, and Indonesian dangdut as Malay or Javanese. A music station with 0% English can sit at 40–60% target simply because the model isn't sure. Our rules can't ship that on their own, so those stations go to a human. Norwegian is hard for speech too: Whisper hears Norwegian sports commentary as Swedish often enough to matter, and it's one reason we wrote about Norwegian's two tones separately.
One day is a snapshot. Stations change formats, hire new DJs and switch playlists. The watcher can re-run on any station, but a measurement is true for the day it was taken.
Not every station was measured. The 102 stations picked before October 2026 were chosen by hand, not recorded for a day.
Some countries are hard to reach. Most Japanese and Korean domestic radio can't be streamed from outside the country, so those languages have fewer stations than they deserve.
FAQ
Can you learn a language just by listening to the radio?
Not from zero. Radio gives you hours of native speech at full speed, which helps your ear once you understand a fair share of what you hear. It doesn't teach new words in a way that sticks, so pair it with active practice. Language learning radio works best as the easy listening you add around your study time.
How do you identify language from audio?
Use more than one model and keep the disagreements. We cut each clip into 10-second windows, ask Whisper and a VoxLingua107 model for the language, and accept the answer only when both agree. If they don't, the window counts as unsure, and unsure counts against the station.
Is a station's music really in the language?
Only measurement can tell you. We separate the vocals from the music, identify the sung language, and check song titles against MusicBrainz. A station named after a country, or called "100%" its language, can still play a lot of English. We've measured one with "Exclusively" in its name at 10%.
Why do foreign stations play so much English music?
Because pop charts are international and stations play what their listeners stream. France answered this with Law 94-88, which requires 40% French-language songs. Most countries, Italy included, have no such quota, so the mix depends on each station.
Why are some famous stations missing?
Because they don't play in a browser outside their country. Korea's KBS and MBC use stream links that expire, Japan's radiko is meant for listeners in Japan, and NHK's domestic radio is geo-blocked. A station that can't play reliably in the app isn't worth listing, however good it is.