Journal Des collections à la XMMS2 pour MPD, ou comment voir ses playlists comme des ensembles mathématiques

Posté par  . Licence CC By‑SA.
Étiquettes :
40
25
nov.
2012

Depuis près de deux ans, j'utilise MPD pour écouter de la musique, appréciant son modèle client/serveur et sa simplicité. À mesure que ma bibliothèque musicale se remplit, je remarque de plus en plus qu'il est long et ennuyeux de devoir toujours sélectionner ses musiques pour compléter sa liste de lecture avant de pouvoir enfin en profiter. D'ailleurs, j'ai souvent tendance à ajouter « en bloc » des dossiers et ça s'arrête là, car je n'ai pas le courage d'aller chercher mes musiques séparément un peu partout sur mon disque dur. J'ai donc pris le temps de me demander comment il serait possible de remédier à tout cela, en développant un client pour MPD.

Les playlists telles que tout le monde les connaît ne m'ont jamais attiré ou en tout cas elles ne se sont jamais montrées suffisantes, sans doute parce qu'elles sont figées et que si l'on possède plusieurs milliers de morceaux, créer des playlists pour chacune de ses humeurs est impossible. D'ailleurs, mon autre problème, incompatible avec l'utilisation des playlists, est que j'aime bien changer le contenu de ma liste de lecture très régulièrement.

Plusieurs lecteurs de musique ont déjà implémenté depuis longtemps un système de génération de playlists dynamiques, basé sur les tags des fichiers par exemple, mais c'est souvent bien pénible à utiliser (trop verbeux, listes déroulantes pour choisir des conditions, 36 zones de texte à compléter, etc.) ou alors très limité. Je voulais un système bien plus flexible et surtout plus pratique et rapide à utiliser, qui serait capable de générer des playlists dynamiques à la volée et de les utiliser pour manipuler la liste de lecture (ajout, retrait, remplacement…). En même temps, je n'avais pas envie d'écarter le concept des playlists traditionnelles, car dans le cas d'une playlist « favoris », c'est ce qui reste souvent le plus pratique pour identifier ses musiques préférées, éparpillées un peu partout. L'idée était donc de mélanger les deux concepts (playlists dynamiques/playlists statiques) tout en étendant les possibilités des playlists plus loin que ce que la plupart des lecteurs proposent.

Après y avoir davantage réfléchi, le concept de playlists tel que je le voyais se rapprochait de la notion d'ensemble en mathématiques car les opérations ensemblistes correspondaient en tout point à ce que je recherchais d'un point de vue flexibilité : si on considère une playlist comme un sous-ensemble de la bibliothèque musicale, alors il serait possible de décrire une infinité de sous-ensembles et d'effectuer des opérations entre et sur tous ces sous-ensembles, de manière à obtenir un nouveau sous-ensemble, une playlist personnalisée. C'est seulement à ce moment que j'ai découvert que XMMS2, une alternative à MPD, disposait d'un concept similaire, les « collections ». Dans un certain sens, ça m'a rassuré de voir que je n'étais pas le seul à y avoir pensé et j'ai pu m'en inspirer pour l'implémentation — et en premier lieu pour le nom que j'allais donner à ces « sous-ensembles » —, bien que je la trouvais chez XMMS2 encore trop verbeuse.

Aujourd'hui, j'ai fini d'implémenter la plupart des idées que j'avais tournant autour de ce concept de « collections », et j'en ai fait un client pour MPD que j'ai appelé sans grande inspiration MPDC. Il se manipule avec des commandes, soit directement dans une console ou dans une petite boîte de dialogue, avec une syntaxe que j'ai voulue minimale pour que ce soit rapide à utiliser à n'importe quel moment.

