OPZ2-08/22-2/2

Orange Pi Zero 2 : lecteur audio

Dans l'article précédent, on faisait le point sur la carte Orange PI Zero 2 puis on installait Linux et le logiciel serveur audio "Logitech Media Server". Dans la foulée, on va installer le logiciel de lecture "squeezelite", installer le plugin "Material Skin" pour avoir un interface moderne et mesurer le comportement de la machine en lecture avec bpytop. On va donc avoir une machine qui offre en même temps la fonction de serveur et client audio.

Squeezelite : le client du LMS

Squeezelite est un logiciel qui permet de transformer une machine Linux en lecteur audio, client du LMS. C'est gratuit et Open Source et le code est disponible sur Github. Regardez l'article précédent si certaines informations vous manquent (par exemple "SSH").

Dans la vidéo ci-contre :

on se connecte à la OPZ2 pour installer le logiciel de lecture, avec SSH

ssh renaud@192.168.1.120

on lance l'installation du logiciel

sudo apt install squeezelite

L'installation dure plusieurs dizaines de secondes, il y a de nombreuses bibliothèques à récupérer...

Une fois installé, on lance une première fois squeezelite avec l'option "-l" qui permet lister les sorties audio, sans DAC connecté

sudo squeezelite -l

Ensuite on connecte le DAC Gustard et on recommence

sudo squeezelite -l

On voit plusieurs entrées avec "G20" et celle qui nous intéresse est la suivante :

hw:CARD=G20,DEV=0

dmix:CARD=sndahub,DEV=2 - sndahub, Accompany Stream sunxi-ahub-aif2-2 - Direct sample mixing device

dsnoop:CARD=sndahub,DEV=0 - sndahub, Media Stream sunxi-ahub-aif1-0 - Direct sample snooping device

dsnoop:CARD=sndahub,DEV=1 - sndahub, System Stream sunxi-ahub-aif2-1 - Direct sample snooping device

dsnoop:CARD=sndahub,DEV=2 - sndahub, Accompany Stream sunxi-ahub-aif2-2 - Direct sample snooping device

hw:CARD=allwinnerhdmi,DEV=0 - allwinner-hdmi, - Direct hardware device without any conversions

plughw:CARD=allwinnerhdmi,DEV=0 - allwinner-hdmi, - Hardware device with all software conversions

default:CARD=allwinnerhdmi - allwinner-hdmi, - Default Audio Device

sysdefault:CARD=allwinnerhdmi - allwinner-hdmi, - Default Audio Device

dmix:CARD=allwinnerhdmi,DEV=0 - allwinner-hdmi, - Direct sample mixing device

dsnoop:CARD=allwinnerhdmi,DEV=0 - allwinner-hdmi, - Direct sample snooping device

hw:CARD=Codec,DEV=0 - H616 Audio Codec, CDC PCM Codec-0 - Direct hardware device without any conversions

plughw:CARD=Codec,DEV=0 - H616 Audio Codec, CDC PCM Codec-0 - Hardware device with all software conversions

default:CARD=Codec - H616 Audio Codec, CDC PCM Codec-0 - Default Audio Device

sysdefault:CARD=Codec - H616 Audio Codec, CDC PCM Codec-0 - Default Audio Device

dmix:CARD=Codec,DEV=0 - H616 Audio Codec, CDC PCM Codec-0 - Direct sample mixing device

hw:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - Direct hardware device without any conversions

plughw:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - Hardware device with all software conversions

default:CARD=G20 - Gustard USB Audio 2.0, USB Audio - Default Audio Device

sysdefault:CARD=G20 - Gustard USB Audio 2.0, USB Audio - Default Audio Device

front:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - Front output / input

surround21:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - 2.1 Surround output to Front and Subwoofer speakers

surround40:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - 4.0 Surround output to Front and Rear speakers

surround41:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - 4.1 Surround output to Front, Rear and Subwoofer speakers

surround50:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - 5.0 Surround output to Front, Center and Rear speakers

surround51:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - 5.1 Surround output to Rear and Subwoofer speakers

surround71:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - 7.1 Surround output to Rear and Woofer speakers

