Repository navigation
Releases: LEF97/Audio-Multi-Source-Organizer
Release list
AMSO v0.4.1
🎵 Audio Multi-Source Organizer (AMSO) v0.4.1
AMSO is an open-source application that unifies, deduplicates and synchronizes your local, cloud and streaming music libraries.
📸 Release preview
📦 Official Windows downloads
| File | Description | Format |
|---|---|---|
AMSO-Windows-v0.4.1.zip |
Recommended full archive (portable executable + translations + documentation) | .zip |
AMSO.exe |
Standalone portable Windows executable | .exe |
🐧🍎 Linux and macOS — experimental, untested
These packages are built automatically by the CI but have not been tested on real systems. VLC must be installed; the .dmg is unsigned (right-click → Open). See the README for details; your feedback (startup.log, crash.log) is welcome.
| File | System |
|---|---|
AMSO-Linux-v0.4.1-x86_64.AppImage / .tar.gz |
Linux x86_64 |
AMSO-macOS-arm64-v0.4.1.dmg |
macOS Apple Silicon |
AMSO-macOS-x86_64-v0.4.1.dmg |
macOS Intel |
📝 Changelog
Added
- Audio transition non-regression test (TNR):
scripts/tnr_transitions.batreplays the end of a track and then the start of the next one (Sirius → Eye in the Sky by default) in the real player, with a dummy audio output, and compares the recording with an ideal construction (sample-identical in gapless, equal-power fade in crossfade, no cut, single audio session). - TNR log: every run writes
tests/tnr/log/tnr_YYYY-MM-DD_HH-MM-SS.log(version, commit, tracks, detailed results, Qt messages and player logs); the folder is ignored by git. - Startup log:
startup.login the data folder times each launch step, the session restoration and the threads still running at shutdown. - Native crash log:
crash.login the data folder (%APPDATA%/AMSO/) receives the stack of a LibVLC or Qt crash. - libVLC status: the player settings show the version of the libVLC actually loaded and where it comes from (AMSO copy or system VLC), with the path in a tooltip.
- Linux and macOS preparation: the automatic VLC download (Windows archive) is reserved for Windows; elsewhere, AMSO explains how to install VLC (package manager, VLC.app). On macOS, VLC.app is also detected in
~/Applications. - Experimental Linux and macOS versions (untested):
release.ymlproduces a.tar.gzarchive and an.AppImage(Linux x86_64), as well as an unsigned.dmgfor macOS Apple Silicon and Intel, throughscripts/package_unix.py. VLC must be installed (package manager or VLC.app) and, on Linux, thelibpulse0,libxcb-cursor0andlibxkbcommon-x11-0libraries. Thebufferaudio engine and the transition non-regression test have only been validated on Windows: feedback (startup.log,crash.log) is welcome. The Linux CI now installslibpulse0(QtMultimedia failed to import) and the workflow's itch.io deployment now only happens on a tag.
Changed
- Startup: the « All tracks » table is no longer loaded (up to 3 times ~50,000 tracks) before its page is opened; the banner counter stays exact through a
COUNTquery. - Startup: the loading screen is displayed before the main window and the database are imported, numpy is only loaded in the background once the window is visible, the icon and the logo are cached.
Fixed
- Startup without network: no disk probing (
exists,isdir) is done anymore on a network path (UNC or mapped drive) from the UI thread at startup (cover art, folder watching, session restoration); an unreachable share no longer freezes the window. The cover art of a network track is re-checked every 30 s in the background. - Shutdown: fixed « QThread: Destroyed while thread is still running » (the cover worker's
finishedsignal hid the one fromQThread, cover threads were not awaited). bufferengine — transition mode change: after changing the mode in the player settings, a seek followed by Play no longer started anything (the reset left the engine without audio output, and the player wrongly switched to the VLC path). The audio session is now recreated immediately. The current track restarts from the beginning after an engine or mode change. Finally, resuming a track loaded in pause (after a reset or a seek while stopped) restarts thebufferengine's transfer timer: without it, Play produced no sound. The decoder no longer emits the blocks of a decoding that has been replaced in the meantime (reset followed by Play, close seeks): they could distort the position or prevent thebufferengine from starting.- Blind Test with the
bufferengine: Play, Next and Previous started no sound (the track stayed loaded in pause, Play had to be pressed again): the track change restarted the round, which repositioned the track before the first decoded block arrived. The round now only repositions a track that the player has not just started itself. bufferengine — distorted sound when moving or resizing the window: the sound card was fed by a UI thread timer (185 ms buffer); this thread, blocked by the Windows move loop (up to 400 ms measured), left it without data. TheQAudioSinknow runs in pull mode in a dedicated audio thread (audio_output.py): the memory buffer, gapless and crossfade are unchanged, and thevlc_directengine is not affected.- Translations: a key missing from the language and from English (recent key, only present in
fr.json) was displayed under its technical name; the fallback now goes through French.sync_translations.pydetects translations where the model repeated the French text followed by a transcription (« text (romaji) »), retranslates them, rejects such answers and no longer sends English to Ollama. - Hard-coded texts: the Statistics page (« tracks », « GB », « h »), file sizes (KB, MB, GB) and the « s » suffix of the Blind Test durations now go through translation keys.
- Hard-coded texts (continued): scanner messages, player and decoder errors, the VLC download, « Stereo / Mono », the « File not found » tooltip, « SYSTEM READY » and the startup screen now go through translation keys. The 42 languages are resynchronized (Ollama), including 15 translations whose
{count}/{name}placeholders had disappeared. - Translated activity log: « Synchronization succeeded », « Duration », « Tracks added », the levels (SUCCESS…) and the export dialogs were displayed in French whatever the language. Messages are now stored as a key and parameters (new
i18ncolumn, added without touching existing entries) and translated when displayed. Entries already recorded remain in French. bufferengine — manual « Next »: with the next track preloaded (Gapless 0 or Crossfade), a « Next » did start the next track but kept the position of the previous one (e.g. 1:00). The sample-accurate join is now reserved for the natural end of the track; a manual « Next » restarts the next track at 0.bufferengine — crossfade: the crossfade is now mixed as decoding progresses (computed over the whole requested duration, vectorized). It no longer cuts the end of the outgoing track, no longer shortens the fade and no longer causes stutters (the former sample-by-sample computation blocked the UI thread).- Blind Test with the
bufferengine: fixed an infinite recursion (track_changed↔seek_ratio) that closed the application; the Blind Test volume fades now also act on this engine. - Audio decoder (
amem): the end of stream announced by VLC stopped aQTimerfrom VLC's event thread (QObject::killTimer: Timers cannot be stopped from another thread, undefined behavior on every track); it is now relayed to the Qt thread. bufferengine — « No fade » mode: the hardware audio session is no longer closed and reopened between two tracks.vlc_directengine — pause:pause()only paused thebufferengine (always instantiated) and left LibVLC playing, so opening Blind Test during a Player playback did not stop the music.- Splash screen: the "Connecting to the database" label stayed displayed during the ~5 s of imports; it now reads "Starting the application...".
Useful links:
AMSO v0.4.0
Added
- Prise en charge des feuilles CUE (
.cue) :- Un fichier
.cueapparaît dans l'arborescence comme un dossier virtuel (icône 💿) contenant ses pistes avec leur titre, leur artiste et leur durée ; le fichier audio d'origine reste lisible normalement. - Lecture d'une piste CUE en tant que portion du fichier (début
INDEX 01, fin au début de la piste suivante, dernière piste jusqu'à la fin du fichier) avec position et durée propres à la piste, déplacement dans la piste et enchaînement gapless / crossfade entre portions (moteur à tampon continu uniquement ; le moteurvlc_directaffiche un message explicatif). - Tolérance aux feuilles mal formées (ligne
FILEpointant vers le.cuelui-même : repli sur le fichier audio du même nom), plusieursFILEpar feuille, encodages UTF-8 / CP1252.
- Un fichier
- Support étendu de 43 langues internationales :
- Intégration de 38 nouvelles langues avec leurs libellés natifs dans le sélecteur de langue (
amso/core/i18n.py). - Traduction automatisée et parité intégrale (401 clés par langue) via l'IA locale Ollama (
mistral:latest). - Script de synchronisation globale en un clic :
scripts/sync_all_languages_ollama.bat.
- Intégration de 38 nouvelles langues avec leurs libellés natifs dans le sélecteur de langue (
- Mode de diagnostic visuel des traductions (
⟦...⟧) :- Ajout de l'argument CLI
--debug-i18net du lanceurrun_debug_i18n.batencadrant chaque texte traduit de balises⟦...⟧pour repérer immédiatement à l'écran les textes dynamiques et isoler les éventuelles chaînes codées en dur.
- Ajout de l'argument CLI
- Outil d'audit et d'intégrité i18n (
scripts/audit_translations.py) :- Détection automatique de la parité des 43 langues, détection des doublons de libellés à fusionner et identification des clés orphelines via
scripts/audit_translations.bat.
- Détection automatique de la parité des 43 langues, détection des doublons de libellés à fusionner et identification des clés orphelines via
- Sélecteur d'architecture audio dans les Paramètres / Lecture parfaite en mode gapless 0 (reste certaines anomalies en mode cross fade) :
- Choix transparent dans
Paramètres > Lecteurentre :- Tampon continu en mémoire (QAudioSink / WASAPI) : flux unique ininterrompu vers la carte son, transitions gapless 0 et fondu sans coupure matérielle.
- Sortie directe LibVLC (double lecteur matériel) : moteur classique matériel piloté directement par LibVLC.
- Choix transparent dans
- Harnais de validation qualité unifié (Quality Gate) : Création du script
scripts/verify.pyet de son wrapper racineverify.batexécutant consécutivement le formatage (Ruff), le linter (Ruff check), le typage strict (Mypy sans masquage), le contrôle des plafonds de taille de fichiers et les tests automatisés (Pytest).
Fixed
- Playlists et feuilles CUE découvertes : journal d'activité et rafraîchissement de l'arborescence : un scan qui n'ajoutait que des playlists (M3U, PLS, XSPF, WPL, CUE) n'était mentionné nulle part et ne rafraîchissait pas l'arborescence des dossiers (le nouveau nœud n'apparaissait qu'après un redémarrage). Le journal indique désormais le nombre de playlists / feuilles CUE ajoutées, mises à jour ou supprimées (avec les premiers noms), et l'arborescence se met à jour à la fin du scan.
- Moteur audio natif WASAPI & Résolution de la coupure prématurée de fin de piste :
- Sortie audio native Windows WASAPI (
mmdevice) : suppression du forçage de--aout=directsoundsous Windows. Le module DirectSound de VLC tronquait de manière anormale les 1,3 à 1,4 dernières secondes des fichiers audio (coupant la fin de Sirius). L'alignement surmmdevicepermet à LibVLC de diffuser l'intégralité du flux audio jusqu'à la dernière milliseconde en 32-bit float. - Suppression des bops et artefacts de clics rapides : élimination des coupures artificielles de volume à 0 lors des
seeketstopqui provoquaient des discontinuités de phase et des collisions de timers asynchrones lors des clics rapides. Le repositionnement temporel (set_time) et l'arrêt s'exécutent désormais de manière native et fluide. - Suppression des micro-glitches en fin de piste / passages calmes : arrêt du polling permanent de volume dans la boucle de tick, évitant d'envoyer des ajustements de gain matériels répétitifs en continu pendant la lecture.
- Sortie audio native Windows WASAPI (
- Précision millimétrique des transitions & Enchaînements fluides (Gapless & Pas de fondu) :
- Élimination des craquements et pops au lancement du titre suivant : suppression du forçage de volume à 0 sur le second lecteur en veille, qui provoquait une coupure globale de session sous WASAPI puis un transitoire impulsif (« craquement ») au déblocage de la pause. Le second lecteur est préchargé en pause (
:start-paused) au volume nominal sans altérer le titre en cours. - Enchaînement sans blanc (Gapless 0) : prise en compte exacte de la latence de pipeline LibVLC (
vlc_gapless_latency_ms, 250 ms par défaut) pour débloquer le lecteur suivant avant la fin exacte de la piste en cours, assurant une continuité musicale ininterrompue sans aucun trou de silence entre morceaux enchaînés (Sirius -> Eye In The Sky). - Enchaînement naturel en mode Pas de fondu : suppression du délai artificiel de 400 ms après
State.Ended, permettant une transition immédiate et propre dès la fin de lecture du titre précédent.
- Élimination des craquements et pops au lancement du titre suivant : suppression du forçage de volume à 0 sur le second lecteur en veille, qui provoquait une coupure globale de session sous WASAPI puis un transitoire impulsif (« craquement ») au déblocage de la pause. Le second lecteur est préchargé en pause (
- Suppression des déclenchements de lecture audio intempestifs :
- Retour en arrière (
previous/seek) : la commande piste précédente (previous()) respecte strictement l'état de pause du lecteur et utiliseload_index()pour charger le titre sans démarrer la lecture si le lecteur était en pause. De même, un déplacement temporel (seek_ms) annule tout préchargement standby ou vidage de transition en attente, et repositionne la piste sans lecture forcée si le lecteur était en pause ou en fin de morceau (State.Ended). - Navigation entre menus (sortie du Blind Test vers d'autres onglets) : centralisation de la navigation d'onglets (
_switch_to_page), arrêt forcé du Blind Test et réinitialisation de tout standby actif dès la sortie de la page pour interdire tout redémarrage autonome de la musique en arrière-plan.
- Retour en arrière (
- Fondu enchaîné sans saccades (Crossfade Equal-Power) :
- Isolation matérielle des volumes sous Windows : affectation dynamique de la sortie audio
directsoundpour le mode fondu enchaîné (les modes standard et gapless demeurent surmmdevicenatif sans troncature). Contrairement à WASAPI (mmdevice) dont le réglage de volume affecte la session de processus globale et générait un conflit violent (hachage / saccades à 40 Hz entre le titre sortant et le titre entrant), DirectSound isole le volume propre à chaque mémoire tampon secondaire (IDirectSoundBuffer::SetVolume). - Courbes de fondu parfaitement lisses : transition en puissance égale continue (cosinus pour le titre sortant, sinus pour le titre entrant) sans aucun creux acoustique ni saccade au déclenchement du fondu.
- Isolation matérielle des volumes sous Windows : affectation dynamique de la sortie audio
- Fiabilisation du Moteur Tampon Continu en Mémoire (Phase 2 - QAudioSink / Ring Buffer) :
- Respect absolu de la pause sur retour arrière (
previous()) :previous()préserve désormais fidèlement l'état de pause, charge le morceau précédent sans déclencher la lecture, et suspend le flux audio sans micro-coupure ni redémarrage impromptu. - Enchaînement naturel en mode Pas de fondu : suppression du préchargement standby inutile en mode standard, transition directe via le cycle de chargement standard avec mise à jour immédiate du titre, de la pochette et de la durée exacte.
- Résolution des collisions et saccades en mode Gapless 0 : cycle de vie hermétique du décodeur standby, déconnexions/reconnexions complètes des signaux (
ready_to_play,chunk_decoded), rétablissement du seek après raccord, et rejet strict des paquets PCM non appariés au titre courant dans le tampon mémoire. - Fondu croisé en mémoire à puissance égale (Mode Crossfade) :
- Mixage PCM mathématique des échantillons 16-bit (courbes cos/sin à puissance égale) à partir de la tête de lecture courante (
_play_offset), avec clamping anti-écrêtage. - Séparation stricte entre le déclenchement audio du fondu et la bascule de l'interface graphique : l'UI reste affichée sur le titre sortant pendant son estompage progressif, et bascule sur le titre entrant exactement à l'extinction naturelle du morceau, éliminant la coupure visuelle et sonore prématurée.
- Synchronisation et calage temporel continus : purge instantanée des données PCM consommées de la piste sortante à l'extinction (
finish_crossfade), recalage précis de l'offset de lecture (_base_offset_ms) sur la durée exacte du fondu, garantissant un défilement continu du curseur sans téléportation, ainsi qu'un repositionnement temporel (seek_ms) parfaitement aligné. - Découpage modulaire : extraction de
amso/services/player_vlc_transitions.py(transitions directes LibVLC) permettant de maintenir tous les fichiers du lecteur sous les 450 lignes.
- Mixage PCM mathématique des échantillons 16-bit (courbes cos/sin à puissance égale) à partir de la tête de lecture courante (
- Réinitialisation intégrale à chaud du lecteur (
reset_playback) :- Toute modification dans les Paramètres du moteur audio (VLC direct vs Tampon continu) ou du mode de transition (Pas de fondu, Gapless 0, Crossfade) coupe immédiatement la lecture en cours et réinitialise de fond en comble les flux (destruction propre du
QAudioSink, vidage des tampons PCM mémoire, arrêt des décodeurs, détachement des médias LibVLC, annulation de tous les timers de transition/fondu). - La piste active reste sélectionnée en pause à 00:00 prête à être lancée sous la nouvelle configuration sans nécessiter de redémarrer l'application.
- Toute modification dans les Paramètres du moteur audio (VLC direct vs Tampon continu) ou du mode de transition (Pas de fondu, Gapless 0, Crossfade) coupe immédiatement la lecture en cours et réinitialise de fond en comble les flux (destruction propre du
- Respect absolu de la pause sur retour arrière (
Changed
- Découpage modulaire complet de l'architecture (< 500 lignes par fichier) :
- Objectif atteint à 100 % : 0 fichier > 500 lignes sur l'ensemble de la base de code AMSO (contre 8 fichiers au-dessus du seuil initialement).
- Allègement de
main_window.py(~1 500 -> 357 lignes) via des mixins spécialisés dansamso/ui/pages/. - Décomposition de
player_service.py(~1 400 -> 329 lignes) avec l'extraction deplayer_transport.py, `player_queue....
AMSO v0.3.0
🎵 Audio Multi-Source Organizer (AMSO) v0.3.0
AMSO est une application open-source pour unifier, dédoublonner et synchroniser vos bibliothèques musicales locales, cloud et streaming.
📸 Aperçu de la version
📦 Téléchargements officiels Windows
| Fichier | Description | Format |
|---|---|---|
AMSO-Windows-v0.3.0.zip |
Archive complète recommandée (Exécutable portable + traductions + documentation) | .zip |
AMSO.exe |
Exécutable Windows autonome portable direct | .exe |
🐧🍎 Linux et macOS — expérimental, non testé
Ces paquets sont produits automatiquement par la CI mais n'ont pas été testés sur de vrais systèmes. VLC doit être installé ; le .dmg n'est pas signé (clic droit → Ouvrir). Voir le README pour les détails ; vos retours (startup.log, crash.log) sont les bienvenus.
| Fichier | Système |
|---|---|
AMSO-Linux-v0.3.0-x86_64.AppImage / .tar.gz |
Linux x86_64 |
AMSO-macOS-arm64-v0.3.0.dmg |
macOS Apple Silicon |
AMSO-macOS-x86_64-v0.3.0.dmg |
macOS Intel |
📝 Journal des modifications
Added
- Prise en charge complète des fichiers de playlist :
- Indexation automatique des formats de listes de lecture :
.m3u,.m3u8,.pls,.xspfet.wpl. - Intégration dans l'arborescence « Par dossier » sous forme de nœuds dédiés arborant l'icône
🎶. - Respect de l'ordre séquentiel d'écoute défini dans la playlist (colonne
#avec l'ordre 1, 2, 3...) sans tri alphabétique automatique forcé. - Gestion et détection visuelle des morceaux manquants ou déplacés : indication par un préfixe
⚠️, coloration d'avertissement douce et infobulle descriptive, sans bloquer la lecture des autres pistes. - Menu contextuel enrichi sur les nœuds de playlist : lecture directe, ajout en file d'attente et ouverture de l'emplacement du fichier playlist dans l'Explorateur Windows.
- Indexation automatique des formats de listes de lecture :
- Fondu sonore entrant doux (Fade-in) :
- Transition progressive du volume de 0% au volume défini sur 1 seconde lors du démarrage ou de la reprise d'une lecture audio (hors mode Blind Test).
- Stabilité et fluidité de la synchronisation :
- Suppression de la boîte de dialogue bloquante « Scan already running » au profit d'un enchaînement silencieux en file d'attente.
- Préservation de la sélection et non-rechargement inutile de l'arborescence des dossiers si aucun changement de dossier n'est détecté.
- Affichage dynamique des pochettes :
- Correction du redimensionnement et du repositionnement de la pochette lors du passage plein écran / fenêtré ou du redimensionnement libre de la fenêtre.
Liens utiles :
AMSO v0.2.0
🎵 Audio Multi-Source Organizer (AMSO) v0.2.0
AMSO est une application open-source pour unifier, dédoublonner et synchroniser vos bibliothèques musicales locales, cloud et streaming.
📸 Aperçu de la version
📦 Téléchargements officiels Windows
| Fichier | Description | Format |
|---|---|---|
AMSO-Windows-v0.2.0.zip |
Archive complète recommandée (Exécutable portable + traductions + documentation) | .zip |
AMSO.exe |
Exécutable Windows autonome portable direct | .exe |
📝 Journal des modifications
Added
- Nouveau tiroir dédié « 🎲 Jeux » dans la barre latérale :
- Création d'une catégorie repliable dédiée « JEUX » (positionnée directement sous le tiroir « LECTEUR ») accueillant la page Blind Test.
- Localisation du libellé dans les 5 langues officielles (FR: Jeux, EN: Games, DE: Spiele, ES: Juegos, IT: Giochi).
- Perfectionnements et corrections ergonomiques du Blind Test (Session v2) :
- Arrêt immédiat de la musique en quittant le Blind Test : la musique s'arrête systématiquement dès que l'utilisateur navigue vers une autre page (Lecteur, Playlist, Paramètres, etc.).
- Démarrage systématique sur la page « Lecteur » : l'application s'ouvre désormais toujours sur la page principale du Lecteur au lancement. La persistance de l'ancienne page active dans
config.inia été supprimée et nettoyée. - Zoom dynamique accentué sur le décompte : agrandissement du facteur d'échelle à x2.2 avec courbe d'amortissement fluide
OutCubic, conférant un impact visuel immersif à chaque seconde. - Harmonisation esthétique du bouton « 👁️ Révéler » : habillage sobre et élégant avec bordure et fond sombre (
#20242D/#333846) s'accordant parfaitement avec les boutons « Précédent » et « Suivant ». - Aération visuelle de la carte centrale : espacement vertical accru sous le nom de fichier pour aérer la rangée de boutons de commande.
- Repositionnement vertical du badge de session : le badge « Extrait x / y — reste z minutes » a été légèrement descendu pour une respiration harmonieuse sous la barre supérieure.
- Préchargement asynchrone en mémoire vive (RAM) : mise en cache anticipée de la pochette d'album du morceau suivant dès le lancement de la manche courante (
load_cover_async), éliminant toute latence d'affichage lors de la transition. - Résolution du blocage/gel lors de retours successifs (« Morceau précédent ») :
- Élimination d'une récursion infinie identifiée entre
play()etplay_index()causée par une émission anticipée du signaltrack_changedavant le chargement complet du média VLC. - Ajout d'un verrou anti-réentrance (
_is_loading_track) dansPlayerServicepour sécuriser les changements rapides de pistes. - Gestion robuste de la première piste (index 0) : lorsque l'utilisateur clique sur « Précédent » au tout début de la liste, la manche 0 redémarre instantanément et proprement (remise à zéro du décompte, son progressif de 0 à 100% et minuterie active), éliminant tout blocage silencieux.
- Bouclage automatique sécurisé vers le premier morceau à l'expiration de la dernière manche de découverte.
- Élimination d'une récursion infinie identifiée entre
- Correction du volume à 0 lors d'un retour arrière : rétablissement immédiat du volume sonore et amorçage du fondu entrant doux (2 s) lors du clic sur « Morceau précédent ».
- Résolution du blocage/gel critique de l'interface (écran blanc / « Ne répond pas ») :
- Éradication du deadlock LibVLC C-Thread / GIL : identification via inspection de pile mémoire d'un interblocage (deadlock) fatal où un callback d'événement VLC (
MediaPlayerPlaying) tentait d'appelerlibvlc_audio_set_volumedepuis le thread interne de VLC pendant que le thread principal Qt appelait simultanément VLC avec le verrou GIL. Le rappel d'événement a été supprimé et remplacé par une application sécurisée sur l'event loop Qt. - Dissociation et non-ingérence des volumes temporaires : ajout d'un drapeau
_is_temporary_volumedansPlayerServicepour empêcher la boucle de contrôle principale (100 ms) d'écraser et de combattre l'atténuation sonore du Blind Test (50 ms). - Élimination des rafales d'appels DirectSound : mise en cache du dernier volume appliqué (
_last_set_volume) et suppression des multiplesQTimer.singleShotconcurrents sur l'initialisation du périphérique audio DirectSound. - Suppression des appels dupliqués lors des enchaînements de manche : clarification de la transition de fin de manche dans le Blind Test, évitant les déclenchements multiples et simultanés de
next(),seek_ratio(0.0)et_start_round_for_track().
- Éradication du deadlock LibVLC C-Thread / GIL : identification via inspection de pile mémoire d'un interblocage (deadlock) fatal où un callback d'événement VLC (
- Optimisations et corrections ergonomiques du Lecteur et du Blind Test :
- Intégration du volume en haut du Lecteur audio : déplacement du curseur de volume, de l'icône muet et du pourcentage sonore dans la barre supérieure de la page, directement à côté du titre « Lecteur audio », libérant ainsi l'espace visuel sous la carte principale.
- Épuration de la page Lecteur : retrait complet du bloc de configuration du Blind Test qui n'apparaît plus sous le lecteur audio.
- Délocalisation des paramètres Blind Test dans Paramètres > Lecteur :
- Nouvelle carte dédiée « 🎭 Paramètres du Blind Test » ajoutée à la fin de la page
Paramètres > Lecteur. - Configuration de la durée du décompte (5 à 120 s, 20 s par défaut) et de la durée de découverte (3 à 60 s, 10 s par défaut).
- Nouveau paramètre : Durée du fondu sonore (Fade-out) : réglable de 0 à 10 secondes (2 secondes par défaut, plafonné dynamiquement à la durée de découverte).
- Calcul et résumé en direct de la manche :
Durée d'une manche : {total}s ({countdown}s recherche + {reveal}s découverte dont {fade}s de fondu).
- Nouvelle carte dédiée « 🎭 Paramètres du Blind Test » ajoutée à la fin de la page
- Gestion acoustique du fondu de découverte :
- La durée totale de découverte reste inchangée (ex: 10 s par défaut).
- La lecture audio s'effectue à 100 % du volume nominal défini pendant
découverte - fondu(ex: 10 - 2 = 8 secondes), puis s'atténue de manière fluide et progressive jusqu'à 0 pendant les 2 dernières secondes. - Dès le passage au morceau suivant (nouvelle manche), le volume sonore est instantanément et automatiquement rétabli à 100 % dès la première milliseconde.
- Rétablissement immédiat du volume nominal en cas de clic manuel sur « Morceau suivant », pause ou changement de vue.
- Internationalisation intégrale : libellés et textes d'explication traduits et synchronisés en 5 langues (FR, EN, ES, DE, IT).
- Refonte et perfectionnement du mode Aléatoire (Shuffle) :
- Mélange intégral de la playlist : lorsque l'icône Shuffle passe de désactivé à activé, l'ensemble complet de la file d'attente/tableau est mélangé aléatoirement (et non plus uniquement les titres en dessous). La piste en cours de lecture est elle-même redistribuée aléatoirement (pouvant se retrouver en première comme en dernière position) tout en poursuivant sa lecture sans coupure.
- Restauration fidèle de l'ordre initial : dès que le mode Shuffle est désactivé, la playlist reprend instantanément son ordre de titres d'origine (avant le mélange), l'index de lecture étant automatiquement recalé sur la position d'origine du morceau actif.
- Bouton et menu contextuel « 🎲 Mélanger les titres » :
- Renommage de « Mélanger la suite » en « 🎲 Mélanger les titres » (
playlist.btn_shuffle_tracksetplaylist.menu_shuffle_tracks). - État contextuel strict : le bouton et l'action du menu clic droit ne sont désormais activables que lorsque le mode Shuffle est actif (affichés en grisé/désactivé sinon).
- Re-mélange dynamique : un clic sur ce bouton re-mélange l'ensemble des titres avec redistribution fluide de la piste en cours.
- Renommage de « Mélanger la suite » en « 🎲 Mélanger les titres » (
- Localisation complète : traductions synchronisées dans les 5 langues officielles de l'application (FR, EN, ES, DE, IT).
- Refonte visuelle et interactive de la page À propos :
- Bannière supérieure unifiée et alignée :
- Alignement parfait du titre « Audio Multi-Source Organizer » et du badge de version tout en haut du cadre avec le sommet du logo officiel AMSO.
- Égaliseur de spectre audio rétro intégré directement sous le texte descriptif : barres calées sur le bord gauche du texte (ne touchant pas l'icône) et s'étirant jusqu'au bord droit du cadre, réagissant en temps réel à la musique jouée.
- Section Soutien & Financement restructurée :
- Carte dédiée avec sous-titre
💖 Soutenir le projet (Faire un don). - Bouton Ko-fi aux couleurs officielles (
☕ Faire un don sur Ko-fi) pointant vershttps://ko-fi.com/arnaudlef97. - Bouton GitHub Sponsors (
💖 GitHub Sponsors) pointant vers l'URL officielle corrigéehttps://github.com/sponsors/lef97.
- Carte dédiée avec sous-titre
- Section Pages officielles distincte :
- Carte dédiée avec sous-titre
🌐 Pages officiellesséparée par un espacement naturel (sans trait horizontal de séparation). - Boutons d'accès direct au Dépôt GitHub (
⭐ Dépôt GitHub) et à la page Itch.io (🎮 Page Itch.io:https://arnaudlef97.itch.io/amso).
- Carte dédiée avec sous-titre
- Section Remerciements repositionnée en clôture :
- Carte dédiée
👍 Remerciements & Technologies Open Sourcepositionnée après les Pages officielles pour une hiérarchie d'information optimale.
- Carte dédiée
- Bannière supérieure unifiée et alignée :
- Mode « 🎭 Blind Test » interactif avec animations et enchaînement automatique :
- Nouvelle vue dédiée « 🎭 Blind Test » insérée dans le tiroir Lecteur de la barre latérale, entre les pages Lecteur et Playlist.
- *Affichage mystère immersif...
AMSO v0.1.0
Added
- Integrated Audio Playback Engine (python-vlc):
- Native playback support for popular audio formats: MP3, FLAC, WAV, AAC, OGG, M4A, WMA.
- Automatic and transparent download of a portable VLC binary if VLC is not present on the system.
- Comprehensive playback controls: Play, Pause, Stop, Next track, Previous track, dynamic seekbar, and volume management.
- Playback modes: Shuffle and repeat modes (Disabled, Repeat playlist, Repeat single track).
- Real-time animated visualizer effects synchronized with playback (particles, waves, stars, spatial warp, aurora borealis, spectrum bars).
- Playlist & Queue Management:
- Dedicated virtualized table view handling tens of thousands of tracks with zero lag.
- Intuitive queue reordering via drag-and-drop.
- Rich context menus: "Play", "Play Next", "Remove from Queue", "Track Info".
- Automatic playback session persistence (current track, timestamp offset in ms, active playlist).
- High-Performance Multithreaded Local Scanner:
- Fast asynchronous recursive directory traversal with live progress bar and metrics.
- Rapid metadata extraction (title, artist, album, year, genre, duration, bitrate, track number) using
mutagen. - Embedded cover art extraction and caching with asynchronous background rendering to prevent UI stutter.
- File hash computation for duplicate file detection.
- Optimized SQLite Database:
- Lean relational schema without heavy ORMs for instantaneous query execution.
- Management of audio sources, scanned tracks, and activity history.
- Modern User Interface (PySide6 / Dark Mode):
- Premium custom dark theme with sleek color palette and smooth animations.
- Collapsible sidebar drawer for main navigation and settings.
- Complete internationalization (French, English, Spanish, German, Italian) with runtime language switching.
- Dedicated "About" page inside Settings: project details, version badge, open-source stack credits, links to GitHub, Itch.io, and funding platforms (Ko-fi, GitHub Sponsors).
- Manual and automatic update checker querying GitHub Releases API (
/releases/latest) with interactive notification banner. - Keyboard shortcut F1 and direct click on the AMSO logo to access the "About" page.
Changed
- Replaced the modal "About" popup with a fluid native page within Settings.
- Reorganized Settings navigation into 5 dedicated sections: General, Player, Sources, Logs, About.
- Hidden standard menu bar in favor of a modern, clean interface without orphan "Help" buttons.
Fixed
- Guaranteed 00:00 Start: Reset pending seek offset (
_pending_seek_ms = 0) whenever a new track or selection is launched from the library or playlist, reserving session offset resumption strictly for the player "Play" button. - Immediate Volume Persistence: Instantaneous disk persistence in
config.iniwhenever the volume slider or mute toggle changes. - Reliable VLC Volume Enforcement: Automatic resynchronization of audio volume upon entering the
Playingstate during internal player ticks, preventing volume jumps to 100% on cold VLC decoder starts.





