Une bibliothèque qui tient la charge
Un scanner parallèle lit les tags complets, les durées réelles et le codec propre à chaque fichier, pas un survol d'en-tête. La surveillance des dossiers survit aux renommages, et rien ne disparaît en silence.
Un lecteur de musique pour ceux dont la bibliothèque locale est grande et taguée avec soin. Les panneaux, tu les composes toi-même ; un thème, c'est un seul fichier, à donner à qui tu veux. Natif sur Linux, macOS et Windows.
Sous Arch ou NixOS ? Installe-le plutôt depuis l'AUR ou le flake Nix.
rox tient dans un seul binaire et démarre avant que tu n'aies lâché la souris.
| Lecteur | Fenêtre affichée | Entièrement chargé | Mémoire | CPU au repos |
|---|---|---|---|---|
| rox | 0,3 s | 2,3 s | 134 MB | 0,5 % |
| Elisa | 0,7 s | ne se stabilise jamais | 206 MB | 74 % |
| fooyin | 0,3 s | 18 s | 364 MB | 0 % |
| Quod Libet | - | 19 s | 384 MB | 0,2 % |
| Strawberry | 0,3 s | 32 s | 434 MB | 0,8 % |
| Museeks | - | 3 s | 436 MB | 0 % |
| Tauon | 8,7 s | 12 s | 2,8 GB | 0 % |
J'ai mesuré tout cela moi-même, sur une seule machine (Ryzen 9 5950X, Linux/Wayland), avec la même bibliothèque de 50 000 pistes sur un SSD externe, chaque lecteur passé dans le même banc d'essai avec sa bibliothèque chargée. La mémoire est le PSS sur l'ensemble de l'arbre de processus. « Chargé » signifie que le CPU s'est stabilisé après le lancement ; le repos, c'est un lecteur en pause avec la fenêtre visible. DeaDBeeF se serait posé à 44 Mo et aurait gagné sur la mémoire, mais il n'a jamais eu de ligne : son analyseur MP3 part en segfault en plein import de cette bibliothèque, à chaque tentative. rox indexe les 50 000 pistes, y compris les fichiers tronqués sur lesquels il bute.
Un scanner parallèle lit les tags complets, les durées réelles et le codec propre à chaque fichier, pas un survol d'en-tête. La surveillance des dossiers survit aux renommages, et rien ne disparaît en silence.
Un éditeur complet, écritures atomiques, modifications par lots et rechercher-remplacer. Les notes vivent dans les fichiers eux-mêmes via FMPS et POPM. Recherche via MusicBrainz, iTunes et Deezer.
Un FLAC couvrant tout un disque, à côté de sa feuille cue, s'indexe en vraies lignes. Chaque segment se navigue, se scrobble, se trie et enchaîne sans blanc sur le suivant, exactement comme un fichier.
Un seul flux, avec lecture aléatoire, répétition, lire ensuite et répétition A-B. Un signet se pose d'une touche et reste sur la barre de position. Les touches multimédias et la lecture en cours fonctionnent sur les trois plateformes.
Un égaliseur dans sa propre fenêtre, un fondu enchaîné qui laisse tranquilles les enchaînements voulus d'un album, et une sortie exclusive qui dit ce que le matériel a réellement accepté.
rox décrit tes pistes à partir de leur propre audio, tempo compris, et ordonne la suite par ressemblance. Tout tourne sur ta machine, sur tes fichiers, sans service dans la boucle.
Une quarantaine de types de panneaux, de la bibliothèque et la file d'attente aux grilles d'artistes, au spectre et au VU-mètre. Duplique-en un avec sa configuration, enregistre-le comme préréglage, ou détache-le dans une fenêtre.
Un espace de travail est un fichier portant disposition, palette, apparence et shaders. Les palettes peuvent se teinter d'après la pochette en cours et basculer clair ou sombre avec l'image.
Écris un shader WGSL sur un panneau ou sur toute la fenêtre, ou fais tourner des préréglages Milkdrop via projectM. Des signaux nommés issus du spectre circulent sur les entrées des shaders.
Synchronisées ou simples, depuis des fichiers annexes, des tags ou lrclib, avec un éditeur qui réécrit là où il a lu. Un journal d'écoute alimente le panneau d'historique, les statistiques et le scrobbling.
Favoris, réorganisation par glisser, M3U, PLS et XSPF dans les deux sens, et playlists intelligentes qui relancent une requête enregistrée au lieu de figer un instantané. Les entrées survivent au départ et au retour d'un fichier.
Une archive tar, un DMG ou un zip, plus l'AUR et un flake Nix. Le mode portable garde la bibliothèque et les réglages dans un dossier à côté de l'exécutable.
JSON-RPC sur un socket local : transport, file d'attente, recherche et événements poussés. L'auth tient aux permissions de fichiers, rien n'écoute sur un port.
Un proxy à côté de l'application met le socket sur MCP : un client IA peut demander ce qui joue ou piloter la platine. Désactivé par défaut, revérifié à chaque appel.
Un client source pousse ce que rox joue en MP3 à ton point de montage. En sortie seulement : la face réseau est à Icecast, un serveur mort n'arrête jamais la lecture.
rox est livré avec huit espaces de travail, à un clic dans la fenêtre d'accueil. Chacun est un fichier unique portant la disposition, la palette et les shaders qu'il utilise : modifiable, cassable, transmissible. Les voir tous.