Journal Rediriger une sortie audio vers un serveur de streaming.

Posté par .
Tags : aucun
11
14
jan.
2010
Enoncé du problème : j'ai un Soundbridge (une sorte de radio internet capable de se connecter sur un serveur Daap ou de lire des flux audio) et pour tester, je me suis pris un abonnement Spotify (une équivalent de Deezer). Mon problème est que je souhaite écouter les pistes en provenance de Spotify sur ma chaine HiFi grâce au SoundBridge.

Directement, ce n'est pas possible : le catalogue Spotify n'est accessible que via leur logiciel.

Une première solution est de brancher son smartphone (il y a un client Spotify pour Android) sur la chaîne. Mais ça ne me convient pas, j'aime bien avoir mon téléphone à portée de main.

Et c'est là qu'on est content d'être sous Linux : c'est souple et il y a toujours des solutions (pas forcément très simples) aux problèmes.

Ici le jeu consiste à capturer la sortie audio en provenance de Spotify et de la renvoyer à un serveur de streaming, le tour est joué !

La recette :

- 1 serveur de streaming (ce sera icecast en ce qui me concerne, un simple urpmi icecast2 dans une Mandriva et le serveur est en place, même pas besoin de toucher au fichier de configuration)
- pulseaudio
- gstreamer

Première étape : isoler le flux spotify de façon à ne pas envoyer tous les sons générés par l'ordi (et aussi ne plus envoyer le flux spotify sur les enceintes du pc)
- pactl load-module module-null-sink sink_name=spotify
- lancer pavucontrol et choisir "Null" comme périphérique de sortie

Deuxième étape : envoyer le flux spotify vers le serveur de streaming :
- gst-launch-0.10 pulsesrc device=spotify.monitor ! audioconvert ! lame bitrate=320 mode=stereo ! shout2send ip=localhost port=8000 password=hackme mount=stream.mp3

