SimpleProtocolPlayer NG ­— jouez des sons de votre ordinateur sur votre appareil Android

Posté par . Édité par ZeroHeure, Davy Defaud, Ysabeau, Benoît Sibaud et patrick_g. Modéré par ZeroHeure. Licence CC by-sa.
Tags : aucun
27
24
oct.
2019
Android

Il y a quelque temps, j’ai découvert SimpleProtocolPlayer, une application Android sous licence Apache 2 qui permet de lire un flux audio non compressé depuis le réseau. Cette dépêche présente l’application, ainsi que de son inclusion dans la logithèque F-Droid.

Paramétrage de SimpleProtocolPlayer

Sommaire

SimpleProtocolPlayer, à quoi ça sert ?

Concrètement l’application permet de brancher un (vieux) téléphone ou une (vieille) tablette à des enceintes ou un ampli, et de jouer du son en provenance de son ordinateur. Si vous êtes comme moi, et que vous bougez tout le temps, du canapé à la table par exemple, mais que vous écoutez de la musique en permanence, vous apprécierez peut‐être de ne pas être embêté·e par une prise jack courte qui vous oblige à bouger vos enceintes dans toute la pièce et/ou faire des montages horribles et dangereux avec vos câbles. Remplacez tout cela, côté ordinateur, par un long câble réseau1 ou du Wi‑Fi, et ça sera beaucoup plus pratique.

Problème : absence dans la logithèque F-Droid

F-Droid est une superbe logithèque pour Android, contenant uniquement des applications libres.

Malheureusement, SimpleProtocolPlayer n’est pas disponible dans F-Droid. Une requête d’empaquetage avait été ouverte, puis fermée à défaut d’avoir des nouvelles de la personne développant l’application. Si F-Droid a le droit de publier une application sans l’autorisation de l’auteur ou de l’autrice grâce à la licence, la politique de cette logithèque est d’avoir son accord explicite pour le faire.

Solution : le fork

Mais c’est quand même dommage de ne pas pouvoir avoir cette application dans F-Droid. Si l’application est libre, il doit bien y avoir un moyen de l’ajouter à F-Droid. Et en effet, il suffit de la « forker », comme ça on peut soi‑même donner l’autorisation d’empaqueter le code. Et tant qu’on y est, on peut même faire ce travail d’empaquetage.

J’en ai profité pour corriger un petit souci : quand on appuie sur le bouton lecture, la lecture flux est maintenant redémarrée, en rechargeant sa configuration à partir de la valeur des champs. Auparavant, le bouton lecture ne faisait rien si un flux était déjà en cours de lecture.

Empaqueter une application pour F-Droid

Dans le principe c’est une opération relativement directe décrite dans le document CONTRIBUTING du dépôt où sont stockées les données utilisées par F-Droid :

  1. installer les outils F-Droid (et le SDK Android).
  2. cloner le dépôt des données ;
  3. écrire le fichier de données pour l’application ; certaines données ont leur place dans le dépôt de l’application lui‐même (descriptions, captures d’écran, journal des modifications) en suivant une structure de dossiers bien précise ;
  4. vérifier que ça compile, sinon revenir à l’étape précédente ; les outils de F-Droid peuvent demander des adaptations à apporter à l’application (dépôts Maven à changer, détection de blobs propriétaires…) ;
  5. ouvrir une demande de fusion.

Et je rajouterais une étape avant tout ça : se coordonner dans le fil de demande d’empaquetage de l’application. Pour SimpleProtocolPlayer, il a fallu définir une marche à suivre pour résoudre la situation bloquée. Dans mon cas, l’ajout a été fusionné très vite, et au bout de deux jours, l’application a été ajoutée à F-Droid.
Get it on F-Droid

Utiliser l’application

Concrètement, l’application présente plusieurs champs, dont l’adresse et le port à écouter pour lire le flux. Un appui sur le bouton lecture et c’est joué !

Côté ordinateur, sous Windows on pourra installer un programme fourni par le développeur original. Je n’ai pas essayé. Sous GNU/Linux, on pourra créer un flux monitor (un moniteur) avec PulseAudio. On peut le faire comme ça :

