Une mise à jour a été effectuée début 2023, a priori avec succès.
L'application fonctionne sur n'importe quelle machine tournant sous linux. On peut l'installer sur un PC de bureau ou sur un laptop et, bien entendu sur une raspberry.
Naturellement la raspberry tourne sous linux. J'ai installé ma distribution favorite: la slackware. Je travaille avec depuis des années, je l'ai installée sur des dizaines de machines différentes sans difficulté majeure. Pour la rpi il y a un excellent site qui fournit les principaux liens à connaître. Mon installation a été effectuée en suivant pas à pas la procédure décrite sur le site de FatDog. J'ai pris la dernière version, la 14.1, comme sur mes autres PC et j'ai installé tous les paquetages standard. Tout s'est passé sans anicroche.
Suivant mes habitudes au début j'ai synchronisé
avec subversion
sur la rpi mes propres
fichiers d'environnement, de configuration, mes
utilitaires divers et variés afin d'avoir un cadre de
travail identique sur toutes mes machines. Avoir tout les
fichiers importants gérés par un gestionnaire de version
fournit du même coup une sauvegarde automatique à chaque
commit.
J'ajoute que l'ai profité de ce développement sur rpi
pour me mettre
à git.
Maintenant toute l'application RadioK
est gérée sous git et non plus sous subversion.
Tout ceci étant dit, l'application doit pourvoir tourner sur toutes les distributions linux. Le portage a été fait sur Ubuntu 20.4 sans trop de souci.
Au coeur de l'application il y a
mplayer. C'est ce
programme qui est chargé de diffuser les flux radio. Il
est disponible dans toutes les distributions linux.
Naturellement on peut également utiliser n'importe quel
programme capable de traiter des flux audio en continu,
par exemple mpg123.
Les commandes de base sont écrites
en bash(1)
. Bien entendu l'interpréteur est
disponible dans tous les linux, il n'y a donc rien à
installer, c'est l'avantage d'avoir choisi ce langage. Son
inconvénient étant qu'il est difficile d'écrire des
scripts robustes et que ses fonctionnalités sont limitées.
Le serveur web permettant de commander à distance la radio
a été construit avec les outils de l'écosystème
NodeJs.
Depuis quelques temps je travaille dans cet environnement
javascript et je souhaitais continuer pour implémenter
rapidement et simplement l'application RadioK. Les
technologies javascript sont assez élégantes, les
bibliothèques sont nombreuses, la communauté très
active. Avec ce langage les développements sont très
rapides.
En revanche écrire des programmes corrects est beaucoup
plus difficile qu'il n'y parait et la documentation
disponible est souvent médiocre.
De base NodeJs
n'est pas installé sur une
machine linux. Il faut donc aller sur le site web,
télécharger le logiciel et l'installer. Ce fut facile avec
la version 0.4, en revanche ce fut une vraie galère pour
installer une des dernières versions. Actuellement je
tourne avec la version 5.5. Il m'a fallu passer des heures
à googler les problèmes, à trouver les modifications à
apporter au code source, à compiler et à recompiler tout
le paquet sachant qu'il faut environ une douzaine d'heures
pour refabriquer un exécutable.
Il y a ensuite toute une liste de modules à
installer. L'opération est assez simple
car NodeJs
dispose d'une
commande, npm
, qui permet de télécharger et
d'installer automatiquement ce qu'il faut. Sur la page
npmjs on peut voir le
contenu de la grosse bibliothèque disponible pour cette technologie.
Pour RadioK les modules nécessaires sont les suivants:
express, http, path, fs, winston
exec-sync, moment
npm install
devrait faire le
job. Le fichier package.json fournit la liste des
dépendances.
Les modules javascript implémentant les fonctionnalités de
crontab(1)
ont été la cause de grosses
déconvenues. Pour des raisons inconnues, sans doute liées
à la conception même de nodejs, ils ne déclenchaient pas
les commandes programmées quand l'intervalle de répetition
était trop grand. À cause de ce
bug RadioK ne fonctionnait plus. La
solution a consisté à utiliser simplement directement la
commande unix de base crontab(1)
.
Ce framework est utilisé pour le codage des pages web. Il
est disponible sur ce
site mais il est référencé automatiquement, il n'y a
donc rien à installer localement. De la même façon la
bibliothèque jQuery est
référencée automatiquement. En revanche il faut
télécharger le module
ui-slider
et mettre le fichier slider.js
dans le
sous-répertoire www/kontrol/client/js
.
Il faut aussi récupérer
UI
boostrap pour avoir les composants indispensables aux
interactions.
Les feuilles de style sont stockées dans le répertoire
css
. Les thèmes possibles sont pris sur le
site bootswatch. Le
style United a
été choisi pour RadioK mais il est
biensûr possible d'en changer.
Les définitions spécifiques sont dans le fichier
radiok.less
qu'il faut traiter par le
programme lessc pour créer le
fichier radiok.css
. Ce dernier fichier est le
résultat de la fusion des quelques définitions propres
à RadioK et des définitions générales
du thème sélectionné sur Bootswatch.
Répétons-le RadioK n'est pas livré comme un produit clés-en-main. Il est destiné aux bricoleurs, geeks et assimilés. Il nécessite un minimum de connaissances en informatique pour être opérationnel. Néanmoins il n'y a rien de très compliqué pour le faire fonctionner correctement. Il faut procéder méthodiquement, pas-à-pas, lors de l'installation.
La marche à suivre est la suivante :
RADIOK_HOME
comme le
chemin vers le répertoire où le logiciel a été
copié. On peut aussi
ajouter $RADIOK_HOME/bin
dans son PATH
.
RADIOK_PLAYER
pour
sélectionner soit mplayer soit mpg123.
NodeJs
,
Bootstrap
, …
audio
.
mplayer
avec une URL de radio
comme par exemple :
mplayer http://mp3lg.tdf-cdn.com/fip/all/fiphautdebit.mp3
onair.sh
comme par
exemple avec les commandes suivantes :onair.sh -h
onair.sh -l
onair.sh a-fip
onair.sh -k
/usr/local/bin/node
$RADIOK_HOME/www/kontrol/app.js
en modifiant le chemin vers node
si
besoin.http://localhost:18000/
et cliquer sur
les différents liens.
run
:
le fichier radiok.log
est écrit par le serveur
web tandis que onair.log
est utilisé par
le script onair.sh
.
Ctrl-J
sur Chrome.
start.sh
pour
démarrer. Il est bon de revérifier les pages envoyées,
les fichiers log.
radiok.sh
dans
une crontab
pour relancer automatiquement
tous les morceaux de l'application au reboot avec une
ligne comme celle-ci :
@reboot $HOME/rpi/radiok/bin/radiok.sh1 $HOME/tmp/cronk.log 2>&1
ntp
de se synchroniser correctement.
Malheureusement dans cette version de l'application les paramètres de configuration sont dispersés dans plusieurs fichiers. Il faut éditer les scripts ou les fichiers de code javascript pour changer des valeurs. On essaiera de regrouper ces paramètres dans un seul fichier dans une éventuelle future version.
Les options de mplayer
qui n'ont pas de
raison de changer sont définies sur la ligne de commande
préparée par onair.sh
. En revanche les
paramètres qui définissent le cache du programme sont à
laisser dans le fichier ~/.mplayer/config
. En
effet ils sont assez sensibles pour assurer un bon
fonctionnement de la radio. Le cache doit avoir une taille
suffisante pour avoir un flux continu si le débit du
réseau a des faiblesses mais cette taille doit rester
raisonnable pour avoir un démarrage du son dans un délai
acceptable. Il faut donc faire pas mal d'essais pour
trouver le bon compromis. Ma config actuelle est celle
ci-dessous, sachant que le débit descendant est autour de
20 kB/s.
C'est dans ce script qu'est définie la liste des stations
de radio préférées. Cette liste est implémentée en 2
tables d'association clé-valeur. La clé est un identifiant
simple. L'utilisation d'un préfixe permet d'avoir
automatiquement la liste classée par ordre
alphabétique. Ainsi la clé a-fip
viendra
avant la clé z-rmb
lors des affichages.
La valeur stockée dans la
table radios
est l'url utilisée pour accéder au flux
radio. En googlant un peu et en allant sur les sites web des
radios on trouve facilement ces url.
Dans l'autre table, surnames
, la valeur est
la chaîne de caractères choisie pour l'affichage du nom
des stations sur les pages web.
L'adresse du serveur est codée en dur dans ce fichier. Si le numéro de port par défaut, 18000, est changé il faut mettre à jour ce fichier.
Ce fichier contient le code de démarrage du serveur http. Le numéro de port qui a été choisi est 18000 mais il peut naturellement être changé.
Ce fichier javascript contient le code exécuté par le serveur http. Il traite les requêtes envoyées depuis un navigateur. On peut éditer les valeurs par défaut qui sont définies en haut du fichier, en particulier la clé de la radio et la durée de fonctionnement après déclenchement automatique.
Ce fichier contient le code du traitement des requêtes vocales. En se basant sur les indications fournies sur la page audio on peut le modifier.
Ce fichier définit le style d'affichage des pages web. Il
utilise un thème venant du site
Bootswatch. On peut
modifier comme on veut le style en n'oubliant pas de
refabriquer le fichier radiok.css
à l'aide de
la commande lessc
.
Ce fichier est le fragment de page qui présente la liste des radios disponibles et le bouton de réglage du volume. Ce slider peut avoir besoin d'être ajusté. On peut changer sa géométrie et les valeurs min et max pour le rendre plus facile à utiliser.