Every result is sorted into groups such as Public Radio, News and Talk, Jazz, Rock, Country and Folk, and Electronic and Ambient, with a heading in the log for each. The green chips above the log filter to one group, and the TUNING knob, PREV, and NEXT then stay inside that group. Grouping is worked out from each station's own tags and name, so a station with poor tags may land in Eclectic and Other.
SCAN checks every station in the current list from this device, four at a time, and marks each with a green dot if its server answers or strikes it through if nothing answers at any of its addresses. HIDE DEAD drops the struck ones, and TUNING, PREV, and NEXT skip them too. When a station answers at a different address than the catalog lists, that address is remembered and used when you tune. Results keep for 12 hours.
Answering is a strong sign, not a guarantee: a server can reply and still refuse to play outside its own website. The catalog also checks every station once a day and DIAL already leaves out the ones that failed, so a scan mostly catches stations that went down since then, or that your network blocks.
SomaFM's channels play on SomaFM's own site but may refuse to play inside another web page. If a SomaFM channel will not start, DIAL offers two links after a few tries: PLAY SOMAFM'S MP3 LINK, which opens the stream in the browser's own player the same way the MP3 link on SomaFM's page does, and OPEN SOMAFM'S CHANNEL PAGE, which has their web player. SomaFM is listener supported; consider supporting them at somafm.com.
Once a station is tuned, the window under the dial scrolls its call sign, name, city and state, band and frequency, and bitrate, continuously from right to left.
If the station publishes what is playing in a way a web page is allowed to read, the song title joins the scroll as NOW PLAYING and refreshes every 30 seconds. DIAL quietly tries five sources derived from the stream address: Radio.co, laut.fm, AzuraCast, Icecast status, and Shoutcast stats. Whichever answers first wins.
Many stations will still show nothing, and that is not a fault. The title normally rides inside the stream as ICY metadata, which the browser keeps to itself and never hands to the page. Reading the station's own website instead is blocked by the same cross origin rule that killed the tone controls: a page cannot fetch another site's pages unless that site says it may, and station websites almost never do. Getting around it needs a small server of your own standing between this page and the station, which a single file has no way to provide. Nothing here is ever invented, so the readout stays quiet rather than guessing.
The meter above the speaker is a show piece, and it is labeled honestly here: the browser will not let the page read a stream's actual levels, so the needle is animated rather than measured. It only moves while audio is really playing, drops when the stream buffers or stops, follows the VOLUME knob, rises a little for the HISS knob, kicks when you change stations, and swings with the weight of a real VU movement. The red PEAK light flashes when it pushes past zero. The scale is laid out like a real VU face, spaced by signal voltage, which is why the numbers crowd together at the top end.
An earlier build had bass, treble, echo, and a spectrum analyzer. They are gone on purpose. A web page may only process or measure audio that the stream's server explicitly allows it to read, and most stations do not. On those, the browser still plays the sound but hands the page silence, so the knobs moved and nothing happened and the meter sat dead. Rather than ship controls that work on a minority of stations, DIAL now plays every stream the simple way, which is also the most reliable way, and keeps only the controls that always work. The noise bed and the tuning clicks are made inside the page, which is why those are real.
Stations come from the Radio Browser community catalog, which is free and needs no key. Entries are submitted by the public, so coverage of small local stations is uneven, and the distance search only returns stations whose submitter added coordinates. Frequencies are parsed out of station names, so a row reading STREAM means the entry carried no frequency. These are internet streams, not over the air signals.
DIAL is one HTML file with no build step and no dependencies. Copy it, download it, edit it, host it.