Installation (à faire une fois)

  1. lancez l’outil graphique paprefs, allez dans l’onglet « Simultaneous Output », et cliquez sur « Ajouter un périphérique de sortie virtuel pour une sortie simultanée sur toutes les cartes son locales » — de façon alternative, vous pouvez aussi créer un moniteur avec pactl et/ou en ajoutant une ligne dans le fichier /etc/pulse/default.pa ;
  2. dans un terminal, la commande suivante liste toutes les sorties :

    pactl list sources short
    
  3. la sortie ajoutée par paprefs est la dernière et s’appelle combined.monitor, repérez son numéro, en début de ligne ; chez moi, c’est 2 ;

  4. dans le fichier /etc/pulse/default.pa, ajoutez la ligne suivante ; changez le 2 par le numéro que vous avez repéré, et vous pouvez aussi changer le numéro de port par quelque chose qui vous convient :

    load-module module-simple-protocol-tcp source=2 record=true port=12345
    
  5. redémarrez PulseAudio :

     pulseaudio -k
    

Si vous ne voulez pas modifier votre configuration et que vous voulez simplement tester tout cela sur votre session actuelle, vous pouvez remplacer les étapes 4 et 5 par la commande suivante :

pactl load-module module-simple-protocol-tcp source=2 record=true port=12345

Jouer des sons

Envoyez les flux audio des applications que vous souhaitez jouer sur le téléphone dans la sortie ajoutée par paprefs (« Simultaneous output… »). Normalement, vous pouvez le faire simplement en utilisant le contrôle de volume qui vient avec votre environnement de bureau, ou en utilisant pavucontrol ou kmix. Vous pouvez éventuellement configurer ce moniteur comme la sortie audio par défaut. Si vous avez créé le moniteur avec paprefs, mettez vos sorties réelles en muet, sinon vous allez entendre vos sons à la fois sur l’ordinateur et sur le téléphone.

Pistes d’amélioration

Des pistes d’amélioration sont indiquées dans les rapports de bogues de l’application originale, parmi lesquelles je retiens surtout :

  • ajouter une manière de découvrir automatiquement les flux audios sur le réseaux (style Zeroconf), on pourrait aussi imaginer des liens (voire une fusion ?) avec KDEConnect ;
  • des onglets pour avoir plusieurs flux configurés ;
  • un avertissement quand le Wi‑Fi est éteint.

Je rajouterais :

  • plus de messages quand il y a des échecs (cela résoudrait peut‐être le troisième point de la liste précédente) ;
  • une automatisation de l’installation sous GNU/Linux ; ça ne doit pas être très compliqué à faire, on aurait par exemple un petit script qui crée une sortie monitor avec un nom sympa et lui ajoute le module simple-protocol automatiquement.

Conclusion

Dans cette dépêche, nous avons survolé l’intégration d’une application dans F-Droid, et présenté SimpleProtocolPlayer (NG), une application que vous trouverez peut‐être utile. Toutes les contributions sont les bienvenues. Je ne maîtrise pas encore son code et je n’ai pas prévu de passer un temps fou à développer cette application (elle fait ce que j’ai besoin qu’elle fasse), mais je suis de fait son mainteneur et j’accepte volontiers les améliorations (y compris celles que je présente dans cette dépêche), suggestions et rapports de bogues.


  1. Cela dit, si vous faites cela, un long câble jack vous permettra peut‐être d’arriver à vos fins plus simplement. :-) 

