Journal MPD_sima: Client MPD console, non interactif en version 0.12.0

Posté par (page perso) . Licence CC by-sa
20
16
juin
2014

Quelques nouvelles de ce client utilitaire pour le lecteur MPD précédemment présenté dans un dépêche.

MPD_sima permet l'ajout automatique de titres dans la liste de lecture. Les titres sont choisis parmi les recommandations de services web qui sont présentes dans la médiathèque gérée par MPD.

Nouveautés

La version 0.12 est une grosse réécriture permettant une gestion plus modulaire du code (gestion d'extension, ie. « plugin »).

  • Possibilité de daemoniser le processus
  • Mode d'ajout d'album complet
  • Passage à Python3
  • Cache http persistant
  • Nouveau service web de recommandation
  • corrections de bugs et améliorations diverses.
  • Utilisation de identifiants MusicBrainz

Le passage à python3 a nécessité une nouvelle bibliothèque pour la partie client MPD, n'étant pas satisfait de python-mpd2 j'ai migré le code de python-mpd à python3 et publié un fork.

Le service web de EchoNest est assez contraignant quant au nombre de transaction autorisée (ie. 120 requêtes/minutes) pour un compte gratuit. J'ai donc écrit un cache persistant et migré vers requests afin de me simplifier la partie http.

Le service de recommandation de Last.fm reste cependant la source par défaut.

Installation

Le paquet python est disponible sur python package index, un paquet debian (testing) est disponible sur mon dépôt APT.

Bonne écoute :)

  • # Cool !

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

    Je l'ai installé cet après-midi (v 0.12.0-1 via ton dépôt Debian) et bien que je trouve certaines associations curieuses (je suis passé de Pendulum à Sting, O_o, mais c'est plus la faute de last.fm j'imagine), c'est très sympa.

    Par contre, je l'ai fait crasher :D

    Playing: Black Sabbath -  - Paranoid - 02 - Paranoid (02:53)
    2014-06-16 20:29:26 INFO   : Looking for artist similar to "Limp Bizkit"
    2014-06-16 20:29:28 INFO   : First five similar artist(s): Korn / Black Light Burns / P.O.D. / Linkin Park / Papa Roach...
    2014-06-16 20:29:28 INFO   : Looking availability in music library
    2014-06-16 20:29:29 INFO   : EXTRA ARTS: John McLaughlin/Electric Light Orchestra/Free/The Monkees/The Who/Van Halen/Eagles/Deep Purple/Jefferson Airplane/Kansas
    2014-06-16 20:29:30 INFO   : Got 85 artists in library
    2014-06-16 20:29:34 INFO   : Canned Heat / The Doors / alcatraz / Linkin Park / AC/DC / Korn / The Beach Boys / Deftones / Anthrax / Paul McCartney / Alice Cooper / Crazy Town / Bon Jovi / Bee Gees / Quicksi$
    2014-06-16 20:29:35 INFO   : Last.fm candidates: Canned Heat - 1966 - Rollin' And Tumblin' (03:06)
    2014-06-16 20:34:04 INFO   : No last track, cannot queue
    2014-06-16 20:34:04 WARNING: Queue plugins returned nothing!
    2014-06-16 20:34:04 INFO   : random fallback (sensible): Wilson Pickett - 1966 - Mustang Sally (03:06)
    2014-06-16 20:34:04 INFO   : Looking for artist similar to "Wilson Pickett"
    2014-06-16 20:34:06 INFO   : First five similar artist(s): Sam & Dave / Eddie Floyd / Arthur Conley / Percy Sledge / James Carr...
    2014-06-16 20:34:06 INFO   : Looking availability in music library
    2014-06-16 20:34:08 INFO   : "Carl Thomas" quite probably matches "Carla Thomas" (SimaStr)
    2014-06-16 20:34:09 INFO   : "Smokey Robinson & The Miracles" quite probably matches "Smokey Robinson and the Miracles" (SimaStr)
    2014-06-16 20:34:09 ERROR  : Unhandled Exception!!!
    2014-06-16 20:34:10 ERROR  : Traceback (most recent call last):
      File "/usr/lib/python3/dist-packages/sima/launch.py", line 135, in run
        start(sopt, restart)
      File "/usr/lib/python3/dist-packages/sima/launch.py", line 119, in start
        sima.start()
      File "/usr/lib/python3/dist-packages/sima/lib/daemon.py", line 163, in start
        self.run()
      File "/usr/lib/python3/dist-packages/sima/core.py", line 145, in run
        self.loop()
      File "/usr/lib/python3/dist-packages/sima/core.py", line 179, in loop
        self.queue()
      File "/usr/lib/python3/dist-packages/sima/core.py", line 91, in queue
        pl_callback = getattr(plugin, 'callback_need_track')()
      File "/usr/lib/python3/dist-packages/sima/lib/webserv.py", line 376, in callback_need_track
        self.queue_mode()
      File "/usr/lib/python3/dist-packages/sima/lib/webserv.py", line 333, in _track
        artists = self.get_local_similar_artists()
      File "/usr/lib/python3/dist-packages/sima/lib/webserv.py", line 239, in get_local_similar_artists
        ret_extra = self.get_recursive_similar_artist()
      File "/usr/lib/python3/dist-packages/sima/lib/webserv.py", line 198, in get_recursive_similar_artist
        last_trk = self.player.playlist[-1]
    IndexError: list index out of range

    Si tu veux plus de détails, je suis à ta disposition. ;)

    There is no spoon...

    • [^] # Re: Cool !

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

      Merci pour ton retour :)

      D'après le log je pense que tu n'utilises pas la conf par défaut, tu as dû modifier la valeur de depth.
      De plus je pense que l'erreur a dû survenir en manipulant la playlist de MPD à la main. J'ai réussi à reproduire en partie l'erreur chez moi :) Bon, dans tous les cas c'est un bug effectivement.

      Pourras tu confirmer mes hypothèses si dessus ?

      je suis passé de Pendulum à Sting, O_o

      En effet, ce sont les recommandations de last.fm.
      Il est possible de réduire le nombre d'artistes retournés, mais la contre-partie est de tomber rapidement dans une boucle (cf. option max_art). De plus il est préférable de laisser la valeur depth à 1 pour éviter de couvrir trop large, mais avec le même compromis que pour max_art concernant les boucles.

      En règle générale MPD_sima se comporte bien avec des médiathèques assez conséquentes (>500 artistes, 10000 titres) et un minimum éclectiques dans les styles.

      • [^] # Re: Cool !

        Posté par (page perso) . Évalué à 1. Dernière modification le 17/06/14 à 08:18.

        Pourras tu confirmer mes hypothèses si dessus ?

        Je confirme, c'est tout à fait ça. ;)
        En fait j'ai plusieurs fois de suite, supprimé la piste ajoutée automatiquement par mdp-sima pour forcer une nouvelle recherche.

        De plus il est préférable de laisser la valeur depth à 1 pour éviter de couvrir trop large,

        Je l'ai mis à… 10 :D

        A part ça, history_duration = 12, queue_length = 5 et consume = 0.

        There is no spoon...

        • [^] # Re: Cool !

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

          Merci pour tes retours :)

          MPD_sima est plus dédié à une utilisation non interactive, mais c'est clairement très tentant de vouloir le réorienter ou éviter certains titres :)

          Je l'utilise essentiellement pour alimenter une radio perso et il manque d'une vrai base d'utilisateurs pour remonter plus facilement ce genre de bug.

          Merci encore
          Bonne écoute :)

          • [^] # Re: Cool !

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

            Et bien de rien. ;)

            Je m'en suis servi toute la journée, et malgré les paramètres single_album=true et history_duration = 12, je me suis retrouvé avec des pistes issues de mêmes albums (surtout des compils / ost, mais pas que) ainsi que plusieurs pistes d'un même artiste à 3-4 pistes d'intervalle… :/

            There is no spoon...

            • [^] # Re: Cool !

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

              […] single_album=true et history_duration = 12, je me suis retrouvé avec des pistes issues de mêmes albums […] ainsi que plusieurs pistes d'un même artiste à 3-4 pistes d'intervalle… :/

              history_duration est une durée sur laquelle la recherche d'artistes déjà joués est réalisé. Cette liste est ordonnée chronologiquement afin de jouer des artistes joués il y a le plus longtemps. Bien évidement si un artiste n’apparaît pas sur cette durée il sera privilégié.
              La durée de l'historique permet simplement d'ordonnée la liste des artistes parmi laquelle on tire un titre, ce n'est pas une liste d'exclusion. Cela explique l'apparition de mêmes artistes malgré une durée d'historique longue.

              Quant à l'apparition de titres de même album c'est peut être un bug ou un défaut de tag dans la médiathèque.
              Le filtre single_album ne s’appuie que sur la liste d'attente des titres (c'.à.d. entre le titre courant et le dernier de la file). Un fois le titre d'un l'album joué il et tout à fait possible d'avoir un nouveau titre de cet album si celui ci n'est pas présent dans la liste d'attente.

              Quel est la taille de ta médiathèque ?
              La sortie de "mpc stats" fait l'affaire.

              • [^] # Re: Cool !

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

                Artists: 6255
                Albums: 4263
                Songs: 51838

                DB Play Time: 148 days, 10:59:12

                There is no spoon...

  • # python-musicpd

    Posté par . Évalué à 2.

    Est-ce que tu pourrais détailler un peu plus ce qui ne va pas avec python-mpd2 et pourquoi tu as forké ?

    • [^] # Re: python-musicpd

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

      Un peu d'historique :)

      Le fork est la dernière chose que je voulais faire, cela explique probablement les deux ans qui séparent les deux versions de MPD_sima, j'attendais que l'auteur initial de python-mpd réagisse enfin. J'ai moi même échangé à plusieurs reprise avec l'auteur de python-mpd à ce sujet afin d'éviter le fork [0].
      Avec la fermeture de la forge hébergeant le code de python-mpd je pense que nous pouvons abandonner l'idée que l'auteur original reprenne le projet.

      J'ai alors étudié les alternatives et il se trouve que python-mpd2 est la seule valable, c'est clairement le fork officiel de facto.

      Est-ce que tu pourrais détailler un peu plus ce qui ne va pas avec python-mpd2 et pourquoi tu as forké ?

      Je n'ai pas de critiques constructives à faire sur python-mpd2, je n'ai pas l'expertise nécessaire, comme je le dis plus haut python-mpd2 est le seule module MPD valable àmha. Le seul problème que j'ai rencontré est un problème d'intégration. python-mpd2 n'a pas modifié son espace de nom par rapport à python-mpd, cela pose des problèmes pour l'inclure dans le système (je parle de packaging Debian en particulier).

      Par ailleurs mon fork est moins évolué que python-mpd2. python-musicpd est pour python3 uniquement, gestion sommaire des sockets (pas de timeout), pas d'abstraction permettant l'ajout de commande, pas de support de logging.

      Mon fork est plus issue de cette volonté de garder un module simple pour travailler avec MPD et qui s'intègre facilement dans mon environnement (ie. problème de l'espace de nom). Il reste anecdotique par rapport au travail réalisé dans python-mpd2

      J'espère avoir répondu à ta question.

      [0] https://linuxfr.org/users/kaliko/journaux/fork-de-python-mpd

      • [^] # Re: python-musicpd

        Posté par . Évalué à 1.

        OK, je comprends ton problème.

        Vu que tu as l'air d'être impliqué dans Debian, est-ce que ça serait pas mieux de mettre à jour le paquet python-mpd dans Debian pour utiliser python-mpd2 à la place ?

        Comme tu le dis, le site officiel ne marche plus maintenant, l'auteur n'a pas été très présent (je crois qu'il avait redonné des signes de vie juste avant que le site ferme), le code officiel de ce paquet n'est plus disponible à part en remontant dans l'historique des dépôts Git ici et là… Jusqu'à la version < 0.5, python-mpd2 est censé assuré la compatibilité descendante avec python-mpd (j'ai cassé amélioré des trucs dans la version 0.5). Il y avait même, comme tu l'avais dis en 2012, un ITP qui a été laissé à l'abandon…

        (et puis si j'ai un jour j'arrive à sortir une nouvelle version stable de Sonata, ça serait bien que ça soit déjà packagé dans Debian aussi :p )
        • [^] # Re: python-musicpd

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

          Oui, l'ITP est de moi :D
          Le problème à l'époque était la nouveauté du fork et en raison du conflit sur l'espace de nom nous¹ avons jugé qu'il serait préférable d'attendre que les projet amonts (une dizaine à l'époque je crois) migrent leur code sur python-mpd2 ou un autre afin de pouvoir retirer tranquillement python-mpd (désormais abandonnée et mort) dans Debian.

          La situation a changé depuis, python-mpd2 n'assure plus la compatibilité et il n'y a plus qu'une poignée de projets qui dépendent encore de python-mpd:
          mpdris2, remuco-mpd, mpd-sima et sonata :D

          Étant donnée la situation, je pense en effet qu'il est possible aujourd'hui de faire avancer les choses.

          • remuco est mort², le retrait de remuco-mpd est tout à fait envisageable àmha, cf popcon du paquet.
          • sonata: Il serait tout à fait envisageable d'empaqueter une version beta pour retirer la dépendance à python-mpd, je pense que sonata doit être suffisamment stable, du moins autant de la version actuellement dans Debian.
          • mpd-sima n'est pas un problème
          • mpdris2 reste le seul projet à gérer. Proposer un correctif, communiquer avec les auteurs… bref pas mal de solutions envisageables.

          Je pense que ça avance. Comme ils disent, la route est longue depuis 2010, mais la voie est libre :)


          ¹ L'équipe d'empaquetage python de debian et moi même
          ² https://code.google.com/p/remuco/

Suivre le flux des commentaires

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