How the desktop port actually works — the engine, the failure handling, the package, and the things it deliberately does not do. Written for people who want to know before they install. You decide.
The Android app runs two engines: LibVLC for ICY streams and ExoPlayer for HLS. On Windows there is only LibVLC — the same engine VLC Media Player is built on, and here it plays HLS as well. One engine means one set of rules for buffering, metadata and errors, instead of two that behave differently on the same stream.
HTTP and HTTPS, ICY metadata, MP3, AAC, Ogg Vorbis, HLS (.m3u8), RTSP. Paste a URL — there is no engine to pick and no format to declare.
LibVLC ships hundreds of plugins, nearly all of them for video, capture and streaming out. The package carries only the ones an audio player actually loads — the rest are dead weight in an installer people download over a phone connection.
AAC is decoded by the decoder that is already part of Windows, not by a bundled one. Fewer moving parts in the package, and no licence question about shipping someone else's decoder.
LibVLC reports what the stream announces, and a separate ICY probe reads the title directly — because LibVLC only surfaces ICY titles over plain http://. Whichever answers first wins.
The artist and title are looked up at iTunes, Deezer and AudioAddict; the first cover found is shown. Station logos and covers are cached on disk, and the cache is capped at 100 MB so it cannot grow without limit.
Every call into LibVLC — play, stop, volume, equalizer — is queued onto a single thread. Calling a media player from two threads at once is how a desktop app disappears without a message, and this is the discipline that stops it.
A dead stream usually does not report an error. The server keeps the connection open, the player still says "playing", and the music simply stops — that is the failure that matters, because it is the one nobody notices until the room goes quiet.
Two counters are watched: bytes pulled from the stream and audio buffers actually played. Both flat for six seconds means the stream is wedged, whatever the player claims about its state.
A wedged or dropped stream is reconnected on its own. If reconnecting is not enough, the whole player is torn down and rebuilt — the same recovery the car version uses, where nobody can pick up a phone and press a button.
Long enough to ride out a hiccup, short enough that pressing play does not feel broken. The number came out of measurements, not taste.
Ten bands from 60 Hz to 16 kHz, ±20 dB each, applied inside the LibVLC pipeline — so it works on every stream format, not only on the ones a system effect happens to support. Presets are saved as files you can copy between machines, and the format is the same one the phone app uses.
60, 170, 310, 600 Hz, then 1, 3, 6, 12, 14 and 16 kHz. Bands can be linked so one slider moves the neighbours with it.
Saved to Documents\RadioA\EQ, loaded from there, shared with the phone version. Deleting the app never touches them.
The equalizer is set up before the stream starts. Attaching it mid-playback costs about a second of silence — not a crash, just a gap, and the kind of detail that only shows up if you measure it.
Self-contained: .NET 10, the Windows App SDK and LibVLC all travel inside the package. No runtime to fetch, no framework to match. The Microsoft Store is the only place to get it.
The Store checks and signs the package, installs it for your Windows account without administrator rights, and delivers every update. A copy from anywhere else may have been altered.
Removing the app also removes its station list, settings and cache. Save your stations as a playlist first (PLS tab) — playlists, equalizer presets and skins in Documents are never touched.
Nothing runs at sign-in unless you switch on Start with Windows, and nothing phones home. Updates come through the Store.
The app connects to the stations you choose, to iTunes or Deezer to look up the cover of the track that is playing, and to radio-browser.info or AudioAddict to find a station's logo. Nothing else: no analytics, no crash reporting service, no account, no ads. The full list is in the privacy policy.
Playlists, equalizer presets and skins you save are plain files in Documents\RadioA, in the same formats as on the phone. Copy them across and they work. Your station list and settings stay in the app's folder under %LOCALAPPDATA%.
No diagnostic log is written unless you create an empty file called DIAG in Documents\RadioA. It stays on your disk either way — there is nowhere for it to be sent.
LibVLC and LibVLCSharp under LGPL-2.1, .NET MAUI and the Community Toolkit under MIT, Material Icons under Apache-2.0. Full texts install next to the program and are readable from the app.
This is a young port of a mature phone app. Here is the state of it, so you can decide whether it is worth your disk space.
| Feature | Android | Windows |
|---|---|---|
| Audio engine | LibVLC + ExoPlayer | LibVLC only |
| ICY metadata and cover art | yes | yes |
| 10-band equalizer with presets | yes | yes |
| Skins, VU meters, sleep timer | yes | yes |
| PLS / JSON playlists, same format | yes | yes |
| Reconnect and watchdog | yes | yes |
| Keeps playing in the background | foreground service | system tray |
| Keyboard shortcuts and media keys | — | yes |
| Resizable window, two-column player | — | yes |
| Mouse: wheel volume, back button, drag to reorder | — | yes |
| Android Auto | certified | not applicable |
| Bluetooth media session (AVRCP) | yes | — |
| Wi-Fi → mobile data fallback | yes | not applicable |
| Chromecast / TV | yes | — |
| Distribution | Google Play | Microsoft Store |
Free, no ads, no tracking. Windows 11 x64, from the Microsoft Store, your playlists stay yours.