iec958:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - IEC958 (S/PDIF) Digital Audio Output

dmix:CARD=G20,DEV=0 - Gustard USB Audio 2.0, USB Audio - Direct sample mixing device

Plusieurs paramètres avec G20 sont disponibles, par exemple

default:CARD=G20

Mais tout sera resamplé en 48kHz. Le paramètre "hw" permet d'avoir la fréquence par défaut du fichier, sans reconversion par le logiciel.

Le fichier de paramètres de squeezelite permet de définir un ou deux paramètres.

sudo nano /etc/default/squeezelite

Dans ce fichier, on peut modifier certains paramètres, dans notre cas

  1. on modifie SL_SOUNDCARD pour indiquer la sortie vers notre DAC

  2. on modifie SB_SERVER_IP pour indiquer l'adresse IP du serveur


# Defaults for squeezelite initscript

# sourced by /etc/init.d/squeezelite

# installed at /etc/default/squeezelite by the maintainer scripts


# The name for the squeezelite player:

SL_NAME="$(hostname -s)"


# ALSA output device:

SL_SOUNDCARD="hw:CARD=G20,DEV=0"

# Squeezebox server (Logitech Media Server):

# Uncomment the next line if you want to point squeezelite at the IP address of

# your squeezebox server. This is usually unnecessary as the server is

# automatically discovered.

SB_SERVER_IP="192.168.1.120"


# Additional options to pass to squeezelite:

# Please do not include -z to make squeezelite daemonise itself.

#SB_EXTRA_ARGS=""

Quand on a fini les modifications, on fait CTRL S pour enregistrer puis CTRL X pour quitter nano.

La commande suivante :

sudo rebot

permet de rebooter la OPZ2. Ma carte (une des premières disponibles sur le marché) ne reboote pas toute seule, je suis obligé de couper l'alimentation "à la main". C'est peut être aussi le cas pour vous.

Après le reboot une nouvelle platine est disponible dans l'interface du LMS accessible via le navigateur. Si vous avez plusieurs players, LMS vous affiche la liste et vous pouvez choisir celui à commander. Vous pouvez diffuser des programmes différents ou synchroniser des platines pour qu'elles diffusent le même programme.

En résumé

Quelques points :

  • l'installation du logiciel player est effectué avec une commande "sudo apt install squeezelite" qui prend quelques dizaines de secondes

  • sudo squeezelite -l permet de voir les sortie audio : on veut celle qui commence par "hw" pour conserver le format original

  • les paramètres du lecteur sont dans le fichier /etc/default/squeezelite qu'il faut modifier pour qu'au reboot le logiciel fonctionne.

