Présentation

Sol est une application native macOS conçue pour lire les bibliothèques musicales sans les déplacer ni les convertir. Distribuée sous licence GPL‑v3, elle fonctionne sur macOS 14 ou version ultérieure et nécessite Xcode 26 (SDK macOS 26) avec le mode Swift 6 et la vérification stricte de la concurrence. Le binaire fourni est signé, notarized et disponible via un cask Homebrew :

brew install --cask fulltimefeline/tap/sol
. Aucun abonnement, aucune publicité et aucune collecte de télémétrie ne sont intégrés.

Architecture et implémentation

Le code source est organisé autour de trois répertoires majeurs : Sol/App contient le modèle, la logique de lecture et le gestionnaire de tags ; Sol/Views regroupe les interfaces SwiftUI et AppKit ; Sol/Vendor embarque les bibliothèques statiques nécessaires au décodage audio (TagLib, Monkey's Audio, Musepack, Ogg, Vorbis, opencore‑amr). Le projet est généré à partir de project.yml via xcodegen generate, ce qui garantit que le fichier Xcode n’est jamais versionné. Toutes les dépendances sont vendues en source, éliminant les étapes de téléchargement externe. La couche de lecture s’appuie sur SFBAudioEngine, un fork allégé de sbooth/SFBAudioEngine dont les décodeurs LGPL ont été retirés. Chaque composant audio est injecté dans le modèle via des closures, évitant les références croisées et facilitant les tests unitaires futurs. La conformité à la concurrence stricte est assurée par l’usage explicite de @unchecked Sendable et nonisolated(unsafe) accompagnés de justifications documentées, ce qui limite les risques de data races dans le moteur de lecture multithread.

Fonctionnalités audio et compatibilité

Sol supporte plus d’une douzaine de formats, dont FLAC, ALAC, WAV, AIFF, MP3, AAC, Ogg Vorbis, Opus, DSD, Monkey's Audio, Musepack et Wave64. La lecture est bit‑perfect : le flux audio est transmis au DAC sans modification lorsqu’il le supporte, sinon le lecteur ajuste le taux d’échantillonnage et la profondeur de bits pour correspondre au fichier source. Des fonctions avancées telles que la lecture sans coupure, le crossfade, un égaliseur à presets, le ReplayGain avec protection contre le clipping et le mode « match sample rate » sont intégrées. L’application surveille de façon asynchrone un nombre illimité de dossiers (disques internes, externes, partages réseau, iCloud) et met à jour la bibliothèque en temps réel, même pour des collections de plusieurs centaines de milliers de titres. Un moteur de recherche unique interroge titres, albums, playlists et épisodes de podcasts, en accédant à chaque métadonnée disponible, y compris le numéro de catalogue et le nom de fichier. Les métadonnées peuvent être modifiées directement dans les fichiers grâce à un éditeur capable de gérer plus de trente champs, d’appliquer des expressions régulières en lot et de synchroniser les tags avec MusicBrainz.

Analyse des limites et perspectives

Malgré sa richesse fonctionnelle, Sol ne propose pas encore de suite de tests automatisés ; les modules LibraryStore, TagWriter, CueParser, FeedParser, ReplayGain et TagReader sont identifiés comme points d’entrée pour des tests unitaires. La dépendance à Xcode 26 et à macOS 14 restreint l’adoption aux utilisateurs d’appareils Apple récents. De plus, l’utilisation de bibliothèques statiques tierces, bien que compatible GPL‑v3, augmente la taille du binaire et complique les mises à jour de sécurité indépendantes du projet principal. L’intégration Discord nécessite une application compagnon en raison des restrictions du sandbox macOS, ce qui ajoute une couche de complexité pour les utilisateurs souhaitant cette fonctionnalité. Enfin, l’absence de version multiplateforme (Linux/Windows) limite la portée du lecteur aux seuls environnements Apple, alors que la communauté open source pourrait bénéficier d’une portabilité accrue. Malgré ces contraintes, l’architecture modulaire, le respect strict de la concurrence Swift et la prise en charge exhaustive des formats audio font de Sol une référence solide pour les audiophiles macOS cherchant une solution libre et sans fioritures.