Journal FATSort à la rescousse des autoradios mp3

Posté par .
Tags : aucun
55
19
juin
2012

Mon autoradio lit les fichiers mp3 (mais pas .ogg), soit sur un CD, soit sur un support USB. Le problème avec les clés USB, c'est qu'il lit les chansons dans le désordre. Apparemment, c'est un problème courant, et ce n'est pas n'importe quel désordre, c'est l'ordre du système de fichier, qui n'est pas nécessairement l'ordre de création des fichiers.

Un touch ne fait rien à l'affaire. Ça se passe plus bas.

FATSort

C'est là qu'intervient FATSort. Cet utilitaire modifie l'ordre des fichiers dans le système de fichier.

Ainsi, un simple

fatsort /dev/sdf1

me permet de réordonner ma clé USB et de faire en sorte que mon autoradio respecte l'ordre des chansons dans les albums.

FATSort est distribué sous GPL v2 et inclus dans Fedora, Debian, Ubuntu et Gentoo. Il est compatible UNIX, BSD et MacOS X.

Ça reste un bug, à mon sens, mais voilà au moins un contournement.

Device file et point de montage

Pour me faciliter la tâche, j'ai ajouté une action personnalisée dans Thunar :

fatsort -f `awk '/\/media\/%n/ {print $1}' /proc/mounts`

L'idée est de chercher dans /proc/mounts le "device file" correspondant au périphérique. Pour que ça marche, je me place sur le répertoire où la clé est montée. %n est remplacé par le nom du répertoire. awk cherche la ligne contenant /media/repertoire_de_montage et revoie par exemple /dev/sdf1. L'option -f de FATSort sert à forcer l'opération alors que la clé est montée.

Ce n'est pas très élégant. Déjà le -f. Et puis on pourrait faire un script qui fonctionne même quand on l'appelle depuis un sous-répertoire. Ici, il faut être pile sur le point de montage. Mais ça a l'air de fonctionner.