En supplément :

  • avant de rebooter vous pouvez tester la lecture sur la ligne de commande, par exemple en indiquant la sortie (output) et le serveur (CTRL C pour l'arrêter) :

sudo squeezelite -o hw:CARD=G20,DEV=0 -s 192.168.1.120

  • squeezelite est "headless", le contrôle de la musique lue s'effectue via le LMS

  • un navigateur contrôle les lecteurs en pointant vers le serveur, par exemple 192.168.1.120:9000, et il existe aussi des applications sur smartphones

  • il n'y a aucune obligation a installer le serveur et le player sur la même carte, au contraire : avec un serveur, on peut facilement multiplier les players : dans le salon, le bureau, la chambre, le home-lab, le smartphone via Termux

Ca sent la naphtaline ? Material Skin !

L'interface graphique dans le navigateur du LMS n'est pas des plus séduisante. Elle a le mérite de fonctionner, mais inadaptée à un smartphone ou un petit écran de tablette. Elle n'est pas "sexy". Pour faire taire les critiques et obtenir une interface moderne et "responsive" qui va s'adapter au smartphone ou à la tablette, il est possible d'installer le plugin "Material Skin".

En bas à droite de la page principale du LMS dans le navigateur, il faut cliquer sur "Paramètres". L'écran des paramètres va s'afficher et proposer plusieurs onglets.

Dans l'onglet Plugins, dant les plugins tiers (en bas de la liste) sélectionnez "Material Skin".

Tout en bas à droite de l'écran cliquez sur "Appliquer".

Une popup s'affiche et vous propose de redémarrer le serveur.

Le redémarrage prend une trentaine de secondes.

Maintenant, comparons les interfaces :

  • dans le premier écran ci-dessous on donne l'adresse du serveur et le numéro du port

  • dans le deuxième écran, on ajoute après le numéro du port /material pour avoir la belle interface

  • le troisième écran est celui d'un smartphone.

Il n'y a pas à choisir entre la version classique et la version Material Skin : les deux interfaces répondent, c'est juste une page différente qui sert le flux html. Et sur un téléphone la vieille interface est inutilisable, alors que la version Material Skin est splendide.

Ci contre, la version Material Skin sur le smartphone, spelndide !

Sur le smartphone, vous pouvez aussi installer Squeezer (chez Android). En parlant de smartphone et maintenant que vous êtes un Dieu de la ligne de commande, vous pouvez regarder Termux qui permet d'installer Squeezelite sur un smartphone.

Il existe une ribambelle de plugins pour le LMS. Il en existe pour TIDAL, Deezer, Quobuz et d'autres trucs, ceci dit je vous propose d'installer :

  • celui pour Radio France (avec deux codecs meilleurs que le MP3 en 128k)

  • celui pour Radio Paradise (qui diffuse en FLAC).

Si vous avez créé un compte sur le site https://www.mysqueezebox.com/ vous avez aussi des applications pour les radios shoutcast et TuneIn radio, c'est à dire plus de 200 000 radios supplémentaires.

Enfin bref, il y a vraiment des possibilités à explorer qui semblent infines. J'espère que les deux articles autour de la OPZ2 vous donnerons envie de vous y mettre : maintenant vous savez installer Linux, le LMS et un player audio sur une carte à 30€.

On peut commander le système avec le smartphone ou une tablette avec une belle interface. Avec Termux on peut transformer une vieille tablette en player audio avec une interface tactile.

Tout cela n'attends plus que vous. Il reste un article à produire pour expliquer comment mettre à jour le système Linux pour être à jour de la sécurité et comment mettre à jour le LMS pour avoir la dernière version, tous les jours ou toute les semaines ou tous les mois.

Au plaisir de vous retrouver en train de lire ce site !

Bonus mesures

Lorsque l'on se connecte avec une session SSH sur la carte, on obtient quelques informations.

Si l'on veut en savoir davantage, on peut consulter l'outil de monitoring que l'on a installé lors de l'épisode précédent et qui se nomme bpytop.

Les mesures qui sont proposées ci-dessous correspondent à 3 players connectés sur le LMS en train de lire de la musique. Un des players est installé sur la carte sur laquelle se trouve le serveur.

Nous avons deux players qui lisent du FLAC 16/44 et un player en 24/96.

Pour lancer bpytop, on utape bpytop sur la ligne de commande. J'ai changé les couleurs, j'en ai marre du noir.

Nous pouvons obtenir des informations sur 5 sujets :

  1. le processeur (CPU)

  2. la RAM

  3. le Disque

  4. les processus en train de tourner

  5. le réseau

Charge CPU

Deux écrans successifs sur le processeur à une minute quarante d'intervalle :

  • la température oscille entre 48 / 51°C : la OPZ2 chauffe un peu, un petit diffuseur passif ne ferait pas de mal

  • le CPU évolue entre 1% et 12% de charge, on regardera les process pour savoir ce qui consomme le plus

  • le pic de charge qui se déplace vers la gauche correspond à des manipulations dans bpytop, ne pas en tenir compte

En manipulant l'interface du LMS avec Material Skin, la charge monte jusqu'à 24% sur un pic. Cela survient par exemple quand le LMS doit afficher la liste de toutes les images de tous les albums.

Avec ces données on peut dire que la carte est largement dimensionnée pour proposer une interface fluide dans l'IHM est aucune interruption de lecture.

Processus

Ci-contre, le cas le pire avec le squeezebox serveur (LMS) au maximum de consommation de ressources, 13.2% de CPU.

Le LMS consonmme environ 25% de la RAM disponible.

Le lecteur "squeezelite" consomme moins de 1% de CPU et 14% de la RAM.

Quand l'IHM n'est pas sollicité, c'est bpytop qui consomme le plus de ressources CPU !

Le serveur consomme moins de 1% de CPU, le player idem.

On voit les processus du disque contenant la musique (usb-storage et mount.nfs) consommer très peu, 0.2% à eux deux !

RAM

La OPZ2 n'est pas un monstre en terme de mémoire installée. Le 1Go de RAM est consommé à 60%. D'un autre côté, c'est 30€ la carte, on s'en sert pour un serveur audio et s'il reste un peu de mou, cela signifie que le produit est bien dimensionné pour l'usage.

Sur le graphique ci-contre on a aussi des stats sur la SD Card : la carte de 32Go est occupée à 8%. 32Go, c'est quasiment la taille la plus petite que l'on puisse trouver en 2022, pour quelques euros.

Réseau

On sélectionne "eth0" qui correspond à l'échange sur le câble RJ45... Je m'aperçois que je n'ai pas essayé le Wifi avec la carte, il ne fonctionnait pas il y a 3 ans, je me demande si quelque chose a été corrigé.

Quoiqu'il en soit la partie réseau ronronne à servir les clients. même en utilisant l'IHM et en servant 3 clients sur des fichiers Flacs 16/44.

Un autre exemple en testant avec des fichiers 24 bits à 3000Kbps. On arrive à faire monter un petit peu le débit, mais en fait les bouts de fichiers sont transmis au logiciel squeezelite qui décode le FLAC : le débit réseau est inférieur au débit des données décodées, parce que les données sont décodées par le player, pas par le serveur.

A ce compte là, on peut avoir plein de lecteurs, ce sont eux qui travaillent. cela explique aussi toutes les bibliothèques à installer pour le squeezelite : c'est ce logiciel qui décode.

Typiquement dans ce type de solution, prétendre que tel ou tel serveur est meilleur pour l'audio, quand il ne fait qu'envoyer des bouts de fichiers à travers le réseau qui sont décodés par le player en local, c'est vraiment stupide. C'est pareil pour les switch réseau "audio" et le câbles réseau "audio", c'est vraiment n'importe quoi.

Conclusion des mesures

Vous savez ce que l'on dit : quand on veut savoir, on mesure. Les mesures montrent que la OPZ2 est une carte bien adaptée au LMS. On le savait déjà, puisque que l'on s'amuse avec des Raspberry et d'autres cartes depuis des années, ceci dit c'est bien de le confirmer par quelques mesures.

En 2008 on installait le LMS sur un PC et on utilisait des petites machines vendues par Slimdevices puis Logitech (Squeezebox puis Logitech Duet). En 2012 Logitech a abandonné l'écosystème et l'a rendu à la communauté. A ce moment là on a tenté de lire la musique avec des Raspberry Pi. Les petites cartes de 2012 étaient très limitées en ressources avec processeur 1 coeur à 600MHz / 512Mo RAM initiales ont vu leurs puissances énormément progresser (pour un tarif identique).

Quand la Raspberry et les autres cartes ont disposé de plusieurs coeurs et touché ou dépassé le 1GHz elles ont été capable d'accueillir confortablement le LMS. L'avantage de ces cartes c'est qu'elles consomment très peu. La OPZ2 consomme moins de 1W en régime normal et monte jusqu'à 2.1W lors de stress tests, c'est à dire jamais en conditions normales d'utilisation. Pour un serveur que l'on ne va jamais éteindre, c'est positif sur le plan de l'environnement mais aussi sur la facture d'électricité. A la méga louche 1W c'est 1€ de facture électrique à la fin de l'année.

Vous savez il y a une sorte de concours pour faire fonctionner Doom sur toutes les machines possibles. De mon côté, j'essaye de faire fonctionner squeezelite et / ou LMS sur toutes les machines possibles. Après Intel x86 et ARM, je suis impatient de tester sur du Risc-V.

Ce sera certainement pour cette années ou le début de l'année prochaine, dès qu'une carte sera disponible sans trop de complications et à un tarif inférieur à 50€.