Sortie du lecteur audio Miam-Player 0.8.0

37
23
fév.
2016
Son

Depuis la sortie du lecteur audio Miam-Player 0.7.3 en août dernier, les choses ont continué à évoluer. Les plus gros changements dans cette première version de la branche 0.8 concernent l'ajout d'une nouvelle vue pour la présentation de sa musique.

Étant utilisateur de Foobar2000 (NdM: graticiel/freeware) depuis longtemps sous Windows (et anciennement de Winamp), il me manquait cette fonctionnalité importante pour pouvoir profiter pleinement de mon logiciel (NdM: libre sous GPLv3).

Au passage, la gestion des couleurs personnalisés a également été repensée, bien qu'il reste encore un peu de travail. Toute la musique est présentée sous la forme d'une liste unique. Quand cette liste possède le focus (par un clic de souris), les raccourcis claviers de A à Z sont assignés automatiquement afin de naviguer rapidement dans sa collection. Les raccourcis par défaut 'W', 'X', 'C' (précédent, rechercher en arrière, stop, etc. jusqu'à 'N') pour naviguer au clavier sont temporairement désactivés.

Sommaire

Nouvelle vue

Nouveau module audio

Autre changement d'importance, le remplacement du module de décodage audio. En effet, j'ai décidé pour les raisons suivantes de supprimer libVLC et de passer à libQtAV qui utilise FFMpeg. Auparavant, pour pouvoir brancher simplement libVLC, j'avais ajouté le wrapper libVlcQt. Pour comprendre un peu mieux de quoi il en retourne, il faut savoir que VLC et FFMpeg utilisent libAvCodec. Je suis donc passé de la chaîne
1. libAvCodec → libVLC → libVlcQt → Miam-Player à
2. libAvCodec → libQtAV → Miam-Player.

Le gain n'est pas sensible sous Windows mais perceptibles dans mes machines virtuelles sous Linux ou OSX. Ces modifications ont aussi été motivées par la réalisation d'une extension spécifique : le support d'AcoustID et de Chromaprint.

Parenthèse sur AcoustID

AcoustID est un projet open-source initié par Lukáš Lalinský qui cherche à créer une base de données libre d'empreintes audio pour pouvoir retrouver automatiquement les métadonnées d'une piste. Le principe fait penser grossièrement à l'application Shazam mais des différences de taille existent. Ce n'est pas une méthode d'analyse temps-réel d'un canal audio. Là, il faut posséder le fichier complet pour comparer son empreinte avec celles qui sont stockées dans une base de données. L'algorithme est capable toutefois de générer une empreinte similaire pour des fichiers encodés en FLAC ou en MP3. N'ayant pas réussi à faire fonctionner AcoustID avec VLC (pas d'API dans libVLC), j'ai testé d'incorporer les dépendances dans mon extension (-lavcodec -lavdevice …) et cela a fonctionné directement. Cela m'a amené à réfléchir sur l'opportunité de migrer le cœur du décodage vers FFMpeg. QtAV s'appuyant sur FFMpeg, cela m'a paru jouable.

L'idée d'une extension comme AcoustID serait de pouvoir sélectionner un dossier sur le disque dur (ou des éléments déjà taggués) pour rechercher et remplacer facilement leur métadonnées.

Troisième chantier : l'amélioration des performances générales.

Foobar2000 est en quelques sorte mon modèle sur ce point-là. La consommation de mémoire est incroyablement basse, et la vitesse de lancement bluffante. Je sais que la lutte va être difficile car le framework Qt est assez lourd mais malgré tout très bien optimisé. J'ai du repenser la gestion des fenêtres de dialogue et des vues dans son ensemble. Le changement de paradigme Instanciation de tous les objets dès le départ vers Initialisation paresseuse ne s'est pas fait sans mal. De larges portions de code permettant de charger les préférences ont du être réécrites. Finalement, cela m'a forcé à faire table rase du passé et à mieux séparer la logique contenant le chargement desdits paramètres avec la présentation et la modification de ces paramètres dans les options.

Ces premiers résultats sont très encourageants pour la suite car le temps de démarrage est instantané pour une bibliothèque comportant un millier de fichiers, et passe à une petite seconde pour plus de 13000 fichiers indexés dans la base SQLite. L'empreinte mémoire a diminuée d'une trentaine de pourcents, pour descendre à environ 40 Mo de RAM occupée lors de la lecture d'un fichier. Cela peut paraitre élevé mais il y a quand même la création de plus de 13000 lignes dans le modèle (l'IHM n'affichant que ce qui est nécessaire).

Autres améliorations

  • Modification du mode de lecture aléatoire d'une playlist en mode tirage sans remise ;
  • Ajout d'une traduction en chinois, par l'auteur de QtAV, Wang-Bin ;
  • Prise en charge des touches multimédias pour contrôler le lecteur. Sur le clavier Logitech diNovo Edge en ma possession, Fn + F8 envoie la commande "Piste suivante". Il reste cependant à faire marcher ces raccourcis en mode global, c'est à dire même lorsque le focus n'est pas sur Miam-Player (cela fonctionne presque : il faut étrangement activer une première fois un raccourci avec le focus sur l'application) ;
  • Ajout du fournisseur de pochettes d'Amazon ;
  • Diverses corrections sur le gestionnaire de listes de lecture (plus son passage en mode chargement tardif) ;
  • Et son lot de corrections d'anomalies.

Évolutions futures

La réalisation de la vue unique m'a fait cogiter sur la direction à prendre pour la suite. Possédant un smartphone sous Android, l'idée de réaliser un portage me traverse régulièrement l'esprit. Malheureusement, le manque de temps et la base de code devenant de plus en plus conséquente, la quantité de travail à effectuer pour avoir un rendu propre et adapté à une navigation tactile me semble très élevée. J'ai commencé à regarder les IHM en QML pour avoir une meilleure vision sur ce qu'il est possible de réaliser. Pourquoi le QML pourriez-vous vous demander ? QML intègre nativement beaucoup de choses concernant le tactile, la rotation d'écran, la mise à l'échelle (et autres pixel-perfect).

L'idée que je m'en fais, c'est qu'en recodant les interfaces graphiques en QML, il serait alors possible d'avoir une application universelle, qui s'adapte à tous les supports. Une première expérimentation a été menée sur le plugin qui cherche les pochettes manquantes, mais mes premiers retours sont assez mitigés. Déjà la consommation mémoire grimpe en flèche, et la réactivité diminue (le redimensionnement de la fenêtre est beaucoup plus lent). Après je n'ai peut-être pas utilisé QML de la bonne façon, en passant par une instance de QQuickView. Pour l'instant, réaliser une bonne application Bureau reste la priorité, donc je vais continuer sur les QWidget.

D'autres idées sont dans les cartons.

L'extension Deezer est en suspens en attendant Qt 5.6. La prochaine version du framework supprimera le module Qt Webkit, qui est remplacé par Qt WebEngine (ce dernier est basé sur Chromium). Pour pouvoir écouter de la musique en streaming via Deezer, Flash Player doit être installé. L'intégration de Flash signifie de plus qu'une partie du logiciel est dépendant de code non libre. Le site Internet de Deezer étant malgré tout assez bien fait, il me semble compliqué de transposer efficacement les fonctionnalité majeures dans Miam-Player. Pour terminer, charger Chromium alourdit considérablement l'application (via les dépendances à ajouter), dégrade les performances au démarrage, en plus de porter la consommation de RAM à plus de 150 Mo sans rien faire.

Personnalisation simplifiée

Dans les options, l'ajout d'une ComboBox proposant à minima deux options : une pour un thème clair, une pour un thème sombre me semble simple à mettre en œuvre. Cela pourrait apporter un petit plus pour améliorer l'expérience utilisateur, en facilitant la personnalisation.

Concernant la vue unique : ajouter le passage en mode "épinglé" de l'artiste, de l'album et de la pochette lors du défilement vertical. Petit plus cosmétique, pouvoir modifier automatiquement la pochette lors de la lecture d'une piste, si chaque piste possède sa propre pochette (oui ça existe, par exemple l'album Halo 27 - The Slip de Nine Inch Nails). On pourrait également autoriser le glisser-déposer d'une image si jamais l'album entier n'en possède pas.

En tout cas la prochaine version sera une version corrective car il reste encore beaucoup trop de tags FIXME et XXX dans le code. Je vais également me documenter sur CMake ou sur QBS car j'éprouve des difficultés pour rendre le code compilable et distribuable à la fois sous Windows et Linux ; OS X j'ai un peu laissé tomber…. Un Russe ayant pour pseudo Ilya87 est très actif sur GitHub, que ce soit au niveau de la traduction ou pour remonter des bugs ou pour compiler sous Arch Linux ! Mais le script ultime n'a pas encore été incorporé dans le dépôt Git. Le plus simple (pour moi) reste de compiler à la main.

  • # Logiciel de nouveau disponible sur Archlinux (AUR)

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

    Juste un petit message pour dire que j'ai récupéré le vieux port de Miam Player pour Archlinux, adapté pour la version 0.8 et ajouté sur AUR.

    Miam Player 0.8.0 - Archlinux - Xfce

    Le lien direct : https://aur.archlinux.org/packages/miam-player/

    En espérant être utile :D

    Un libriste qui en a sa claque des puristes.

    • [^] # Re: Logiciel de nouveau disponible sur Archlinux (AUR)

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

      Cool ! Merci bien FredBezies.

      Quant à moi, je me suis occupé d'adapter le script trouvé sur le repo de QtAV pour la construction de mon ppa:

      deb http://ppa.launchpad.net/bachelier-matthieu/ppa/ubuntu wily main
      deb-src http://ppa.launchpad.net/bachelier-matthieu/ppa/ubuntu wily main
      

      Je vais tester cela dans un VM Ubuntu "Vanilla".

      • [^] # Re: Logiciel de nouveau disponible sur Archlinux (AUR)

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

        Ce n'était pas grand chose. Le plus long a été de nettoyer l'ancien PKGBUILD pour l'adapter.

        Un libriste qui en a sa claque des puristes.

      • [^] # Re: Logiciel de nouveau disponible sur Archlinux (AUR)

        Posté par . Évalué à 2.

        J'ai pris le deb amd64 de ton ppa pour l'installer sur ma debian testing, mais on a un problème de dépendance qui ne peut pas être résolu :

          dpkg: dependency problems prevent configuration of miam-player:amd64:
          miam-player:amd64 depends on libqtav (>= 1.9.0~); however:
          Package libqtav is not installed.
          miam-player:amd64 depends on libtag1v5 (>= 1.9.1-2.4ubuntu1); however:
              Version of libtag1v5:amd64 on system is 1.9.1-2.4.

        Comme tu peux voir, libtag1v5 est déjà installée sur mon système en v 1.9.1-2.4., mais ça n'est pas compatible avec la version 1.9.1-2.4ubuntu1 que ta config demande.

        Tu pourrais éventuellement fournir un paquet deb qui puisse s'installer sur debian ?
        Merci.

        • [^] # Re: Logiciel de nouveau disponible sur Archlinux (AUR)

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

          Bonjour,

          Même si le problème de dépendance avec libtag1v5 était résolu, resterait celui avec libqtav. J'utilise launchpad et son système de ppa car Ubuntu est assez bien représenté dans le monde Linux/Unix, donc j'ai concentré mes efforts sur cette distribution.

          Néanmoins lorsque j'aurais un peu de temps devant moi, je vais m'installer une nouvelle VM basée sur Debian 8.3 (12 Go à télécharger en Torrent !) et essayer de faire fonctionner cela. Je te conseille malgré tout d'ouvrir un ticket ou mieux, ou pull request si tu as déjà réussi à modifier le fichier debian/rules :)

  • # Bien et...

    Posté par . Évalué à 10.

    Voici un article agréable à lire qui expose bien le cheminement de pensée de son développeur. Indispensable. Merci.

    Ya plus qu'à abandonner MS Windows ;).

    j'ai testé d'incorporer les dépendances

    J'ai tenté d'incorporer ?
    J'ai tester l'incorporation ?
    J'ai pesté contre l'incorporation ?
    J'ai lesté l'incorporation de dépendances ?

    Un zeste de dépendances est un geste qui ne fait pas de mal.

    • [^] # Re: Bien et...

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

      Merci pour le commentaire ! J'ai fait un effort car j'ai relu plusieurs fois mon billet avant de soumettre la dépêche, mais c'est vrai que cette tournure est un peu étrange…

      Sinon je lance un appel aux mainteneurs, les versions openSUSE, Mageia et [insérer la distribution dont vous êtes le héros] sont manquantes.

      • [^] # Re: Bien et...

        Posté par . Évalué à 2.

        Sinon je lance un appel aux mainteneurs, les versions openSUSE, Mageia et [insérer la distribution dont vous êtes le héros] sont manquantes.

        Travail en cours pour openSUSE…

  • # Site du projet

    Posté par . Évalué à 3.

    Le projet a l'air sympa mais le site est buggué.

    D'une manière générale, je pense que ce n'est pas une bonne idée de modifier le comportement de défilement normal. Et là, du coup, il y a des éléments que je ne vois pas. Ils sont en bas de ma fenêtre et quand j'essaie de descendre pour voir la site, je me retrouve un cran en dessous ce qui fait que je ne peux jamais voir certaines parties du site…

    • [^] # Re: Site du projet

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

      Bonjour,

      Oui le CSS, WebDesign & Cie n'est pas mon cœur de métier ! Je suis plutôt un techos dans l'âme… Mais j'essaie de faire des efforts !

      Quand j'aurais un peu de temps je passerai à Bootstrap + AngularJS, parce que ce sont des technologies super trending ;)

  • # Version Portable, s'il te plait.

    Posté par . Évalué à 2.

    Hello,

    Tout d'abord: un grand merci pour ton travail! Je suis utilisateur de foobar2000, et je vais tester Miam-Player.

    Au boulot j'utilise pas mal de logiciels "portables" tels qu'on peut en trouver sur PortableApps.com

    Tu pourrais en faire une version portable? C'est pratique pour installer sur une clé USB, ou juste dans un répertoire donné. La particularité de ces soft est qu'il stocke tout en local (ils ne laissent rien en base de registre par exemple) et tu peux déplacer le répertoire d'installation sans que ça perturbe le soft.

    • [^] # Re: Version Portable, s'il te plait.

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

      Bonjour,

      J'ai justement arrêté d'écrire dans le registre sous Windows, pour passer au format .ini (merci Qt, c'est une ligne dans le code). Ainsi, sous Windows les fichiers de préférences se trouvent :
      Pour le cache (base de données locale), exploitable via tout bon logiciel lisant le format SQLite, tel que l'excellent SQLiteBrowser

      • C:\Users[Utilisateur]\AppData\Local\MmeMiamMiam\MiamPlayer\mp.db

      Et les préférences de l'application :

      • C:\Users[Utilisateur]\AppData\Roaming\MmeMiamMiam\MiamPlayer.ini

      Sous Linux, même chose :

      • ~/.local/share/MmeMiamMiam/MiamPlayer/mp.db
      • ~/.config/MmeMiamMiam/MiamPlayer.conf

      Le seul problème vient de l'installeur, qui écrit des informations supplémentaires dans le Menu Démarrer, et associe les extensions si l'utilisateur le souhaite. Une extension nécessite les droits Admin, mais ne fonctionnant plus avec la version 0.8.0, je l'ai masqué temporairement… Cette dernière exécutait regsvr32 pour enregistrer une DLL (modification du Shell et ajoute des actions comme "Ajouter à la liste de lecture" lors d'un clic droit sur un fichier).

      Il est probable que faire un gros fichier zip d'une installation devrait fonctionner directement. Le seul problème que je vois, c'est le paquet "Visual C++ 2015 Redistributable" : il ajoute une seule dépendance au système. Je doute que Microsoft permette l'installation en mode utilisateur, mais ça vaut le coup de vérifier.

  • # Sublime

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

    Vous venez de me donner le sourire aux lèvres, WimAmp a bercé mon enfance si j'ose dire, c'etait tout simplement le logiciel audio au top, simple et léger. Quand je vois l'usine à gaz qu'est iTunes (sur Mac), ça me fait pleurer. un grand MERCI pour ce boulot colossal !!!!

    • [^] # Re: Sublime

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

      Oui je suis très sensible à l'expérience utilisateur. Il faut que le cœur du logiciel fasse ce qu'il a à faire avec efficacité, et qu'il le fasse bien. Quand je vois des softs faits par des multinationales, je me dis parfois, mais en fait les mecs, vous ne vous en servez pas ! iTunes est un très bon exemple, bien qu'il se soit légèrement amélioré.

      Après je ne dis pas que le mien est parfait, et encore moins terminé, mais étant motivé et persévérant, je trouve que je commence à avoir quelque chose qui tienne la route.

  • # Touches multimédia

    Posté par . Évalué à 2.

    Est-ce qu'il y a des gens qui ont rencontré des problèmes avec les touches multimédia ?

    Chez moi, sur openSUSE Tumbleweed, ça voulait pas ; le lancement de Miam Player bloquait même le clavier (sur GNOME seulement).

    J'ai repris un patch pour qxt et là ça a l'air de fonctionner mais je me demande si les touches marchent sur d'autres distribs sans ça.

    • [^] # Re: Touches multimédia

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

      Malheureusement je n'ai pu réellement tester cette fonctionnalité car les machines virtuelles émulent un clavier standard.

      Après si tu as rencontré une amélioration avec un patch de libQxt (je n'ai récupéré qu'une partie de la bibliothèque au passage), je l'intégrerais sous git dans les jours à venir.

Suivre le flux des commentaires

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