Je ne sais pas ce qui se passe si on écrit sur la clé en même temps, mais je pense que l'idée du -f c'est que ce n'est pas conseillé. FATSort ne s'attaque qu'aux partitions FAT16 et FAT32, donc ne devrait pas casser les autres partitions en cas de mauvaise manip. C'est déjà ça…

  • # Mon sauveur !

    Posté par . Évalué à 10.

    Waou !! Sans blagues, ça fait au moins 6 mois que je me dis que je vais demander sur le forum si quelqu'un à une solution à ce problème, je m'étais même mis en tête d'aller me documenter sur le système de fichier fat pour écrire un utilitaire moi même s'il n'existait pas.
    Tu viens juste d'illuminer ma soirée :)
    Merci :)

    • [^] # Re: Mon sauveur !

      Posté par . Évalué à 1.

      Effectivement là j'aurais jamais imaginé ça. Une merde dans FAT, ça, ça me la coupe.
      (Ce n'est qu'à moitié ironique, jusqu’ici je pensais que ça venait du 'toradio)

    • [^] # Re: Mon sauveur !

      Posté par (page perso) . Évalué à 3.

      Mon autoradio aussi me fait ça, et je suis bien content de savoir qu'il existe une solution! J'avasi même posé une question sur unix.stackoverflow pour changer la date de création des fichiers (et non la date de modification), sans vraie solution.

      • [^] # Re: Mon sauveur !

        Posté par . Évalué à 2.

        Bah c'était quand même assez visible que ça venait de l'ordre d'enregistrement des fichiers dans le système de fichier (ordre des inode ou l'équivalent en fat), mais je ne pensais pas qu'un simple outil qui ne tourne pas en root puisse changer ça, je n'étais même pas sur que ça soit possible depuis l'espace d'exécution utilisateur.

        • [^] # Re: Mon sauveur !

          Posté par . Évalué à 1.

          …qu'un simple outil qui ne tourne pas en root puisse changer ça…

          Il n'y a pas de gestion des droits d'accès sur un système en FAT donc pas de notion de user. Tout est à tout le monde. Tout au plus 3, 4 attributs possibles par fichier comme lecture seule ou caché… Mais c'est bien documenté et largement accessible.

          • [^] # Re: Mon sauveur !

            Posté par . Évalué à 5.

            Il n'y a pas de gestion des droits d'accès sur un système en FAT donc pas de notion de user. Tout est à tout le monde.

            Oui mais ca n'a rien avoir. Les permissions c'est au niveau VFS quand tu manipules les abstractions que sont les fichiers et repertoires. La, en ayant regardé 30s le code, ca bosse au niveau FS, faut avoir accès au périphérique.

            Donc si ca marche en utilisateur c'est juste que ta distrib balance les droits sur le périphérique à ton utilisateur.

    • [^] # Re: Mon sauveur !

      Posté par . Évalué à 4.

      N'hésite pas à envoyer une ou deux lignes de remerciement au développeur. Les miennes lui ont fait plaisir.

  • # FATSort à la rescousse des autoradios mp3

    Posté par . Évalué à 7.

    J'ai jamais eu de problème avec mon autoradio…….il est a cassette :)
    bon ok =======[]

    Merci aux personnes qui mon aidé a trouvé des solutions pour essayer d’écrire sans faute d’orthographe.

  • # Oooooh

    Posté par . Évalué à 9.

    J'ai aussi découvert avec ça que windows copiait les fichiers dans un répertoire FAT en fonction de l'ordre alphabétique ; je n'ai aucune idée de pourquoi, pour moi le tri c'est une histoire d'affichage.
    Du coup les lecteurs mp3 comptent dessus pour avoir les fichiers dans le bon ordre et n'ont pas à faire le tri eux-même. D'ailleurs, si les fabricants n'utilisent que windows pour développer/tester, il n'y a aucune raison qu'ils se rendent compte du bug !

    Du coup, j'ai fait comme ça pendant très longtemps :
    mkdir temp ; mv * temp/ ; mv temp/* ; rmdir temp
    Et ce pour chaque dossier devant être réordonné :
    find . -type d | while read dir ; do ( cd $dir ; mkdir temp ; mv * temp/ ; mv temp/* ; rmdir temp ) ; done

    L'astuce est que l'astérisque du shell sort tous les fichiers … dans l'ordre alphabétique ; quant à mv, il traite les arguments dans l'ordre. Les fichiers sont donc recréés dans l'ordre voulu.

    • [^] # Re: Oooooh

      Posté par (page perso) . Évalué à 5. Dernière modification le 20/06/12 à 14:20.

      D'ailleurs, si les fabricants n'utilisent que windows pour développer/tester, il n'y a aucune raison qu'ils se rendent compte du bug !

      Dans la notice de mon auto-radio Alpine, c’est bien précisé qu’il lit les fichiers dans l’ordre d’écriture sur le disque (le fameux « ordre FAT »).

      Du coup :

      mdkir -p /media/auto-radio/<Artiste>/<Année> - <Album>
      cp ~/Musique/<Artiste>/<Année> - <Album>/* /media/auto-radio/<Artiste>/<Année> - <Album>/
      
      

      L'astuce est que l'astérisque du shell sort tous les fichiers … dans l'ordre alphabétique

      C’est l’ordre alphanumérique en fait.

    • [^] # Re: Oooooh

      Posté par . Évalué à 5.

      J'ai aussi découvert avec ça que windows copiait les fichiers dans un répertoire FAT en fonction de l'ordre alphabétique

      Mais que se passe-t-il si on rajoute ou enlève des fichiers dans un répertoire depuis Windows ? On a pas le même problème qu'avec linux ?

  • # Moi y en a pas comprendre de quoi toi te plaindre ?

    Posté par . Évalué à 3.

    Je n’ai pas d’autoradio, mais j’ai eu de ces lecteurs de MP3 a 10€, et effectivement dans 98% des cas ils ne savent pas gérer les playlists, et de fait se basent sur le nom des fichiers pour l’ordre de lecture, en quoi, ça serait plus logique/intuitif qu’ils se basent sur l’ordre de création des fichiers?

    Depending on the time of day, the French go either way.

    • [^] # Re: Moi y en a pas comprendre de quoi toi te plaindre ?

      Posté par (page perso) . Évalué à 2.

      parce que c'est un peu plus compliqué que ça…
      quand on supprime un dossier, et qu'on rajoute des fichiers après, ils vont "se mettre" dans le trou. et là l'ordre n'est plus respecté, que ce soit l'alphabétique ou l'ordre de création des fichiers.

      • [^] # Re: Moi y en a pas comprendre de quoi toi te plaindre ?

        Posté par . Évalué à 2.

        Haaaaaaaaaaaa, ok! Et c'est un bug au niveau de FAT, ou de l'implémentation dans les firmwares ?

        Depending on the time of day, the French go either way.

        • [^] # Re: Moi y en a pas comprendre de quoi toi te plaindre ?

          Posté par . Évalué à 7.

          AMHA, le problème ne vient pas de FAT, mais de l'implémentation par dessus qui suppose qu'il n'est pas nécessaire de trier les noms de fichier par ordre alphabétique après lecture du répertoire.

          Dans mes lointains souvenirs, les résultats de readdir(3) ne sont pas fournis dans l'ordre alphabétique sur un système de fichier ext, donc le problème serait le même.

          (et aussi peut être l'option -f de ls ?)

  • # Petit bémol

    Posté par . Évalué à 6.

    J'ai aussi eu ce problème, et j'ai aussi tenté d'utiliser « tri-gras » pour le régler.

    Malheureusement, il semblerait que les bidouilles qu'il effectue ne soit pas tout à fait compatible avec ce que ferait un OS qui écrit les fichiers normalement sur le support… la preuve en est mon autoradio (pas exactement le haut de gamme si vous voyez ce que je veux dire) qui est complétement perdu et qui donne l'impression de lire la clef en mode aléatoire.

    Et après quelques autres recherches, la solution est apparue : un petit rsync -av <src> <dst> copiera tous les fichiers par ordre alphabétique.

    Et ça marche très bien, c'est élégant et on ne se salit pas les doigts en tapant « gras » sur son clavier.

    • [^] # Re: Petit bémol

      Posté par . Évalué à 1.

      C'est curieux. Quand tu vérifies avec un ls -U ça t'affiche que ça a marché ?

      Ta méthode avec rsync ne doit pas fonctionner quand tu ajoutes ou enlèves des fichiers. Il faut tout faire d'un coup, non ?

      • [^] # Re: Petit bémol

        Posté par . Évalué à 2.

        Linux peut relire correctement la clef bidouillée par FATsort, mais l'autoradio non. Et effectivement, si tu prends un clef déjà mélangée, tu devras tout copier en local, effacer la clef, et faire le rsync. Si tu ajoutes un fichier au milieu d'un dossier, ça ne marchera pas non plus, mais ajouter un dossier marchera (sauf si tu veux aussi tes dossiers triés).

        • [^] # Re: Petit bémol

          Posté par . Évalué à 2.

          et puis à coup de fatsort régulier, on doit flingue relativement vite la mémoire flash non ?

          C'est pas plus simple d'avoir un autoradio un peu moins pourri ?

          Bon moi je fais plus simple, vu que je suis un grand adepte de la fonction mélange de mes lecteurs musicaux l'ordre n'est pas pertinent.

          • [^] # Re: Petit bémol

            Posté par . Évalué à 1.

            et puis à coup de fatsort régulier, on doit flingue relativement vite la mémoire flash non ?

            Aucune idée. Tu as des raisons de penser que ça serait le cas ?

            (Dans la pratique, ce n'est pas forcément super régulier non plus, tout dépend à quel fréquence on ajoute des pistes.)

  • # Liste de lecture ?

    Posté par (page perso) . Évalué à 1.

    Je n'ai pas encore testé mais je voudrais savoir :
    Il gère les listes de lecture m3u ?

    Car j'ai pas mal d'albums sur ma clé qui ont une liste de lecture, et s'il me trie les chansons par ordre alphabétique ça risque d'être tout autant dans le désordre.

    Il faut que je me renseigne sur la façon dont les autoradios sony fonctionnent pour les clé USB.

    S'il y a un problème, il y a une solution; s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

    • [^] # Re: Liste de lecture ?

      Posté par . Évalué à 3.

      Il gère les listes de lecture m3u ?

      Je ne pense pas. Regarde l'aide (fatsort -h) et vu les options présentées, ce sont seulement les noms de fichier qui comptent.

      Il faut que je me renseigne sur la façon dont les autoradios sony fonctionnent pour les clé USB.

      Mes tests étaient sur l'autoradio de la voiture du boulot, un SONY.

  • # ls -U

    Posté par . Évalué à 5.

    J'ai oublié de préciser dans la dépêche que par défaut, ls trie les fichiers, mais avec l'option -U il les affiche dans l'ordre du système de fichier (l'ordre utilisé par l'autoradio, donc).

    Ça permet de vérifier la manip sans aller jusqu'à la voiture (ou sans démonter l'autoradio et le brancher avec un raccord de sagouin sur une prise 12V de l'alim du PC…)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.