Explications :
- device = c'est la source pulseaudio, il correspond au nom qu'on a donné à la première étape
- qq pipes pour convertir le flux en mp3 (c'est aussi possible en ogg, il suffit de remplacer "lame ..." par "vorbisenc ! oggmux")
- et on envoie le tout sur icecast avec shout2send

Et voilà, c'est aussi "simple" que ça ! Dans cet exemple, le flux est accessible sut http://localhost:8000/stream.mp3

L'inconvénient majeur de cet méthode : Spotify décode un flux Ogg vers la sortie son, qui est ensuite réencodé en mp3 avant d'être envoyé à icecast ... vive les pertes ...

Voilà, j'espère que cela vous sera utile !
  • # Re: Rediriger une sortie audio vers un serveur de streaming

    Posté par . Évalué à 8.

    Et après on ose lire que PulseAudio est la cause de tous les problème son sous Linux (souvent par les mêmes aigris qui critiquent XMl et UTF-8 d'ailleurs) ! Pour faire ça auparavant, il aurait fallu bidouiller je ne sais quoi, ne serait-ce que pour isoler le flux sonore d'une seule application ...

    « Je vous présente les moines Shaolin : ils recherchent la Tranquillité de l'Esprit et la Paix de l'Âme à travers le Meurtre à Main Nue »

    • [^] # Re: Rediriger une sortie audio vers un serveur de streaming

      Posté par . Évalué à 2.

      C'est clair, ça fait bien longtemps que n'ai pu de problème de son sous Linux (Ubuntu) même avec mplayer qui annonce des problèmes avec le plugin pulse.
      Bravo pour ce guide, je cherchais à faire la même chose mais j'avais pas encore eu le temps de me plonger dedans.
    • [^] # Re: Rediriger une sortie audio vers un serveur de streaming

      Posté par . Évalué à 8.

      Autant UTF-8 c'est très bien, et ça devrait *vraiment* être le standard partout depuis longtemps.
      Autant je ne peux te laisser impunément dire du bien de XML : ça n'a d'efficacité que pour compliquer des choses simples, en les alourdissant par la même occasion, et en ajoutant plein de raisons en plus d'avoir des erreurs.

      Cela dit, je viens de résoudre un problème assez similaire avec esound, peut-être que je devrais jeter un oeil à pulseaudio, parce que pour esound il faut un logiciel qui aime esd et sait lui parler...
      Le but était de balancer la sortie audio d'une machine sur les enceintes d'une autre machine.


      Yth.
    • [^] # Re: Rediriger une sortie audio vers un serveur de streaming

      Posté par . Évalué à 1.

      our faire ça auparavant, il aurait fallu bidouiller je ne sais quoi, ne serait-ce que pour isoler le flux sonore d'une seule application ...

      Il aurait fallu créer une carte son virtuelle sous alsa...
      Sous oss c'est encore pire, il aurait fallu diriger la sortie son vers le null audio device et rediriger ce device vers un socket (ou la sortie standard)

      En d'autres termes faire à la main ce que fait Pulse audio (l'auteur du journal utilise la méthode device null audio, mais la méthode carte virtuelle fonctionne aussi)
    • [^] # Re: Rediriger une sortie audio vers un serveur de streaming

      Posté par . Évalué à 2.

      bof en même temps, pulseaudio sauve ici car spotify est une appli proprio de merde qui ne peut pas rediriger le son vers stdout.

      Parce que ce genre de choses, on pouvait le faire depuis des lustres en redirigant le sortie du player et en l'envoyant sur une autre machine via netcat par exemple.

      un exemple ici :
      http://www.debian-administration.org/articles/145
  • # Despotify

    Posté par . Évalué à 4.

    Est ce que -c'est une vrai question- l'utilisation de despotify avec son backend pulseaudio ne serait pas plus simple ?

    Pour info : despotify est une solution native fonctionnant sous linux et permet une sortie soit vers libao ou pulseaudio.
    • [^] # Re: Despotify

      Posté par . Évalué à 1.

      Dans l'exemple, j'utilise wine avec le driver pulseaudio, donc, sauf erreur, l'utilisation de Despotify ne change rien à la manip.
  • # Connexions ?

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

    Est-tu en train de dire que PulseAudio permet de faire des connexions arbitraires, du genre : je prends ce qui sort de ce logiciel, je l'envoie sur tel autre ?

    Ça marche méchamment sur les plate-bandes de JACK, ça, non ?
    • [^] # Re: Connexions ?

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

      Non parce que les plates-bandes de jack c'est la faible latence.
    • [^] # Re: Connexions ?

      Posté par . Évalué à 3.

      ben là, tout ce que PA fait si je comprends bien, c'est te permettre de monitorer un périphérique de sortie factice.

      Donc le travail de redirection doit être fait avec d'autres applis, et il faut d'abord assigner la sortie de l'appli qui t'intéresse à ce périphérique.

      Ça doit pouvoir être utilisé un peut comme jack, à condition de pouvoir créer autant de ces périphériques nuls que de connexions souhaitées, mais est-ce possible ?

      genre: Appli » [Null1] » gstreamer » effet Flanger » [Null2] » gstreamer » chambre d'echo » [Sortie normale]

      Ça paraît bien lourd et compliqué quand même.
  • # Sympa ca

    Posté par . Évalué à 2.

    J'étais justement entrain de penser à faire un greffon pour faire reconnaître directement DarkIce en tant que sortie PulseAudio. En un seul clique on pourrait alors changer la sortie d'une application de la carte son vers un flux réseau.

    DarkIce peut envoyer de l'audio vers des flux icecast, shoutcast, et quelques autres trucs, en divers formats).
    DarkIce [http://code.google.com/p/darkice/]
  • # Sinon...

    Posté par . Évalué à 1.

    C'est effectivement dommage de décoder pour réencoder...
    La solution idéale (mais pas forcément légale...) serait d'écrire un programme qui se connecte au serveur de Spotify, télécharge (temporairement) les chansons et les streame ensuite vers le Soundbridge (il accepte l'ogg?). Mais c'est sûr que Spotify apprécierait pas
    Sinon c'est sympa le principe du soundbridge.
  • # glisser déposer

    Posté par . Évalué à 6.

    On aurais pu aussi faire comme ceci :
    jackd comme serveur de son

    ouvre l'interface graphique qjack-control
    fait un glisser déposer du lien de la sortie du lecteur vers l'entrée de icecast)

    Voilà c'est tout.

    Effectivement c'est souple et il y a toujours des solutions (pas forcément très simples) aux problèmes ! Mais bon, effectivement, on peux ne pas prendre les solutions les plus simples. PA pour un meilleur bureau, mouarf :)
    • [^] # Re: glisser déposer

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

      PA pour un meilleur bureau, mouarf

      Oui. PA pour un meilleur bureau, pas PA pour un meilleur studio de son. Pour ça, il y a JACK.

      PA, c'est pour des besoins de bureau : ajouter une carte son, en retirer une, régler le volume par applications. JACK, c'est pour un studio, si j'ai bien compris : faire des connexions en tout sens avec des consoles de mixage incompréhensibles avec plein de potentiomètres comme on sait si bien en faire dans ce milieu.
      • [^] # Re: glisser déposer

        Posté par . Évalué à 5.

        Oui, et faire des choses simples, aussi.
        • [^] # Re: glisser déposer

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

          Quand on se retrouve sans explication devant une installation de sonorisation de salle et une installation équivalente de projection vidéo, on se demande vraiment si les gens du son sont capables d'imaginer des choses simples. Les gens de la vidéo, oui : tu branches ton ordinateur, tu balances du VGA, et ça roule. Pour le son, en revanche…
  • # D'un autre cote..

    Posté par . Évalué à 1.

    Et c'est là qu'on est content d'être sous Linux : c'est souple et il y a toujours des solutions (pas forcément très simples) aux problèmes.

    D'un autre cote, AirFoil fait ca sous windows et mac depuis un certain temps, il rebalance le son du systeme ou d'une appli specifique sur un airtunes, mais c'est pas comme si c'etait vraiment un probleme de rebalancer sur autre chose qu'un airtunes.
    Et potentiellement, ton soundbridge supporte ca sous windows et/ou mac (ils ont un support itunes et wmp donc ca serait pas etonnant).
    Et je suis a peu pres sur que d'autre outil font ca, fournis par les autres constructeur d'enceintes wireless.

    Disons que ta solution ici est loin d'etre simple et relativement bancale vu la stabilite de PulseAudio, la ou c'est robuste et facile a faire sous d'autre OS (ceux qui ne reimplemente pas completement la couche sonore tous les 3 ans).
    • [^] # Re: D'un autre cote..

      Posté par . Évalué à 5.

      PulseAudio peut déjà rediriger le son vers airtunes (entre autres) et depuis un certain temps (aussi). Et c'est encore une fois en quelque cliques que ça se joue.

      PA est peut être encore bancale et buggé, mais il dispose de fonctionnalités dans tout les sens et d'une grosse marge de progression. Des choses que l'on avait pas avant :
      - Volume par application
      - Redirection d'un flux sur un autre (ex: rediriger la sortie de firefox sur la sortie micro pour enregistrer le son)
      - Bluetooth en entré et sortie (ex: envoyer le son de son pc, ou d'une application seulement vers ses enceintes ou sa chaîne hifi bluetooth)
      - Entré/Sortie du son sur le réseau, en divers formats (export PA, upnp, airtune...)
      - etc
      Donc sur le coup "merci PA", qui d'ailleurs ne ré-implémente que la couche de mixage sonore, et non pas la couche audio complète (les drivers restent inchangés dans alsa).

      Pourquoi on se sent obligé de lui casser du sucre sur le dos ? Le "c'était mieux avant" n'apporte rien ici. A choisir entre un système de son moderne, tout neuf (avec parfois des inconvénients qui en découlent, et ben oui) ou la solution alsa avec son unique fonctionnalité (mixer le son) qui ne marchait pas plus que ça d'ailleurs... Franchement...
      • [^] # Re: D'un autre cote..

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

        Ce que PA fait, OSS le fait (ou commence à le faire). La différence c'est qu'on a pas 15 000 surcouche pour écouter du son avec MPlayer.
        • [^] # Re: D'un autre cote..

          Posté par . Évalué à 2.

          La différence c'est qu'on a pas 15 000 surcouche pour écouter du son avec MPlayer.

          Avec PA non-plus, puisqu'on n'a que deux couches : Alsa pour les pilotes, et PulseAudio pour le mixage. Ça reste très correct, surtout au vu des fonctionnalités apportées.

          Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

        • [^] # Re: D'un autre cote..

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

          La différence c'est qu'on a pas 15 000 surcouche pour écouter du son avec MPlayer.

          C'est assez amusant de voir que lorsqu'on a un outil qui remplit une tâche (alsa pour les drivers, PA pour le mixeur / réseau / choix d'une carte son, jackd pour le routage entres applications) les gens disent qu'on a trop de couches, et quand on a un outil qui fait tout les gens disent que c'est contraire au principe KISS.
          • [^] # Re: D'un autre cote..

            Posté par . Évalué à -1.

            encore faudrait-il qu'il la remplisse bien
            • [^] # Re: D'un autre cote..

              Posté par . Évalué à 3.

              Ce qu'il fait, en tout cas chez moi.

              Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

              • [^] # Re: D'un autre cote..

                Posté par . Évalué à 2.

                Chez moi aussi ça marche (à vrai dire c'est même plutôt transparent, je fait les mêmes choses que quand pulseaudio n'était pas là, et ça marche toujours pareil)

                C'est juste que ce n'est malheureusement pas le cas de tout le monde apparemment, et de loin.
                • [^] # Re: D'un autre cote..

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

                  J'ai l'impression que beaucoup de critique de pulseaudio date de ses débuts dans les distributions pendant lesquels beaucoup de gens l'ont désinstallé et garde un mauvais souvenir depuis.

                  « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

                  • [^] # Re: D'un autre cote..

                    Posté par . Évalué à 1.

                    c'est pas faux. C'est pour ca que releaser un truc au grand public en pre alpha n'est pas forcement une bonne idee, c'est un coup a tuer son image aupres de tout le monde.
                    Et va la recuperer apres, la bonne reputation, meme quand les problemes sont regles, quand tout le monde a eu des merdes sans nom pendant longtemps.

                    Un peu comme le syndrome kde4 ou beaucoup n'ont pas envie de s'y risquer, apres une 4.0 inutilisable, une 4.1 pas tellement mieux (alors qu'elle aurait du etre bien) et une 4.2 enfin de qualite.
                    • [^] # Re: D'un autre cote..

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

                      Le problème c'est que c'est pas les développeurs qui l'ont intégrer mais les distrib¹. Autant je trouvais normal que Pulseaudio soit intégrer dans Fedora sans être vraiment fonctionnel (c'est un peu le but de Fedora) mais j'ai l'impression que les autres ont suivi pour dire que eux aussi étaient la pointe de la technologie même si ça marche pas.

                      ¹: enfin pour KDE, c'est un problème de communication des développeurs et l'arrêt du support de la version 3.

                      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

                      • [^] # Re: D'un autre cote..

                        Posté par . Évalué à 1.

                        Ce que je disais, c'est valable pour tout le monde, pas que les developpeurs. ;-)

                        Je comprends bien que c'est pas trop la faute de pulse audio si tout le monde a integre de force un truc pas fini, mais ca change rien au probleme: la reputation de pulse audio est maintenant sacrement ternie, et ya du boulot pour la ramener a ce qu'elle devrait etre.
                        • [^] # Re: D'un autre cote..

                          Posté par . Évalué à 3.

                          Cette mauvaise réputation vient tout de même en particulier de l'intégration désastreuse d'Ubuntu. À l'époque, Fedora avait fait du bon boulot (faut dire que l'auteur de PulseAudio bosse chez Red Hat, et que le but était justement de debugguer), et il parait que celle de Mandriva était au poil aussi.

                          Mais comme c'est Ubuntu qui fait le buzz aujourd'hui dans le monde Linux, ce sont eux qui font et défont les réputations.

                          Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

      • [^] # Re: D'un autre cote..

        Posté par . Évalué à 2.

        ola!
        loin de moi l'idee de cracher sur pulse audio.
        Ce qui m'a fait tiquer c'est le "c'est la qu'on est content d'etre sous linux", sous entendu "les autres en face, ils peuvent pas le faire et je serais bloque".
    • [^] # Re: D'un autre cote..

      Posté par . Évalué à 2.

      Alors premièrement, AirFoil n'est ni libre ni gratuit.

      Et ensuite, j'ai pas l'impression que cela marcherait avec mon SoundBridge, puisqu'apparemment il faut installer un logiciel spécifique sur l'émetteur (AirFoil Speaker).

      Donc, non, ta solution n'est en rien comparable.

      Et pour finir, Pa est depuis quelques temps assez robuste est pas du tout bancal. Faut juste utiliser une distro qui fait du bon boulot.
      • [^] # Re: D'un autre cote..

        Posté par . Évalué à 0.

        je suis bien place pour savoir que c'est pas libre vu que j'ai achete une licence.

        Ce que je voulais dire, c'est que les 2 systemes propose les moyens de faire ca (detourner la sortie son d'un programme avant que ca arrive a la carte son), et vu que ca tourne sous xp, c'est pas comme si c'etait nouveau ni confine (comme sous entendu par ton journal) a linux ce genre de techno revolutionnaire qui arrive en 2009 sur linux que tout le monde ici dit que c'est de la balle l'innovation alors que ca existe chez la concurrence depuis presque 10 ans...
  • # Et pourquoi pas une solution Point à Point

    Posté par . Évalué à 3.

    2 vieilles cartes SPDIF et un coaxial, çà marche à la maison.

    Enzo Bricolo

Suivre le flux des commentaires

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