Lyrion – Diffuser une source externe
Guide de reconstruction. Il décrit comment faire entrer dans Lyrion Music Server un son qui ne vient pas de la bibliothèque : une entrée audio du serveur, ou le son d’un autre ordinateur du réseau.
Référence : Lyrion Music Server 9.1.2 – WaveInput 1.04 – Ubuntu 24.04
Le fichier .md de cette page : ouvrir le .md
Ce que cette page couvre : brancher une source sonore extérieure sur Lyrion et la jouer sur n’importe quelle platine de la maison. Trois voies sont décrites : capturer une carte son du serveur, diffuser un flux permanent, et envoyer le son d’un poste de travail.
Convention : chaque bloc indique la machine où il s’exécute, à l’extérieur du bloc. Un bloc unique se copie tel quel ; des blocs séparés signifient qu’une décision ou une manipulation intervient entre eux.
Ce que fait cette page, et ce qui est ailleurs
Lyrion sait jouer trois choses : les fichiers de sa bibliothèque, les services en ligne, et une adresse quelconque qu’on lui donne. C’est cette troisième capacité qui sert ici.
Une source externe est donc toujours ramenée à une adresse. Il y en a deux familles :
- Une capture faite par le serveur lui-même — une entrée audio branchée sur la machine, lue par le greffon WaveInput, et désignée par une adresse
wavin:. - Un flux HTTP servi par une machine du réseau — le serveur va le chercher comme il irait chercher une radio web. Peu importe qui le produit.
Trois pages voisines portent le reste :
- Lyrion Music Server — le serveur lui-même, sa bibliothèque, ses greffons, ses journaux.
- Les platines Squeezelite — ce qui joue le son dans chaque pièce.
- Icecast2 – Ices2 — le serveur de diffusion et ses sources. Il est propriétaire de tout ce qui concerne Icecast ; cette page-ci n’en reprend rien et s’y réfère.
ℹ️ L’inverse — écouter le serveur depuis un lecteur ordinaire, ailleurs — ne passe pas par le serveur lui-même. Son point d’accès :9000/stream.mp3 répond et réclame une authentification, mais il ne porte aucun son et n’ajoute aucune platine. Pour écouter hors de la maison, ce sont les applications mobiles décrites dans Les platines Squeezelite qui servent, à travers le tunnel.
Ajouter une entrée
Le geste est le même pour les trois voies, et il est donc écrit une seule fois.
[dans Lyrion] Ouvrir Favoris, puis le bouton en forme de cœur portant un +, en haut à droite de la liste. Une fenêtre Modifier le favori s’ouvre avec trois champs :
- Nom — ce qui s’affichera dans la liste.
- URL — l’adresse de la source. C’est le seul champ qui décide de quelque chose.
- Icône — facultatif.
Le favori apparaît aussitôt dans la liste et se joue comme n’importe quelle piste : on choisit la platine, on clique.
ℹ️ Le champ Icône n’a pas de sélecteur de fichier : on y tape un chemin, et l’image doit déjà se trouver dans l’arborescence html du serveur. Le serveur en fournit une qui convient à une source en continu :
html/images/radio.png
⚠️ Une image ajoutée à la main dans cette arborescence n’appartient pas au paquet du serveur. Elle survit aux montées de version ordinaires, mais rien ne le garantit — en garder une copie ailleurs.
Ce qui fait la différence avec une liste de lecture enregistrée : un favori est une adresse nommée, immédiatement rejouable, et modifiable sans être rechargée. C’est la forme à employer pour une source permanente.
Capturer une carte son du serveur
C’est la voie la plus directe : ce qui entre par une prise du serveur ressort sur les platines.
Le greffon WaveInput
Le serveur ne sait pas lire une carte son tout seul. Le greffon WaveInput ajoute le protocole wavin: et s’en charge.
Il ne fait pas partie des greffons livrés avec Lyrion : il vient d’un dépôt tiers, dont l’adresse s’ajoute à la liste des dépôts dans les réglages des extensions.
http://www.herger.net/slim-plugins/repo.xml
Une fois le dépôt déclaré, WaveInput apparaît parmi les extensions installables. Le serveur redémarre après l’installation.
Ce que le greffon fait réellement, et qu’il vaut mieux savoir avant de chercher une panne ailleurs : il n’est qu’une enveloppe autour d’arecord. Son fichier de conversion porte la ligne qui travaille, et $FILE$ y est remplacé par ce qui suit wavin: dans l’adresse.
⚠️ Ligne longue — elle sera enroulée dans le PDF, et ne se recopie pas depuis lui.
[arecord] -d0 -c2 -f S16_LE -r 44100 -twav -D $FILE$ | [lame] --silent -q $QUALITY$ -v $BITRATE$ - -
Il existe la même en FLAC plutôt qu’en MP3. Dans les deux cas, 44 100 Hz, 16 bits, deux canaux sont écrits en dur dans le greffon : aucun réglage ne les change. Une source d’une autre fréquence est rééchantillonnée par la carte, pas par le serveur.
ℹ️ lame et flac doivent donc être présents sur le serveur — ce sont les encodeurs du greffon, pas ceux de Lyrion.
Trouver le nom de la carte
[nas-host]
arecord -l
Chaque carte y porte un numéro et un nom entre crochets :
card 0: PCH [HDA Intel PCH], device 0: ALC888-VD Analog [ALC888-VD Analog]
card 1: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio]
🔴 C’est le nom qu’on écrit, jamais le numéro. Le numéro dépend de l’ordre d’énumération au démarrage et change dès qu’un périphérique USB est branché, débranché, ou simplement plus lent à répondre. Une adresse en hw:1,0 cesse un jour de désigner ce qu’on croyait, sans message et sans qu’on sache pourquoi. hw:CARD=CODEC,DEV=0 désigne toujours la même carte.
La liste des formes que le nom peut prendre :
arecord -L
L’adresse à écrire
Pour la carte son USB :
wavin:hw:CARD=CODEC,DEV=0
Pour l’entrée ligne de la carte mère :
wavin:default
ℹ️ default sans nom de carte retombe sur la première carte du système. En l’absence d’un /etc/asound.conf qui en décide autrement, c’est la carte intégrée — pas la carte USB, même si celle-ci est la seule qui serve.
Ces adresses se collent dans le champ URL d’un favori, exactement comme une adresse http://.
Pourquoi une carte son USB plutôt que l’entrée de la carte mère
L’entrée ligne de la carte mère fonctionne et ne coûte rien. Elle a pourtant été abandonnée ici, et la raison vaut d’être connue avant de refaire le montage : elle ronfle.
Deux appareils reliés au même secteur par des alimentations distinctes, puis reliés entre eux par un câble audio, forment une boucle de masse ; le ronflement qui en résulte est présent en permanence et ne se règle par aucun niveau. Une carte son USB isole l’étage d’entrée du reste de la machine et supprime le problème.
C’est donc un choix de montage, pas un accident : on capture par une carte son USB, et l’entrée de la carte mère reste disponible pour un appareil qui ne poserait pas ce problème.
Le matériel employé
Un dongle USB à puce Texas Instruments PCM2902, le composant le plus répandu de sa catégorie. Il présente une entrée et une sortie analogiques, et se nomme CODEC pour ALSA.
lsusb | grep -i audio
⚠️ Ce dongle n’a aucun réglage de capture. Son gain d’entrée est figé dans le matériel : il n’y a rien à démuter ni à monter, et cette piste est à écarter d’emblée en cas de silence.
Le flux permanent
La capture directe a une limite : elle n’existe que pendant qu’une platine la joue. Dès qu’on arrête la lecture, plus rien ne capture.
Quand la source doit être disponible en permanence, on la diffuse plutôt en continu vers un serveur Icecast, et Lyrion vient l’y chercher comme une radio :
http://192.168.0.11:8000/Chromecast.ogg
Trois raisons de préférer cette voie :
- Un repli d’alarme ne fonctionne que si la source est déjà en ondes — une platine bascule en une fraction de seconde et n’attend pas qu’une capture démarre.
- Plusieurs platines peuvent écouter la même source sans se gêner, ce que l’accès direct à une carte interdit.
- La source survit à l’arrêt de la lecture, donc on la retrouve telle quelle.
Le montage complet — serveur Icecast, client source ices2, unité systemd, métadonnées, dépannage — est décrit dans Icecast2 – Ices2. Du point de vue de Lyrion, il n’y a rien à faire d’autre que coller l’adresse du point de montage dans un favori.
Une seule chaîne par carte
🔴 Une carte son ne se capture que par un seul programme à la fois. L’accès hw: d’ALSA est exclusif, et il n’y a pas de partage possible : la carte annonce alors zéro sous-périphérique libre.
arecord -l
card 1: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio]
Subdevices: 0/1
La conséquence est directe et prend au dépourvu : si la même carte alimente à la fois un flux Icecast permanent et une entrée wavin:, les deux ne peuvent pas jouer ensemble. Lancer la capture directe coupe le flux permanent.
Savoir qui tient la carte
[nas-host]
sudo fuser -v /dev/snd/pcmC1D0c
Le nom du périphérique se lit ainsi : pcmC1D0c = carte 1, périphérique 0, capture. La réponse nomme le compte, le PID et le programme :
USER PID ACCESS COMMAND
/dev/snd/pcmC1D0c: hostadmin 31096 F...m ices2
🔴 C’est le seul contrôle qui dise la vérité, et l’état du service ment. Un service de diffusion configuré pour se relancer indéfiniment se déclare active alors qu’il échoue à chaque tentative : la relance périodique fait qu’il est presque toujours en train de démarrer. Son journal, lui, est sans ambiguïté.
⚠️ Ligne longue — elle sera enroulée dans le PDF.
EROR input-alsa/alsa_open_module Failed to open audio device hw:CARD=CODEC,DEV=0: Device or resource busy
sudo journalctl -u ices2-chromecast -n 12 --no-pager
Libérer la carte
La capture s’arrête quand la platine cesse de lire — mais ni la pause ni le bouton de lecture ne suffisent. Cette interface n’a pas de bouton Arrêt, et une pause laisse le flux ouvert : arecord continue de tenir la carte.
Deux gestes libèrent réellement :
- vider la file d’attente de la platine qui joue la capture ;
- ou éteindre cette platine, ce qui coupe sa connexion.
✅ Une fois la carte libre, le service de diffusion la reprend de lui-même à sa tentative suivante. C’est ce que garantissent le Restart=always et le StartLimitIntervalSec=0 de son unité — rien à relancer à la main.
⚠️ Vérifier qu’aucune autre platine ne joue encore la capture avant de conclure à une panne : une seule suffit à retenir la carte.
Diffuser le son d’un poste de travail
Cette voie répond à une autre question : envoyer dans la maison ce que joue un ordinateur — une vidéo, un site, une application sans sortie réseau. Le poste capture sa propre sortie audio, l’encode, et la sert sur une adresse que Lyrion vient lire.
VLC fait les trois d’un coup, et il n’y a rien à installer sur le serveur.
Trouver le moniteur à capturer
Sous PipeWire comme sous PulseAudio, chaque sortie possède une source-moniteur qui porte ce qui en sort. C’est elle qu’on capture.
[poste de travail]
pactl list short sources
La bonne est celle dont le nom finit par .monitor et dont l’état est RUNNING — c’est la sortie qui joue réellement. Les autres appartiennent à des sorties en veille, typiquement les prises HDMI de la carte graphique.
alsa_output.pci-0000_04_00.6.HiFi__hw_Generic_1__sink.monitor
ℹ️ Ce nom est propre à la machine et à sa carte : il se relève, il ne se recopie pas d’un poste à l’autre.
La commande
VLC est ici installé en Flatpak, d’où l’invocation par flatpak run. La fenêtre reste ouverte pendant toute la diffusion ; la quitter arrête la diffusion.
⚠️ La troisième ligne dépasse la largeur du PDF et y sera enroulée sans signe visible. La recopier depuis le .md, pas depuis le PDF.
[poste de travail]
flatpak run org.videolan.VLC \
"pulse://alsa_output.pci-0000_04_00.6.HiFi__hw_Generic_1__sink.monitor" \
--sout "#transcode{vcodec=none,acodec=mp3,ab=192,channels=2,samplerate=48000}:http{dst=:8079/desktop.mp3}" \
:sout-keep
Ce que chaque morceau fait :
pulse://…monitor— la source : ce que le poste joue.vcodec=none— aucune vidéo, même si la source en portait.acodec=mp3,ab=192— encodage MP3 à 192 kb/s, que toutes les platines lisent.samplerate=48000— la fréquence native de PipeWire sur ce poste. La demander identique évite un rééchantillonnage qui n’apporte rien ; sur un poste qui tourne à 44 100 Hz, c’est 44 100 qu’on écrit.http{dst=:8079/desktop.mp3}— le serveur HTTP que VLC ouvre. Le port est arbitraire ; il doit seulement être libre.:sout-keep— garde la sortie ouverte entre deux pistes, pour que les auditeurs ne soient pas déconnectés à chaque changement.
L’adresse à donner à Lyrion
L’adresse porte celle du poste, pas celle du serveur :
http://192.168.0.106:8079/desktop.mp3
Elle se colle dans le champ URL d’un favori, comme les précédentes.
🔴 Ne pas jouer ce favori sur la platine logicielle du poste lui-même. Cette platine sort par le périphérique dont on capture le moniteur : elle renverrait dans la capture ce que le serveur vient de lui envoyer, et la boucle s’emballe. Choisir une platine d’une autre pièce.
Vérifier sans écouter
[poste de travail]
ss -tln | grep ':8079'
Une ligne en 0.0.0.0:8079 signifie que le port est ouvert sur le réseau — condition nécessaire pour que le serveur vienne y lire. Puis lire quatre secondes du flux :
curl -s --max-time 4 -o /tmp/essai.mp3 http://127.0.0.1:8079/desktop.mp3
ls -l /tmp/essai.mp3
Attendu : de l’ordre de 90 kio, cohérent avec 192 kb/s pendant quatre secondes.
ℹ️ La taille prouve que la chaîne monte, pas qu’elle porte du son. L’encodeur traite le silence au même débit que la musique. Pour savoir s’il y a du son, il faut écouter.
Dépannage
La chaîne est montée et je n’entends rien
C’est le symptôme le plus fréquent, et le plus trompeur : chaque étape paraît saine, parce que rien ne distingue le silence du son dans une chaîne numérique. Procéder du moins coûteux au plus coûteux.
1. Changer d’application source. Gratuit, instantané, et c’est le maillon hors de la machine qu’on oublie. Une application qui affiche une lecture en cours n’émet pas forcément.
2. Jouer la source sur une autre platine. Si elle sort ailleurs, le problème est dans la platine, pas dans la source.
3. Écouter le flux directement, sans passer par Lyrion : ouvrir son adresse dans un lecteur ordinaire. Silence ici, la capture ne reçoit rien.
4. Mesurer le signal à l’entrée avec un vumètre. L’accès hw: étant exclusif, il faut d’abord libérer la carte — donc arrêter ce qui la tient.
[nas-host]
arecord -D hw:CARD=CODEC,DEV=0 -f cd -d 15 -V stereo /dev/null
Des barres plates pendant quinze secondes : aucun signal n’entre, et le problème est physique — câble, source, ou dongle.
Une entrée refuse de jouer
Presque toujours la carte déjà prise par autre chose. Le contrôle est celui décrit plus haut : fuser sur le périphérique de capture, et non l’état du service.
Le son continue après l’arrêt
Une platine lit avec de l’avance : elle continue de jouer quelques instants après qu’on a arrêté. Cela ne dit rien sur l’état de la capture, qui peut aussi bien tourner encore — seule la lecture du périphérique tranche.
La platine a disparu de la liste des lecteurs
🔴 Couper la source pendant qu’une platine la joue fait disparaître cette platine de la liste, et elle ne revient pas d’elle-même — ni au bout d’un moment, ni au rafraîchissement de la page, ni à la réouverture du navigateur.
Ni la machine ni le serveur ne sont en cause : l’interface de la platine répond normalement, et le serveur garde sa fiche. C’est le lecteur qui reste figé sur un flux qui ne répond plus.
⚠️ Redémarrer le lecteur seul ne suffit pas, et c’est le piège. La platine réapparaît dans la liste, ce qui donne l’impression que l’affaire est close — mais elle reste incapable de jouer quoi que ce soit. Seul un redémarrage complet de la platine la remet en service.
Une platine revenue dans la liste n’est donc pas une platine qui fonctionne : le contrôle qui tranche est une lecture, jamais une apparition dans un menu.
La page Informations du serveur ne répond pas davantage à cette question. Elle liste les appareils que le serveur a identifiés, pas ceux qui sont connectés : une platine absente de la liste des lecteurs y figure encore, avec son modèle, son micrologiciel et son adresse. Elle sert à vérifier une identité.
L’ordre qui évite le problème : arrêter la lecture d’abord, couper la source ensuite.
ℹ️ Une platine absente n’est pas une platine muette, et les deux se soignent différemment. Le dépannage des platines elles-mêmes est dans Les platines Squeezelite.