Journal Quelques nouvelles de MPDC

Posté par (page perso) . Licence CC by-sa
18
5
jan.
2013

Sommaire

Il y a un peu plus d'un mois, je présentais dans mon journal Des collections à la XMMS2 pour MPD, ou comment voir ses playlists comme des ensembles mathématiques une nouvelle manière originale de considérer sa bibliothèque musicale, en se basant sur le modèle des ensembles mathématiques. J'avais également présenté les bases de MPDC, un client en CLI (ou presque) pour MPD qui implémente ces idées. Voici mes dernières avancées.

Davantage de données avec Lastfm

La principale limitation que je voyais à ce concept était que les musiques telles qu'on les possède sur notre ordinateur ne sont que très peu décrites au final : artiste, album, titre, date, à la rigueur le genre, et dans la plupart des cas, c'est tout. Alors que le concept pouvait paraître séduisant sur le papier, il arrivait (et il arrive toujours !) d'être frustré quand on se trouvait dans l'impossibilité d'écrire une requête qui traduise nos envies, car le but de MPDC est justement d'éviter de devoir aller chercher ses musiques à droite et à gauche.

Pour aller plus loin, oao m'avait conseillé de me pencher sur les ensembles flous en posant ce problème :

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.

Dans cette situation, les tags ne suffisent plus et il me fallait donc une autre source d'information plus complète et peu contraignante à l'utilisation. J'ai opté pour Lastfm, un site communautaire où il est entre autres possible d'éditer les fiches des artistes et albums en leur ajoutant des tags. Bien que ces tags ne soient pas toujours pertinents car attribués par la communauté (il y a beaucoup de « masterpiece », « best band ever », etc.), ils ont le mérite d'être souvent assez nombreux. L'autre avantage de Lastfm, c'est que même les petits artistes qui ne dépassent pas le millier d'auditeurs peuvent être représentés et on peut espérer qu'avec le temps, leur nombre de tags augmente. Un autre point positif : l'API de Lastfm peut corriger les fautes mineures dans l'orthographe du nom d'un artiste ou d'un album.

Puisque télécharger des tags pour toutes les musiques n'est pas envisageable, MPDC se limite aux tags des artistes et des albums, les stocke en cache et est capable de les utiliser en parallèle aux tags « classiques » des fichiers, exactement de la même manière. Deux nouvelles requêtes s'ajoutent donc (« trouver les musiques des artistes qui possèdent le tag X » et « trouver les musiques des albums qui possèdent le tag Y ») et l'implémentation est quasi-transparente pour l'utilisateur.

Alors que je n'avais aucune musique taggée « genre = jazz », Lastfm est capable de me trouver une trentaine d'artistes qui, dans sa base de données, possèdent ce tag. Alors qu'avant MPDC n'aurait pas pu calculer l'intersection entre « genre = jazz » et « genre = ambient » (un fichier audio ne contient qu'une information sur le genre), Lastfm me retourne une dizaine d'artistes qui partagent ces deux tags dans ma bibliothèque. Puisque Lastfm a souvent tendance à être large dans ses tags — après tout, la musique est un domaine très subjectif —, il y a toujours moyen de recouper les résultats de ces requêtes pour les affiner.

Le principal inconvénient de cette méthode est qu'elle met de côté les artistes (et leurs albums) peu connus, qui n'ont pas ou peu de tags. Mais elle résout une grande partie du problème et j'en suis pour l'instant plus que satisfait.

…et des recommandations

Autre bonne nouvelle : les tags de Lastfm sont pondérés, c'est-à-dire que certains sont censés décrire mieux que d'autres l'artiste ou l'album.

