Fadenza

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”.