Formats
Fadenza plays seven formats. All of them decode through frameworks that ship with macOS — there are no bundled decoders, no plugins and no C libraries in the app.
| Format | Extensions | Metadata read |
|---|---|---|
| MP3 | .mp3 |
ID3 |
| AAC | .m4a, .aac |
iTunes / MP4 |
| ALAC | .m4a |
iTunes / MP4 |
| WAV | .wav |
Limited |
| AIFF | .aiff, .aif |
Limited |
| FLAC | .flac |
Vorbis comment |
| Ogg Vorbis | .ogg, .oga |
Vorbis comment |
Opus in an Ogg container also plays. It is not on the supported list, which means it is not tested on every release, but it works.
Metadata read from any of these covers title, artist, album, track number, genre, duration and artwork. WAV and AIFF carry little or no tagging by convention, so those tracks usually show their filename.
Why not more
Everything outside that table — trackers, chiptunes, console audio, DSD, Musepack, WavPack, APE — needs a decoder written in C or C++. Adding one means adding a dependency, and Fadenza has none. That is a deliberate limit rather than a backlog item.
If you need those formats, you need a player built around decoder plugins. This is not one.
Why there is no tag editor
Apple’s frameworks can read tags in every format above. They can only write the MP4 family —
.m4a and friends — and even then by re-muxing the file rather than editing it in place. MP3,
FLAC and Ogg cannot be written at all.
This was measured rather than looked up. A probe tool in the repository generates a file in each format, attempts to write tags through the system export path, and records what happened. It fails for MP3, FLAC and Ogg every time.
An editor that worked for one format in seven would be worse than none, so there is none. Fadenza requests read-only access to your files and cannot modify them even if a bug tried to.
Verifying it yourself
The probe runs on demand and on every macOS update:
scripts/probe.sh
It exits non-zero if any required format stops playing, and rewrites the capability table with what it measured — including the exact macOS build it measured on. A format regressing is a release blocker, not a footnote.
Streams
HTTP and HTTPS streams play in the same formats. Two differences apply:
- A live or chunked stream has no seekable range, so the scrubber is disabled rather than shown as a control that does nothing.
- Streams can stall. When one does, playback enters buffering — distinct from loading, which is what happens while a track is being prepared. The interface distinguishes them so you can tell “not started yet” from “started and ran dry”.