Cela permet par exemple de calculer assez facilement des indices de similarité entre les artistes/albums. Bien que les algorithmes de Lastfm soient bien plus évolués (ils prennent également en compte les statistiques d'écoute et les goûts des membres), il serait trop long de passer par l'API pour cela. MPDC calcule donc lui-même ces similarités et j'ai fait en sorte qu'il soit possible, disons, de trouver les N artistes ou albums les plus similaires à une collection « favoris » : il s'agit de ceux qui correspondent le mieux à la tendance générale de la collection.

Là encore, la pertinence des résultats dépend avant tout du nombre de tags et de leur qualité pour chacun des artistes et des albums.

Autres changements

Un autre point intéressant à noter est que les collections sont maintenant des ensembles ordonnés (avant, les musiques étaient systématiquement triées de la même manière avant toute utilisation), ce qui facilite entre autres la gestion des playlists natives de MPD avec MPDC, puisqu'il y a conservation de l'ordre.

Ces derniers temps, j'ai essayé de rendre le programme plus agréable à utiliser, notamment en rendant la présentation des musiques personnalisable lorsque l'on demande à lister le contenu d'une collection : couleurs, liste des tags affichés, etc. Pour les collections qui contiendraient beaucoup d'éléments, il est possible de passer par un pager (par défaut, less).

J'ai également ajouté quelques petites fonctionnalités à droite et à gauche : possibilité d'exclure des musiques particulières lorsque l'on utilise des fonctions qui retournent des musiques choisies aléatoirement, ajout de commandes…

Le projet est toujours en développement actif et pour la suite, je compte avant tout essayer de simplifier au maximum la documentation (que je n'ai pas pu traduire pour le moment) et consolider ce qui a déjà été fait. Ensuite, j'essaierai de voir si je ne peux pas jouer davantage avec les poids des tags de Lastfm pour améliorer notamment la recherche de similarités.

Voici deux screens qui montrent comment on peut concrètement utiliser MPDC (sur le premier, la collection « relax » est un exemple de collection qui s'appuie sur les tags de Lastfm) :

MPDC

MPDC

  • # Tags multiples

    Posté par . Évalué à  5 .

    Très sympa ce client. Pleins de bonnes idées.

    Alors qu'avant MPDC n'aurait pas pu calculer l'intersection entre « genre = jazz » et « genre = ambient » (un fichier audio ne contient qu'une information sur le genre)

    Ça n'est pas tout à fait vrai. Ça dépend des formats, mais en ogg vorbis en en flac, tu peux mettre plusieurs tags ayant le même libellé, et MPD les voit tous.

    MPDC se limite aux tags des artistes et des albums, les stocke en cache et est capable de les utiliser en parallèle aux tags « classiques » des fichiers, exactement de la même manière

    Est-ce que tu utilises les stickers de MPD ? Ou un cache local ? Juste par curiosité.

    • [^] # Re: Tags multiples

      Posté par (page perso) . Évalué à  3 . Dernière modification : le 05/01/13 à 10:46

      Merci pour la précision sur les tags multiples, je n'ai jamais rencontré ce cas mais je ferai des essais car je ne pense pas que MPDC sache les gérer correctement dans l'état actuel.

      Non, je n'utilise pas les stickers de MPD, les fichiers de cache se trouvent tous dans ~/.cache/mpdc. D'ailleurs, j'ai oublié de le préciser, mais je compte prochainement m'occuper de la gestion des profils, notamment afin que plusieurs fichiers de cache puissent cohabiter sans s'écraser entre eux à chaque nouvelle connexion vers un autre serveur MPD.

  • # Intéressant

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

    C'est très intéressant l'idée d'exploiter Last.fm de manière assez aboutie.

    Par contre j'imagine qu'il faut avoir une bonne collection de musiques sur son ordinateur (et en bonne qualité, il faut de l'espace disque). À ton avis est-ce qu'il est possible de reprendre les mêmes idées pour s'en servir avec Spotify ?

    Il y a déjà Last.fm dans Spotify, mais c'est vraiment très minimaliste, et les suggestions deviennent inutiles si on prend l'habitude d'écouter plein de choses nouvelles.

    • [^] # Re:Intéressant

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

      Il est peut etre possible de porter le boulot de l'auteur sur mopidy.

    • [^] # Re: Intéressant

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

      Je ne connais pas bien Spotify mais je ne pense pas qu'il soit possible de rechercher des musiques en utilisant des expressions ensemblistes et en spécifiant des tags de recherche (c'est vrai que ce serait assez intéressant étant donné que le répertoire de musiques est quasi-infini). J'ignore également quelles informations leur algorithme utilise, s'il peut prendre directement en compte d'autres tags que les classiques artiste/album/titre/genre, et comment marche leur système de recommandations, mais dans tous les cas, on ne peut pas « injecter » les idées de MPDC dans Spotify sans passer par des « hacks » comme l'évoque Juke.

  • # Note: zsh

    Posté par . Évalué à  2 .

    Bonsoir.

    Je ne suis pas inscrit sur Github, alors je poste ici: avec zsh, la commande mpdc-playlist re g"electronic" renvoie

    [warning] Collection [gelectronic] doesn't exist
    
    

    Il faut utiliser la syntaxe suivante:

    mpdc-playlist re 'g"electronic"'
    
    

    Je ne sais pas si c'est à considérer comme une erreur ou non.

    En tout cas, merci pour ce programme, les "modifiers" sont particulièrement utiles.

    • [^] # Re: Note: zsh

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

      Merci pour le retour ! Ce comportement est normal car il est nécessaire d'entourer tous les arguments d'apostrophes ou de guillemets dès qu'ils deviennent un peu trop tordus, notamment lorsqu'ils contiennent eux-mêmes des quotes ou des espaces, des parenthèses, des « | », etc.

      Par exemple, mpdc-playlist re all fonctionne, tout comme mpdc-playlist re favoris-relax.une_playlist ou mpdc-playlist : next. Par contre, on a besoin d'échapper pour mpdc-playlist re "all-(favoris+relax)" ou encore mpdc-playlist : "random on".

      En utilisant la petite boîte GTK quand c'est possible, toutes ces contraintes disparaissent car ce qui est tapé est transmis tel quel au programme, sans que le shell ne transforme l'expression.

      • [^] # Re: Note: zsh

        Posté par . Évalué à  3 .

        Histoire de centraliser les retours, je me permets de poster ici, même si ça n'a rien à voir avec zsh.

        La commande mpdc-database lastfm update artists s'est très bien passée, mais dès que je lance mpdc-database lastfm update albums voici ce que j'ai :

        [info] Will remove datas for 0 extra album(s)
        Traceback (most recent call last):
          File "/usr/bin/mpdc-database", line 9, in <module>
            load_entry_point('MPDC==1.0', 'console_scripts', 'mpdc-database')()
          File "/usr/lib/python3.3/site-packages/mpdc/mpdc_database.py", line 113, in main
            args.func(args)
          File "/usr/lib/python3.3/site-packages/mpdc/mpdc_database.py", line 77, in lastfm_update_albums
            info('Will fetch datas for %s missing album(s)' % len(missing_albums))
        UnboundLocalError: local variable 'missing_albums' referenced before assignment
        
        

        J'utilise mpdc-git sur AUR (Arch Linux).

        • [^] # Re: Note: zsh

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

          Merci pour ce retour, je viens de corriger ça dans la version git.

          • [^] # Re: Note: zsh

            Posté par . Évalué à  3 .

            Ça fonctionne très bien maintenant.

            En revanche mpdc part du principe qu'un album appartient à un artist, ce qui fait que pour les compilations, on a un beau [warning] LastFM error: Album not found. Il faudrait plutôt utiliser le tag albumartist.

            • [^] # Re: Note: zsh

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

              En effet, ce serait bien plus cohérent. Merci pour le conseil, je m'en occuperai en priorité.

  • # Organisation de la musique ?

    Posté par . Évalué à  3 .

    Je profite de ce journal pour demander un truc : comment organisez-vous votre musique sur votre disque dur ? Est-ce que c'est en vrac dans un dossier ?
    J'avais fait un classement avec un dossier par artiste, mais aujourd'hui ça ne convient pas, j'ai pas mal de remix, des artistes qui s'associent sur une seule musique, des "sessions" où plusieurs DJs mixent à la suite… Un classement par genre ne me convient pas car, comme dit plus haut, c'est subjectif, mais si en plus un artiste change de style plusieurs fois, je ne pourrais pas mettre tous ses titres dans un seul dossier.

    • [^] # Re: Organisation de la musique ?

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

      Pour mon cas, j'ai fait un chroot /mpd (pour sftp) contenant un dossier torrent (je télécharge que en torrent) contenant tout les musiques en vrac. Ensuite, j'ai un dossier music qui, à coup de ln est bien organiser et c'est ce dossier que MPD lit. Je pense que c'est le meilleur, je garde une organisation par artiste et dès que j'ai des albums à coup de .feat, je dis merci le lien symbolique. Il y a donc peut être des doublons dans la BDD de MPD mais jamais de doublons de fichier.

    • [^] # Re: Organisation de la musique ?

      Posté par . Évalué à  2 .

      Une organisation Année/Titre de l'album/*.mp3 le tout correctement tagger.

      Pourquoi par année ? ben ca permet de répartir un peu la quantité de dossier. Année et titre de l'album, c'est factuel :)

    • [^] # Re: Organisation de la musique ?

      Posté par . Évalué à  5 . Dernière modification : le 06/01/13 à 11:57

      Je pense que pour avoir une organisation efficace, il faut raisonner en bibliothèque physique. Ce qui signifie organiser en dossiers/sous-dossiers comme on organiserait en meubles/étagères. Et taguer correctement toutes les pistes, avec au moins artist, title, tracknumber, album, albumartist. Et composer et grouping dans le cas de musique classique.

      Dans albumartist, je mets soit la même chose que dans artist si c'est un album « normal », c'est-à-dire toutes les pistes par la même personne, soit quelque chose de représentatif dans le cas où les artists ne sont pas les mêmes sur toutes les pistes (coffrets, compilations, BO, etc.). À adapter pour les artistes qui changent de groupe en restants les mêmes. Par exemple, pour tous les albums ayant pour artist « Bob Marley & The Wailers » ou « The Wailers », l'albumartist est systématiquement « Bob Marley ». Pareil pour Jimi Hendrix ou ceux qui changent de nom (la Ruda [Salska] par exemple).

      Ensuite j'organise pas tout à fait de la même manière (mais dans le même Musique) selon le type de publication. En gros, et avec quelques exemples :

      Les albums studios, les lives, les EP, les singles sont dans Musique/$albumartist/$date - $album/[$discnumber-]$tracknumber. $title
      $discnumber n'apparait que si >1.

      Les BO sont dans Musique/Soundtracks/$date - $album/[$discnumber-]$tracknumber. $artist - $title

      Pour les compilations, c'est du cas par cas, mais en gros c'est Musique/$albumartist/$date - $album/[$discnumber-]$tracknumber. $artist - $title
      Ici albumartist dépend de la compilation, par exemple pour un album de reprises d'un mec connu, albumartist sera le nom de ce mec. Si c'est des compilations issues de radios ou de label, albumartist sera le nom de la radio ou du label.

      Dans le cas de coffret, soit c'est des compilations et je fonctionne comme les compilations en rajoutant un dossier du nom du coffret entre albumartist et album, soit c'est des discographies complètes et je les éclates pour les traiter en albums individuels.

      Pour le classique c'est le bordel, le tag grouping aide beaucoup mais quasi aucun lecteur audio ne le prend en charge correctement. Ça représente l'œuvre musicale dont fait partie le mouvement. Par exemple pour un CD des Quatre Saisons de Vivaldi, dans album je vais mettre « Les Quatre Saisons », dans title le nom du mouvement (allegro, largo, etc.) et dans grouping le nom de l'œuvre, par exemple « Concerto nº 1 en mi majeur, op. 8, RV 269, « La primavera » (Le Printemps) ».
      L'organisation va donner en gros Musique/Classique/$albumartist/$album ($composer)/$tracknumber. $grouping - $title
      Mais là je suis très flexible.

      Respecter cette organisation me permet d'utiliser un lecteur audio qui accède à la musique en mode « système de fichier » mais qui est également capable de faire des recherches sur les tags.

      Je déteste les lecteurs qui imposent le classement par tags que je ne choisis pas et qui impose le même classement pour toute la musique. Je trouve ça inutilisable.

      J'utilise donc pour lire la musisque MPD avec ncmpcpp, sonata ou mpdc ; j'utilise pour taguer la musique ex falso en mode manuel ou beets en mode automatique (à retoucher quasi systématiquement).

      Pour les pistes ayant plusieurs artists, tout va bien, MPD gère les tags multiples sur une même piste. On peut mettre autant d'artists qu'on veut.

    • [^] # Re: Organisation de la musique ?

      Posté par . Évalué à  3 .

      J'utilise beets (http://beets.radbox.org/) pour tagger et organiser ma musique. Tout est synchronisé avec Musicbrainz, ce qui fait que les tags s'améliorent avec le temps. En plus beets permet de récupérer les pochettes des albums, les paroles, les genres de last.fm et beaucoup d'autres trucs.

      Une fois que tout est bien taggé, j'utilise musiccabinet pour lire ma musique (http://dilerium.se/musiccabinet/). Le logiciel utilise les données de last.fm pour jouer des radios thématiques (genre, radio de l'artiste), les chansons les plus jouées selon last.fm de chaque artiste, donner des recommandations etc.

  • # Quelques propositions d'ajouts

    Posté par . Évalué à  3 .

    Bonjour nhrx,

    j'ai pensé à quelques (gros) ajouts qui pourraient être intéressants pour mpdc, mais je n'ai toujours pas de compte github.

    MPDC a en quelque sorte apporté à MPD les listes de lecture intelligentes qu'on retrouve dans d'autres logiciels, en améliorant leur utilisation. Maintenant, on peut imaginer des critères de sélection qui ne soient pas sur les tags des chansons, mais sur les données de lecture elles-mêmes. Par exemple, un système de notation des chansons pour prioriser celles qu'on apprécie le plus, ou encore un compteur de lecture pour faire des collections sur ce qui est rarement écouté. Dans le même genre d'idées, pourquoi pas la date de dernière lecture, pour pouvoir créer la collection « bien noté mais plus écouté depuis 2 ans » ? Ou encore la date d'ajout à la BDD, pour faire des collections sur les chansons récemment ajoutées, ou encore une collection « ajouté en 2012 ».

    Je suppose que pour tout ça, il faudrait utiliser les stickers, et que pour la plupart de ces idées il faudrait que ce soit carrément MPD qui écrive dans les stickers pour rque ce soit efficace. Faudrait donc tater le terrain du côté des dev de MPD, ce qui risque d'être un peu compliqué. J'imagine.

    • [^] # Re: Quelques propositions d'ajouts

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

      Merci pour ces propositions. Cependant, je ne compte pas (en tout cas pour le moment) faire de MPDC un daemon ni alourdir le programme en faisant ce genre de statistiques qu'il faudrait mettre à jour à chaque utilisation. Mais je reconnais que cela pourrait être pratique, d'ailleurs je crois me souvenir avoir vu quelques clients qui proposaient ce genre de fonctionnalités. Je regarderai tout de même ce qu'il est possible de faire avec la BDD existante de MPD.

      Pour le système de notations, ça pourrait être implémentable mais il faudrait d'abord que j'ajoute au parser des tests de supériorité/infériorité pour que ce soit intéressant (note >= 4, et pourquoi pas étendre le système au tag « date »). Pour rassembler des chansons que l'on apprécie, on peut aussi utiliser des collections.

      Sinon, je viens de mettre à jour la version Git de MPDC et les recommandations issues de Lastfm utilisent maintenant en priorité le tag « albumartist » au lieu de « artist » (il peut être nécessaire de supprimer le fichier de cache ~/.cache/mpdc/1/albums_tags.mpdc et de remettre à jour).

      • [^] # Re: Quelques propositions d'ajouts

        Posté par . Évalué à  2 .

        Merci pour ces propositions. Cependant, je ne compte pas (en tout cas pour le moment) faire de MPDC un daemon ni alourdir le programme en faisant ce genre de statistiques qu'il faudrait mettre à jour à chaque utilisation. Mais je reconnais que cela pourrait être pratique, d'ailleurs je crois me souvenir avoir vu quelques clients qui proposaient ce genre de fonctionnalités. Je regarderai tout de même ce qu'il est possible de faire avec la BDD existante de MPD.

        Oui il faudrait que ce soit MPD qui intègre tout ça.

        Sinon, je viens de mettre à jour la version Git de MPDC et les recommandations issues de Lastfm utilisent maintenant en priorité le tag « albumartist » au lieu de « artist » (il peut être nécessaire de supprimer le fichier de cache ~/.cache/mpdc/1/albums_tags.mpdc et de remettre à jour).

        Super, merci beaucoup

Suivre le flux des commentaires

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