Soutenir le projet Ko-fi · Patreon · PayPal
Historique des versions

Changelog

Toutes les nouveautés, améliorations et corrections de RustMusic.

v0.1.7

Patch

21 mai 2026

Profils de qualité audio

  • 5 profils audio : Auto, Qualité maximale, Équilibré, Compatibilité, Mode dégradé
  • Détection automatique de la machine (VM, nombre de cœurs) pour choisir le preset adapté
  • Mode dégradé : filtre DSD 256 taps, sortie 44,1 kHz, pré-décodage complet en RAM (zéro underrun garanti)
  • Filtre DSD configurable par profil : 2048 / 1024 / 512 / 256 taps
  • Resampler chunk size et sub-chunks adaptés au profil choisi
  • Nouvelle section Réglages : 5 cartes de sélection et bloc d'information avec profil résolu et machine détectée

DSD multicanal — décodage parallèle & downmix

  • Parallélisation du DSD2PCM via rayon : 1 thread par canal pour les fichiers 3+ canaux (SACD 5.0 / 5.1)
  • Stéréo et mono conservés en mode séquentiel (overhead non justifié)
  • Speedup quasi-linéaire : un SACD DSD64 5.0 en Qualité maximale est désormais lisible sans grésillement sur CPU normal
  • Downmix multicanal vers stéréo conforme ITU-R BS.775 (3.0, 4.0 quad, 5.0, 5.1 avec LFE intégré)
  • Les SACD multicanaux s'écoutent désormais correctement en stéréo (voix centrale et surrounds préservés)