Aller plus loin

  • # MàJ Dépots

    Posté par . Évalué à 2 (+1/-0).

    Penser à bien faire une mise à jour des dépôts dans FDroid d'abord. Je ne comprenais pas pour quoi je ne trouvai pas l'appli.

    A coupler avec VLC Freemote ?

  • # Publication difficile sur F-Droid

    Posté par . Évalué à 1 (+0/-0).

    Ah tiens marrant moi j'ai ouvert un ticket sur le forum, mon appli est nickel aucun warning et tout, mais pas moyen de la voir apparaître sur le store. J'ai dû louper une étape ? (ça fait 4 mois …)

    • [^] # Re: Publication difficile sur F-Droid

      Posté par . Évalué à 1 (+0/-0). Dernière modification le 29/10/19 à 00:59.

      Mmh, je réponds à moi‐même, a priori il faut forker le dépôt git des applis et ajouter soi‐même son appli… La flemme !

      • [^] # Re: Publication difficile sur F-Droid

        Posté par . Évalué à 4 (+2/-0). Dernière modification le 29/10/19 à 01:00.

        Pas besoin de forker le dépôt des applications, mais il faut avoir l'accord de l'équipe de développement.

        Il faut ajouter soi‐même son application, ou attendre que quelqu'un le fasse. Mais cela consiste à écrire un petit fichier yaml de 15 lignes et faire une demande d'intégration, il n'y a rien de très compliqué et ça vaut le coup de le faire. :-)

        Ensuite, l'application est mise à jour toute seule avec les étiquettes git du dépôt.

        Je peux t'aider si tu veux.

  • # Typo

    Posté par . Évalué à 2 (+1/-0).

    Si F-Droid aurait

    Si F-Droid avait.

    sur toutes les cartes sont locales

    sur toutes les cartes son locales

    Chez-moi, c’est 2.

    Chez moi, c’est 2.

    Si un modo pouvait corriger :)

    • [^] # Re: Typo

      Posté par (page perso) . Évalué à 3 (+0/-0).

      Corrigé, merci.

      • [^] # Re: Typo

        Posté par (page perso) . Évalué à 2 (+1/-1).

        Hep hep hep !
        « Si F-Droid aurait … » c'est du conditionnel parfaitement correct : il aurait pourtant le droit mais choisit de ne pas le faire. Non ? Je me suis posé la question en modération.
        La correction avec l'imparfait est par contre fautive : Il avait pourtant le droit — il ne l'a donc plus — mais choisit de ne pas le faire.

        "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

        • [^] # Re: Typo

          Posté par . Évalué à 1 (+0/-1). Dernière modification le 25/10/19 à 20:40.

          Je confirme, il faut bien garder « Si F-Droid aurait », la phrase corrigée n'a pas de sens en l'état (la deuxième proposition n'est pas au conditionnel dans cette phrase).

          Parfois, les si aiment bien les -rait… :-)

        • [^] # Re: Typo

          Posté par . Évalué à 3 (+2/-0).

          Hum, j'avoue que j'ai lu la phrase un peu vite et je n'ai pas remarqué que ce n'était pas l'habituel "Si+imparfait, conditionnel". Mes excuses.

          Est-ce que le conditionnel s'applique vraiment là ?
          Pourquoi pas "Si F-Droid a le droit…" pour lever tout doute ?

  • # Latence ?

    Posté par . Évalué à 1 (+1/-0).

    J'avais essayé de stream du son par internet via pulse-audio et il y avait une latence de quelques secondes. Ce n'est pas grave pour de la musique, mais assez embêtant quand le son doit être synchronisé avec l'image, j'avais fini pas mettre en place du Bluetooth à la place.

    Est ce que ici on a la même latence ?

    • [^] # Re: Latence ?

      Posté par . Évalué à 4 (+2/-0). Dernière modification le 25/10/19 à 23:30.

      Je viens d'essayer avec un film sur un réseau Wi-Fi plutôt solide avec mpv. Il y a une latence très légère (une bonne manière pour tester est d'activer les deux sorties audio en même temps), en dessous de la demi seconde. À noter que VLC permet de compenser ce genre de latence.

      À noter aussi que sur ce réseau, je ne suis pas sûr d'avoir non plus plusieurs secondes de latence avec PulseAudio.

      Tu devrais peut-être vérifier que tu es sur un canal Wi-Fi pas trop chargé. L'application WiFiAnalyzer est très pratique pour ça. J'ai eu plus de soucis avec PulseAudio en ville qu'ici (mais c'était plus des coupures voir de la saturation du réseau que de la latence) et mon hypothèse principale est qu'il y a des conflits d'ondes Wi-Fi. Le matériel est peut-être également de meilleure qualité ici, mais je doute que ce soit ça.

      Autre détail important : j'ai eu par le passé (et je pense que c'est toujours le cas) une connexion beaucoup plus stable en utilisant la variable d'environnement PULSE_SERVER pour jouer du son sur un autre ordinateur qu'en choisissant la sortie avec le contrôleur de volume, pour une raison qui m'échappe.

      • [^] # Re: Latence ?

        Posté par . Évalué à 1 (+1/-0).

        J'ai la même expérience que Tjiho.
        Grosse latence avec mpv/pulseaudio/pulse-droid en wifi. C'est même pire que de la latence car le décalage son/vidéo augmentait au fur et à mesure du film (même en mettant en pause pour essayer de resynchroniser les flux).
        Ca date un peut. Je vais réessayé avec SimpleProtocolPlayer et les infos que tu donnes. merci.

        • [^] # Re: Latence ?

          Posté par . Évalué à 1 (+1/-0).

          (Je me répond a moi même)
          Après quelques essais vite fait, ça a l'aire de fonctionner plutôt bien quand il n'y que le son qui passe sur le wifi (latence ~0.5s et resynchro ok).
          Par contre, ça galère pas mal si tu fais transiter de la vidéo en même temps (genre jouer une vid depuis un serveur NFS en wifi vers un PC qui affiche la vid et exporte le son).
          C'est une grosse amélioration par rapport a ce que j'ai pu tester précédemment.

Envoyer un commentaire

Suivre le flux des commentaires

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