Je ne vais pas m'étaler plus longtemps ici, l'implémentation et l'utilisation du client sont décrites sur la page du projet pour les intéressés. J'espère avoir été suffisamment clair et si vous avez des remarques ou des retours, n'hésitez pas !

  • # Sympa !

    Posté par  . Évalué à 2.

    Je vais essayer ça …
    Merci !

  • # et en français?

    Posté par  (site web personnel) . Évalué à 2.

    Pas mal ce projet.

    J'ai parcouru la doc, mais c'est en anglais.

    Ce soir, je n'ai pas envie de lire de l'english, so, I prefer read this later.

    C u

    Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html

    • [^] # Re: et en français?

      Posté par  . Évalué à 5.

      J'avais commencé à écrire quelque chose en français, mais maintenir deux versions alors que la forme et le contenu n'arrêtaient pas d'évoluer me faisait perdre beaucoup de temps. Mais c'est prévu !

    • [^] # Re: et en français?

      Posté par  . Évalué à 4.

      I prefer to read this later.

      Ou

      I prefer reading this later.

      • [^] # Re: et en français?

        Posté par  (site web personnel, Mastodon) . Évalué à 2.

        I prefer reading this later.
        
        

        Je sais pas pourquoi mais ça sonne un peu faux dans ma tête, quelqu'un peut confirmer que c'est de l'anglais ? Non pas que je doute de Marotte mais quand même :p

        • [^] # Re: et en français?

          Posté par  . Évalué à 3.

          I'd rather read this later.
          I'd prefer reading this later.

          If i'm not mistaken :-)

          La gent féminine, pas la "gente", pas de "e" ! La gent féminine ! Et ça se prononce comme "gens". Pas "jante".

          • [^] # Re: et en français?

            Posté par  . Évalué à 1.

            Sauf que "I'd rather read this later." ça ne veut pas dire la même chose. C'est "Je ferais mieux de lire ça plus tard."

        • [^] # Re: et en français?

          Posté par  . Évalué à 2.

          C'est plutôt "I prefer to read this later" dans le contexte du commentaire précédent. "I prefer reading" existe mais effectivement, avec le "later" derrière ça me semble pas terrible.

          http://forum.wordreference.com/showthread.php?t=629963&langid=6

          • [^] # Re: et en français?

            Posté par  . Évalué à 2.

            Exact. Je le note pour later :-)

            Vu dans ton lien :

            Q: Would you like to play a game?
            A: No, thanks. Right now, I prefer to read.*

            *Also, and perhaps more commonly, "I would prefer to read."

            La gent féminine, pas la "gente", pas de "e" ! La gent féminine ! Et ça se prononce comme "gens". Pas "jante".

  • # Sympa

    Posté par  . Évalué à 2.

    J'avais aussi eu l'idée de faire des regroupements de la sorte (pas aussi poussé par contre ! ), mais sans avoir une vue mathématique des choses et en plus sans les compétences pour le faire.

    Bravo !

    • [^] # Re: Sympa

      Posté par  . Évalué à 2.

      Merci !

  • # Merci

    Posté par  . Évalué à 1.

    Merci tu m'a fait découvrir les collections de xmms2. Mais je suis d'accord avec toi, MPDC semble avoir une interface plus agréable.

    Bravo pour ton travail !

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # Re: Merci

      Posté par  . Évalué à 1.

      Merci pour vos commentaires encourageants !

  • # Ensembles flous

    Posté par  . Évalué à 3.

    C'est intéressant, c'est une approche qui me semble assez cohérente. As-tu pensé à aller plus loin et à utiliser les ensembles flous ? Cela permettrait d'exprimer le fait que telle chanson n'est pas toujours classée dans telle catégorie, qu'une sous-catégorie est un peu liée à une autre, qu'une chanson est appréciée ou non (catégorie "j'aime") ou d'autres logiques flous ? Ça me semblerait assez bien adapté à un classement qui a une part de subjectivité, comme peut l'être une collection musicale.

    • [^] # Re: Ensembles flous

      Posté par  . Évalué à 1.

      Merci pour ton commentaire. Je ne connaissais pas les ensembles flous et je me suis un peu renseigné, mais je ne vois pas, concrètement, comment je pourrais implémenter une telle fonction de degré d'appartenance à un ensemble, pour une musique donnée, sans revoir une bonne partie du mécanisme (actuellement c'est très simple : pour chaque critère constituant la requête, je récupère un ensemble de musiques et en fonction des opérateurs, j'effectue des opérations ensemblistes directement avec Python).

      • [^] # Re: Ensembles flous

        Posté par  . Évalué à 3.

        Je ne sais pas comment ton application est structurée, donc ma remarque n'allait pas plus loin que la suggestion. Pour le lien avec la musique, on peut dire que telle musique est clairement d'un type donné, mais telle autre ne l'est qu'un peu. Si je veux du jazz, de la musique d'ambiance et de la musique que j'apprécie, l'intersection stricte risque d'être quasi nulle, alors que certaines chansons correspondent un peu aux trois critères. C'est sûrement difficilement implémentable dans un lecteur selon l'implémentation choisie, mais c'est quelque chose qui me plairait bien d'avoir.

        • [^] # Re: Ensembles flous

          Posté par  . Évalué à 1.

          Je pense que ce genre de choses est réalisable à partir du moment où l'on a une base de données exploitable permettant d'obtenir toutes les relations entre les musiques, et relativement complète, en s'appuyant par exemple sur les données et statistiques de LastFM (manipuler les nombreux tags « pondérés » que chaque artiste et titre possède irait plus ou moins dans le sens de ta suggestion, si je l'ai bien comprise). Malheureusement, avec le modèle actuel de MPDC, les limitations de LastFM ou simplement les contraintes du modèle client/serveur, je crains que les performances soient vraiment basses pour ce type d'opérations.

          Quand tu dis que « certaines chansons correspondent un peu aux trois critères », c'est le « un peu » qui me semble pas très évaluable sans avoir recours aux opérations complexes que je viens d'évoquer (ou alors ce ne serait pas forcément très pertinent : la seule solution que je vois pour le moment serait, dans ton cas, de décrire « l'ensemble des musiques qui répondent au moins à N critères parmi une liste de critères donnés »).

        • [^] # Re: Ensembles flous

          Posté par  . Évalué à 1. Dernière modification le 28 novembre 2012 à 19:56.

          Je reviens un peu sur ce que j'ai dit plus haut. Cet après-midi, j'ai fait quelques petites expérimentations avec LastFM et j'en suis plutôt satisfait. Si tout va bien, il sera possible de mettre en cache tous les tags disponibles sur LastFM des artistes et albums de sa bibliothèque et comme ces tags sont pondérés, MPDC pourra lui-même chercher les similarités en un temps raisonnable.

          J'ai prévu d'implémenter ça sous forme de modificateur (cf. la doc de MPDC) de manière à ce que la recherche de similarités puisse se faire sur une collection. Donc dans ton cas, on pourrait chercher les N albums les plus similaires ou les musiques des N artistes les plus similaires à la collection résultante de l'union des musiques de jazz + d'ambiance + favorites.

          Comme les tags sont pondérés, je pense qu'un mécanisme de ce genre pourrait se rapprocher des ensembles flous dont tu parlais. Néanmoins il faut encore que je réfléchisse à comment estimer/équilibrer les poids de chaque tag lorsque la collection jazz contient par exemple 100 fois plus de musiques que la collection ambiance : est-ce qu'il faut rechercher en priorité les ressemblances avec le jazz ou considérer le poids du jazz et celui de l'ambient comme équivalents ? Pour le moment je réfléchis à une solution qui se trouverait au milieu.

          • [^] # Re: Ensembles flous

            Posté par  (site web personnel) . Évalué à 2.

            utilises tu une lib pour attaquer lastfm ?

            • [^] # Re: Ensembles flous

              Posté par  . Évalué à 1.

              Jusque-là non, aucune n'a l'air d'être activement maintenue et il arrive qu'il leur manque des fonctionnalités. Du coup je préfère parser directement le Json, c'est aussi rapide.

    • [^] # Re: Ensembles flous

      Posté par  . Évalué à 0.

      Pour info, je viens de terminer d'intégrer le système dont je parlais, capable, pour une collection donnée, de trouver des albums et artistes similaires avec les données de Lastfm (j'ai mis à jour la doc).

  • # Je ne sais pas si tu connais IMMS

    Posté par  (site web personnel) . Évalué à 1.

    IMMS a aussi une approche intéressante de la gestion de la playlist: il étudie comment tu écoutes ta musique (quels morceaux tu sautes, lesquels tu écoutes en entier et sur lesquels tu reprends après avoir sauté) et il en déduit tes préférences et ton humeur. À partir de là il choisit aléatoirement les morceaux de ta playlist qui devraient le plus te plaire à un instant donné.

    • [^] # Re: Je ne sais pas si tu connais IMMS

      Posté par  . Évalué à 1.

      Je ne connais pas spécialement IMMS mais j'ai pas mal entendu parler de ce genre de logiciels intelligents. Actuellement, je suis en train de faire quelques essais avec LastFM car je pense que c'est une des solutions les plus simples à mettre en place. Je compte dans un premier temps ajouter ce que j'appelle dans la doc un « modificateur » qui permette de sélectionner N musiques similaires pour chacune des musiques de la collection (pour pouvoir faire quelque chose comme add c|s3 par exemple). Il faut encore que je réfléchisse à la forme et aux contraintes mais ce type de fonctionnalités est sur ma todo-list, dans la limite du possible.

    • [^] # Re: Je ne sais pas si tu connais IMMS

      Posté par  . Évalué à 0.

      Pour info, je viens de terminer d'intégrer le système dont je parlais, capable, pour une collection donnée, de trouver des albums et artistes similaires avec les données de Lastfm (j'ai mis à jour la doc).

Suivre le flux des commentaires

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