Pré-chargement, seek & robustesse audio

  • Pré-chargement en RAM des fichiers sur partage réseau (GVFS/SMB/NFS/SSHFS) ou en profil Bas — élimine les coupures liées à l'I/O
  • Seek instantané en Mode dégradé pour DSD : drain du ring buffer dans un Vec<f32>, CPAL en mode FullBuffer indexé
  • Correction d'une race condition CPAL sur le seek en Mode dégradé Symphonia (atomique dédié pending_seek_frames)
  • CPAL BufferSize::Fixed désormais clampé dans la plage supportée par le périphérique (fix stream silencieux sur certaines cartes Intel HD)
  • Log des erreurs CPAL rate-limité (1ère, puis 1 sur 100 jusqu'à 1000, puis 1 sur 1000) — sur VM faible on peut en recevoir des centaines/seconde
  • Defense-in-depth scanner DSD : catch_unwind à l'entrée DSD — impossible de tuer le batch d'import sur un fichier corrompu
  • Agrégation des fichiers ignorés à l'import + event Tauri enrichi (compteur skipped)

Notifications & contrôles média OS

  • Notification native au changement de morceau : Windows Action Center, macOS, libnotify Linux (titre + artiste)
  • Toggle des notifications dans les Réglages (icône cloche)
  • System Media Transport Controls : le morceau apparaît dans le mini-player Windows (volume flyout) et l'écran de verrouillage
  • MPRIS Linux (KDE Plasma, GNOME) et widget Now Playing macOS
  • Les touches média du clavier (play/pause/next/prev) fonctionnent désormais
  • Serveur HTTP local dédié pour servir les covers cross-OS — contourne la limitation Windows unpackaged qui rejette les file:// (basé sur souvlaki)

Rendu Linux & icônes hors-ligne

  • Render mode : override manuel Automatique / Accélération GPU / Rendu logiciel
  • Détection automatique des VMs avec bascule en software rendering pour la stabilité
  • Section Réglages dédiée avec bannière « Redémarrage requis »
  • Iconify offline : pré-bundling de 7 collections (lucide, heroicons, mynaui, ph, radix-icons, tabler, uit) — fix des icônes invisibles sur Debian 12 + WebKitGTK 2.40
  • Auto-config Linux : variables d'environnement WebKitGTK / GDK appliquées avant Tauri pour éviter les freezes (KVM, KDE Wayland, AMD Mesa)

Player & Pipeline UI

  • Popover hover stylé sur le badge source→sortie : affichage Source / Décodage / Resampling / Sortie / Profil avec badges Bit-perfect, DSP, DSD→PCM
  • Indication multicanal correcte dans le popover : 3.0 / 4.0 / 5.0 / 5.1 / 6.1 / 7.1
  • Layout responsive sur 3 breakpoints : mobile empilé, intermédiaire 500-768px (cover + actions en haut, transport en bas), desktop ≥768px (3 colonnes)
  • Fallback titre depuis le nom de fichier pour les DSF/DFF sans tag DITI/ID3
  • Indicateur de pré-décodage dans la StatusBar (Mo décodés / total) au lieu d'un loader dans le Player

Internationalisation

  • Parité totale des 4 langues : FR, EN, DE, ES (282/282 clés strictement identiques)
  • Sections rattrapées : bibliothèque (genres, total_duration), réglages (audio_quality, render_mode, scan_on_startup, album_covers), pipeline, statistiques, recherche

Stabilité & corrections

  • Détection automatique du format réel des images via magic bytes : fix des covers PNG/WebP renommées en .jpg (warning « Format error decoding Jpeg » éliminé)
  • svelte-check : 10 erreurs préexistantes corrigées (EditPlaylistPopin, ProfilSelectorPopin, page détail morceau avec library_artist_id côté TS + SQL JOIN library_artists)

v0.1.6

Patch

5 mai 2026

Lecture DSD (DSF + DFF)

  • Support natif des fichiers DSD (.dsf et .dff) en pur Rust, sans Symphonia ni FFmpeg
  • Conversion DSD → PCM via l'algorithme Gesemann (DSD2PCM) avec filtre Blackman-Harris 2048 taps qualité foobar2000
  • Détection automatique du débit DSD64 / 128 / 256 / 512 / 1024 et affichage en MHz
  • Pipeline complète : décodage → conversion → resampling → ring buffer → CPAL avec seek et bit-perfect
  • Badge doré dédié dans toutes les vues (liste, grille, détail, status bar) pour identifier les morceaux DSD au premier coup d'œil

Serveur DLNA / UPnP

  • Diffusion de votre musique vers les amplis et chaînes hi-fi compatibles DLNA sur le réseau local
  • Découverte automatique via SSDP : aucun appairage manuel, l'ampli détecte le serveur tout seul
  • Navigation par Artistes, Albums et Dossiers avec pochettes embarquées dans la métadata DIDL
  • Support multi-bibliothèques : chaque bibliothèque expose ses propres artistes, albums et dossiers
  • Streaming HTTP avec support des requêtes Range pour le seek depuis l'ampli
  • Section Réseau dédiée dans les paramètres : nom du serveur, port, statut, URL d'accès
  • Indicateur de statut dans la barre du lecteur pour vérifier que le serveur tourne

Extracteur de métadonnées maison

  • Refonte complète de l'extraction des tags audio : zéro dépendance externe (plus de lofty ni id3)
  • Parser ID3v2.3 / ID3v2.4 maison supportant 35+ frames (TIT2, TPE1, TALB, TCON, TBPM, POPM, APIC, USLT, etc.)
  • Tous les encodages standards gérés : ISO-8859-1, UTF-16 BE/LE avec ou sans BOM, UTF-8
  • Mapping étendu des notations POPM (rating) avec normalisation 0-5 / 0-100 / 0-255 → étoiles
  • Fallback automatique sur les images de dossier (cover.jpg, folder.jpg, front.jpg/png/webp/avif)

Interface

  • Affichage du débit en Mb/s pour les très hauts débits (au lieu de kbps quand ≥ 1000)
  • Composant NowPlayingCard réutilisable (variantes default + blur), partagé entre la file d'attente et les paroles

Stabilité

  • Correction du décodage de la colonne modified_at dans plusieurs requêtes SQL (provoquait l'invisibilité des morceaux dans la vue dossiers DLNA)
  • Logs réduits : niveau d'information minimal au démarrage, plus de spam pendant la lecture

v0.1.5

Patch

2 mai 2026

Paroles synchronisées

  • Affichage des paroles synchronisées style Apple Music avec défilement automatique sur le morceau actif
  • Récupération automatique via l'API LRCLIB (cascade /get + /search pour trouver la version synchronisée)
  • Support des fichiers sidecar .lrc placés à côté du fichier audio
  • Cache local en base SQLite pour éviter les appels réseau répétés
  • Fond flou de pochette + voile dégradé pour une immersion cinématique

Apparence

  • Nouvelle section « Apparence » dans les paramètres avec sélecteurs visuels
  • Choix du thème : Auto (système), Clair ou Sombre — appliqué instantanément
  • Aperçus visuels compacts pour chaque option (cartes responsive)
  • Suivi automatique du thème système quand le mode Auto est activé

Contrôles de fenêtre

  • Quatre styles disponibles : Auto, macOS (traffic lights), Windows ou Linux (boutons GNOME)
  • Position des contrôles configurable : à gauche ou à droite de la titlebar
  • Le mode Auto choisit le style en fonction du système d'exploitation détecté
  • Aperçus visuels dans les paramètres pour chaque combinaison

Instance unique

  • Empêche le lancement de plusieurs instances simultanées de RustMusic
  • Restaure la fenêtre existante si l'utilisateur tente de relancer l'application
  • Demande d'attention sur la barre des tâches pour notifier le retour au premier plan

v0.1.4

Patch

21 avril 2026

Pochettes d'albums

  • Récupération automatique des pochettes via l'API Deezer depuis le menu contextuel album
  • Recherche manuelle avec un popin premium et une grille de résultats
  • Sélection d'un fichier local comme pochette
  • Action groupée « Pochettes d'albums » dans les paramètres pour traiter tous les albums sans pochette
  • Nouveau filtre « Sans pochette » pour isoler les albums sans visuel

Notation des morceaux

  • Extraction automatique du tag POPM/Rating lors du scan (support des formats 0-5, 0-100 et 0-255)
  • Composant d'étoiles cliquable avec aperçu au survol et mise à jour en temps réel
  • Colonne de notation dans les vues liste et grille, ainsi que sur la page détail du morceau
  • Tri des morceaux par notation (les morceaux non notés sont placés en fin de liste)

Navigation alphabétique

  • Ascenseur A-Z sur les pages albums, artistes et morceaux pour sauter directement à une lettre
  • Lettres grisées automatiquement quand aucun élément ne commence par cette lettre
  • Bouton dédié dans la barre de vue pour afficher ou masquer la navigation

Filtres et tri

  • Refonte premium de la barre de filtres avec un menu déroulant pour le tri et un bouton de direction intégré
  • Filtre « Sans pochette » étendu aux morceaux
  • Direction descendante par défaut pour la notation, la durée et la date (plus intuitif)
  • Mémorisation du tri par contexte (morceaux, albums, artistes, genres)

Interface

  • Option « Simple clic = lecture » dans les paramètres pour lancer un morceau en un seul clic
  • Sous-menu « Ajouter à une playlist » dans les menus contextuels (ajout groupé depuis les albums ou une sélection multiple)

Stabilité

  • Double protection contre les crashs de scan avec fallback séquentiel fichier par fichier en cas de batch défaillant
  • Journalisation des fichiers problématiques pour faciliter l'identification des coupables

Corrections

  • Le tri des morceaux n'est plus réinitialisé à chaque changement de bibliothèque

v0.1.3

Patch

7 avril 2026

Sélection multiple

  • Mode sélection sur les listes de morceaux avec barre d'actions flottante (lire, ajouter à la file, ajouter à une playlist)
  • Boutons « Sélectionner » et « Tout sélectionner » dans la barre de filtres

Albums & Artistes

  • Boutons play et menu contextuel au survol des covers d'albums
  • Ajout à une playlist depuis le menu contextuel (tous les morceaux d'un album)
  • Tri des morceaux (N°, titre, durée) et des albums (année, titre) sur les pages album et artiste
  • Zoom lightbox sur les covers d'albums et photos d'artistes

File d'attente & Lecteur

  • Drag & drop fonctionnel pour réorganiser la file d'attente
  • Bouton play/pause dans le header de la file
  • Correction du bouton pause qui remettait le morceau à zéro

Stabilité & Compatibilité

  • Protection contre les crashs sur fichiers audio corrompus ou formats exotiques
  • Ajout des formats WAV, AIFF, OPUS et AAC au scan de bibliothèque
  • Grilles responsives avec breakpoints pour grands écrans (6, 7, 8 colonnes)

v0.1.2

Patch

5 avril 2026

Profils

  • Bouton « Modifier » visible sous chaque profil dans la popin de sélection
  • Confirmation de suppression : il faut taper « supprimer » pour valider
  • La création d'un profil ne quitte plus la popin et ne le sélectionne plus automatiquement

Performance — Page artiste

  • Chargement progressif avec skeletons : le header s'affiche instantanément, les sections se remplissent au fur et à mesure
  • Nouvelles commandes backend ciblées (get_albums_by_artist, get_similar_artists) au lieu de tout charger
  • Optimisation des requêtes SQL : suppression des sous-requêtes coûteuses
  • Ajout de 6 index SQLite manquants pour accélérer les pages artiste, album et recherche

Playlists & Corrections

  • Ajout du bouton « Tout lire » sur la page playlist
  • Correction du lien artiste dans les résultats de recherche
  • Page feedback redessinée avec lien contact@rustmusic.dev (suppression des mentions RiffFlow)

v0.1.1

Patch

30 mars 2026

Linux

  • Correction de l'affichage des covers sur Linux (contournement du bug WebKitGTK 2.50 avec le protocole asset://)
  • Correction de l'encodage %2F dans les URLs asset sur Linux
  • Ajout du support de compilation .deb et .rpm
  • Correction du warning GTK gtk_widget_get_scale_factor

Covers & Miniatures

  • Nouveau composant CoverImg avec chargement async et cache LRU (max 300 entrées, ~40 Mo)
  • Commande Rust read_cover_as_base64 pour servir les covers via IPC (fallback base64)
  • Fonction assetSrc() pour corriger l'encodage des chemins Linux
  • Support des tailles de miniatures (full, 1x, 2x) avec génération en background
  • Réorganisation des covers : covers/albums/ et covers/artists/ avec sous-dossiers full/1x/2x
  • Migration automatique des anciennes covers vers la nouvelle structure
  • Redimensionnement rapide via fast_image_resize (SIMD) au lieu du crate image
  • Génération à la volée des miniatures manquantes (resolve_thumbnail) avec fallback sur full
  • Pool de threads dédié (50% des cores) pour la génération de miniatures en arrière-plan
  • Double mode d'affichage : protocole asset (direct, rapide) ou base64 IPC (fallback)
  • Filtrage des images artistes par défaut de Deezer (détection du pattern URL sans hash)

Images artistes

  • Live update des images artistes : apparition en temps réel pendant le fetch Deezer
  • Store réactif artistImageReadyStore avec event artist-image-ready
  • Récupération des images artistes en mode force (re-télécharge même si le chemin existe en base)
  • Sauvegarde des images artistes dans covers/artists/full/ avec miniatures en background

Import & Progression

  • Nouveau composant d'import premium : cercle de progression avec glow, shimmer, ETA
  • Estimation du temps restant en live pendant l'import
  • StatusBar redesignée : gradient, shimmer, pourcentage, bouton d'annulation au hover
  • Refresh automatique des données après import (libraryContentStore.refresh())
  • Correction du freeze de 30s à l'annulation du dialogue d'import
  • Loader d'import ajouté aux pages Genres et Explorateur de fichiers
  • Migration des covers avec progression dans la statusbar

Paramètres

  • Ajout du bouton « Ouvrir le dossier de données » (ouvre l'explorateur sur le dossier AppData)
  • Notifications désactivées par défaut (option retirée des paramètres, sera réintroduite plus tard)
  • Traductions ajoutées (FR, EN, ES, DE) pour les nouvelles entrées

Optimisation

  • Tailles de covers adaptées par contexte : 1x pour les listes, 2x pour les grilles, full pour les pages détail
  • Transaction SQL pour les migrations de covers (rollback en cas d'erreur)
  • Génération des miniatures en 2 passes : déplacement + DB (rapide) puis resize en parallèle

UI

  • Correction de la troncature des titres longs (noms de fichiers) dans toutes les vues (album, playlists, queue, player, stats, recherche)
  • Ajout du title (tooltip au hover) pour afficher le nom complet des titres tronqués

v0.1.0

Beta

Première version publique

Tout commence ici — la première version de RustMusic pose les bases d'un lecteur pensé pour les audiophiles.

  • Lecture HD bit-perfect : FLAC, WAV, AIFF jusqu'à 24bit/192kHz, plus MP3, AAC, OGG et M4A
  • Bibliothèque SQLite embarquée avec import parallèle et scan incrémental ultra-rapide
  • Interface sombre et soignée propulsée par Svelte 5 et Tailwind CSS
  • Statistiques détaillées : formats, qualité, top artistes, genres avec graphiques SVG
  • Multi-profils et multi-bibliothèques pour organiser sa musique sans compromis
  • Récupération automatique des pochettes artistes via l'API Deezer