The queue
There is one queue. It is the whole application state: what you are listening to, in the order you are listening to it.
Getting audio in
Every route lands in the same queue:
- Drag and drop files or folders onto the window or the Dock icon.
- Open (
⌘O) for the standard file panel. - Finder — Open With → Fadenza, or set Fadenza as the default for a format.
- Playlists — M3U, M3U8 and PLS, local or at a URL.
- Stream URLs — anything served over HTTP or HTTPS.
fadenza://URLs, for scripts and other apps.
Folders are read recursively, to 32 levels deep and 20,000 files per import. Both limits exist so that pointing Fadenza at your home directory by accident is an inconvenience rather than a hang.
An import never gives up partway. If one file in a folder is corrupt or unreadable, the rest still import, and you are told what was rejected and why. A silent partial import is the failure mode this rule exists to prevent.
Ordering and editing
Drag rows to reorder. Select several with shift or command and move, remove or play them together.
⌘⌫ removes the selection. Right-click any row for:
- Play — start this track now
- Play Next — move it directly after the current track
- Reveal in Finder
- Copy Source URL
- Remove from Queue
Row badges
Each row shows its own state. The four you will see:
| Badge | Meaning |
|---|---|
| Loading | Being prepared — reading metadata, resolving the source |
| Missing | The file has moved, been deleted, or access was not granted |
| Unsupported | The format is not one Fadenza plays |
| Failed | It tried and could not — the reason is in the tooltip |
A track with any of these badges stays in the queue. Fadenza never removes a track to tidy up. If something is wrong you can see which track, see why, and decide what to do about it.
For a missing file whose permission has lapsed — which happens when a sandboxed app’s saved access to a folder goes stale — the row offers to reopen the file panel so you can grant access again.
When playback hits a bad track
If the current track fails, Fadenza moves to the next one, waiting 250 ms between attempts. It stops once it has come back around to where it started or exhausted the tracks it has tried, so a queue of entirely broken files reports the problem instead of spinning.
Duplicates
Whether a track is added twice depends on how it got there, because the two cases mean different things:
| Added by | Duplicate of something already in the queue? |
|---|---|
| Dragging, or the Open panel | Added again |
| A playlist file | Added again |
| Expanding a folder | Skipped |
| A watched folder | Skipped |
Dragging the same track in twice is something you did on purpose. A folder rescan re-adding 400 files you already have is not.
Matching is done on a normalized form of the source, so /Music/A.mp3 and /music/a.mp3 are
recognized as the same file on a case-insensitive volume. For stream URLs, query strings are
compared exactly — they are frequently load-bearing.
Watched folders
A watched folder is added to the queue and then kept in sync: new files appearing in it are queued automatically.
Each watched folder keeps a list of what you have removed. Delete a track that came from a watched folder and it stays deleted — the next scan will not bring it back. This is the difference between a folder watcher that is useful and one you turn off after a day.
Repeat and shuffle
Repeat has three modes, and the middle one behaves differently depending on how the track ended:
| Mode | A track reaches its end | You press Next |
|---|---|---|
| Off | Move on; stop after the last track | Move on; nothing to do on the last track |
| One | Replay the same track | Move on |
| All | Move on; wrap to the first | Move on; wrap to the first |
Shuffle generates an order for the whole queue rather than picking a random track each time. That means no repeats until the queue is exhausted, and the order is stable — it is saved with the session and resumes exactly as it was, rather than reshuffling when you reopen the app.
Previous depends on where you are in the track: past three seconds it seeks back to the start, before that it moves to the previous track.