Browser Audio Format Support
Supplemental reference for Listen Here (browser-side playback).
It covers exactly the audio extensions GET /stream serves.
This table is documentation, not configuration
The product never reads it. The play page asks each browser live via
canPlayType and only a definite “no” blocks a track — so when a browser
gains a codec, Listen Here picks it up with zero code change. This page exists so humans can
reason about what listeners will experience.
The table
As of July 2026, current browser versions. ✅ plays · ⚠ see note · ❌ does not play
| Extension | Codec / container | Chrome / Edge | Firefox | Safari macOS | Safari iOS |
|---|---|---|---|---|---|
| .mp3 | MPEG-1 Layer 3 | ✅ | ✅ | ✅ | ✅ |
| .aac | AAC (ADTS) | ✅ | ✅ | ✅ | ✅ |
| .m4a | AAC in MP4 | ✅ | ✅ | ✅ | ✅ |
| .m4a | ALAC in MP4 | ❌ | ❌ | ✅ | ✅ |
| .flac | FLAC | ✅ 56+ | ✅ 51+ | ✅ 13+ | ✅ iOS 11+ |
| .ogg / .oga | Vorbis in Ogg | ✅ | ✅ | ✅ 18.4+ ⚠ | ✅ 18.4+ ⚠ |
| .opus | Opus in Ogg | ✅ 33+ | ✅ 15+ | ⚠ 18.4+ | ⚠ 18.4+ |
| .wav | PCM | ✅ | ✅ | ✅ | ✅ |
| .aiff / .aif | PCM (AIFF) | ❌ | ❌ | ✅ | ✅ |
| .wma | Windows Media | ❌ | ❌ | ❌ | ❌ |
| .ape | Monkey’s Audio ⚠ | ❌ | ❌ | ❌ | ❌ |
| .mpc | Musepack ⚠ | ❌ | ❌ | ❌ | ❌ |
| .wv | WavPack ⚠ | ❌ | ❌ | ❌ | ❌ |
| .dsf / .dff | DSD ⚠ | ❌ | ❌ | ❌ | ❌ |
Notes
- FLAC — broadly supported since ~2017: Chrome 56+, Edge 16+, Firefox 51+, Safari 11+ on iOS, but only Safari 13+ (Catalina) on macOS. Source: caniuse.com/flac.
- Ogg Vorbis — native in Safari only from 18.4 (macOS Sequoia 15.4 / iOS 18.4, March 2025). Safari 14.1–18.3 was partial: playback depended on the system’s AudioToolbox components, so it worked on some Macs and not others. Source: caniuse.com/ogg-vorbis.
- Opus — Safari 18.4 release notes claim Opus-in-Ogg support (previously Opus played only inside CAF or WebM containers on Apple platforms); at least one field report says it still fails in practice. Treat Safari Opus as unknown-leaning-yes on 18.4+ — exactly the case the live probe decides better than any table. Opus-in-MP4 remains unplayable on Safari. Source: caniuse.com/opus.
- ALAC in .m4a — Apple-ecosystem only; Chromium and Firefox decode the MP4
container’s AAC branch but not ALAC. This is also the classic container-vs-codec trap:
canPlayType('audio/mp4')answers “maybe”, then the load fails — which is why a “maybe” is attempted and any real failure is shown on the output chip rather than guessed at. - AIFF — Safari plays PCM AIFF; Chromium and Firefox do not.
- WMA — no browser plays WMA. With format conversion turned on it no longer matters: the file is converted on the way out and plays anywhere that plays FLAC. With conversion off (the default) the older behaviour stands — WMA tracks never enter the device queue and playback steps past them, noted on the output chip.
- APE, Musepack, WavPack, DSD — archival and audiophile formats that no browser has ever shipped a decoder for, and that conversion does not currently cover either. They also fail later than the rest of this table: the play page recognises the ten-odd extensions above and refuses those upfront, but it has no entry for these, so a track is queued, attempted, and reported on the output chip when the browser gives up. Listen Here is not the way to hear them; MusicBee itself plays them all.
What the play page actually probes
Per extension, Listen Here probes candidate MIME strings and blocks only when
every candidate returns '' (a definite no):
| Extension | Candidates probed |
|---|---|
| .opus | audio/ogg; codecs="opus", audio/opus |
| .flac | audio/flac, audio/ogg; codecs="flac" |
| .m4a | audio/mp4, audio/mp4; codecs="mp4a.40.2" |
| others | the single MIME type /stream sends as Content-Type |
The .opus double-probe exists because audio/opus is the
RTP payload type, not the file type — Chromium answers it '' while playing the file
fine; audio/ogg; codecs="opus" is the honest question.
Practical reading
- An all-green library for Listen Here on any device: MP3, AAC/M4A (AAC), WAV, and FLAC on anything newer than ~2017.
- Formats refused up front with “⚠ not playable here” on real devices today: WMA everywhere; AIFF off-Apple; Vorbis and Opus on pre-18.4 Safari (iPhones not updated past iOS 18.3).
- Formats that fail on the attempt instead, because the extension does not give the browser away: ALAC off-Apple, and the four archival formats (APE, Musepack, WavPack, DSD). Same outcome for the listener, one track later.
- Hearing those anyway is what format conversion is for, and MBXHub now does it: WMA, AIFF, Ogg Vorbis and Opus are converted on the way out when it is enabled. See Listen Here.
- ALAC is the one still outstanding, and the remaining gap is on the browser’s
side rather than the server’s. The server can now tell ALAC from AAC — it asks
MusicBee, whose Kind names the codec rather than the container — so a request
that asks for conversion gets it. What it never gets is the request: the page decides what to
ask for from the file extension, and
.m4aprobes as “maybe”, so an ALAC track is attempted rather than converted, and off Apple it fails on the chip.