xavbox adm

Webradio, enregistreur et audiolivres connectés sur raspberry, guide de l'administrateur

Démarrage

Introduction

xavbox est basé sur python version 3. Il utilise des commandes shell, comme find et du, les binaires externes mpg123, pico2wave, eyeD3, ..., et mpc/mpd, Music Player Daemon.

xavbox s'articule autour de 5 modules : accueil, radio, musique, audiolivres et maintenance. Le module accueil, noeud du système, est géré par jukebox.py. Le module radio se trouve dans rad.py, musique dans zik.py, audiolivres dans aba.py, et maintenance dans mtn.py.

Sources

Dossiers des sources, cliquez sur la colonne de gauche pour accéder au code, sur celle de droite pour ouvrir la documentation.
L'italique désignent des éléments non clicables pour l'instant.

/opt/jk2019/tou_py
Racine Description
cfg.py Variables globales de l'appli
Touches clavier
Sons mp3
jukebox.py Gestion des commandes
Plantage
/opt/jk2019/tou_py/inc
inc Description
infos.py Messages visuels et sonores
inputkiz.py Entrée clavier
mpc.py Commandes mpc
/opt/jk2019/tou_py/mod
mod Description
📚 aba.py Module audiolivres
commun.py Fonctions communes aux modules
mtn.py Module maintenance
📻 rad.py Module radios
🎝 zik.py Module musique et enregistrements

arborescence

L'arborescence des dossiers est la même, que l'on soit en mode local (usb) ou en mode réseau (nas).
En mode usb, le dossier /m est monté sur /dev/sda1 (clé usb).
En mode nas, le dossier /m est monté sur <disque réseau>/xavbox

Arborescence dossiers
Dossier Description
/m/memo aba : position des audiolivres entamés
zik : ...
/m/music sous-dossier type1 : rock
sous-dossier type2 : classique
/m/playlists radio
zik_fav_1_user_1.m3u
zik_mem_user_1.m3u
/m/users données utilisateur

mode_usb_nas


Installer OMV (OpenMediaVault) sur Raspberry

Le but est de partager des fichiers mp3 (musique ou audiolivres) depuis une xavbox, pour d'autres xavbox sur le réseau local, ou comme NAS.
Un tuto d'install d'OMV sur Raspberry

Diagramme d'ouverture d'un module depuis l'accueil

Diagramme dia png


Il existe trois modes d'utilisation des modules, ou trois sources de media, nommé src_media ou src_medias dans le code.
src_media peut prendre les valeurs "sd", "usb" ou "nas".
Le src_media "nas" permet à un utilisateur qui a plusieurs appareils de retrouver la même configuration et historique sur tous les appareils, et de bénéficier éventuellement de la capacité confortable d'un nas.
En mode src_media "usb", la clé usb peut être limitée : en taille, en durée de vie et en compatibilité avec le raspberry pi.
Enfin, le src_media "sd" est un mode de secours, toujours disponible, quand les deux autres sont absents : clé usb non reconnue ou pas insérée, pas de disque réseau présent sur le réseau local.
Attention à vérifier la place restante sur la carte (micro) SD.

Le fichier /home/pi/xavbox_global.ini enregistre l'utilisateur actuel, son src_medias_key et le module actuel. Attention : /home/pi/xavbox_global.ini va devenir /m/usb/xavbox_global.ini pour réduire usure carte micro SD. user_1_current_module=mtn user_1_src_medias_key=usb user_actu=user_1

Radio

En mode "sd", on enregistre la radio sur la carte (micro) SD, dans /m/sd/rec/user_1.
En mode "usb", on enregistre la radio sur la clé USB, dans /m/usb/rec/user_1.
En mode "nas", on enregistre la radio sur le réseau, dans /m/nas/rec/user_1.

src_media pour la radio
SD USBNAS
dossier rec /m/sd/rec/user_1 /m/usb/rec/user_1 /m/nas/rec/user_1
rad_group fichier user_1.ini
dans /m/sd/users
fichier user_1.ini
dans /m/usb/users
fichier user_1.ini
dans /m/nas/users
rad_position_dans_group_1 idem idem idem
rad_position_dans_group_2 idem idem idem
rad_position_dans_group_3 idem idem idem
rad_position_dans_group_4 idem idem idem

Musique et enregistrements

src_media pour la musique
SD USBNAS
dossier
musique
/m/sd/type1 /m/usb/type1 /m/nas/type1

Audiolivres

src_media pour les audiolivres
SD USBNAS
dossier
audiolivres
/m/sd/aba /m/usb/aba /m/nas/aba

Binaires externes

En cours

recreer_carte

Recréer/remonter une carte micro SD d'un appareil HS
Temps approximatif : 30 minutes

# Opérations détaillées
1 extraire la carte de l'appareil
2 l'insérer dans un lecteur de carte
3 retrouver l'image .img sur Disque 1
4 la copier sur /home/pi/Documents/20210209_jukebox
5 éjecter le disque de sauvegarde
6 insérer le lecteur de carte micro SD
7 repérer son dossier de montage avec mount
8 copier l'image avec
SUDO dd status progress if=/home/pi/Documents/20210209_jukebox/20210209_jk-un-fil_jk2019_8GB.img of=/dev/sdb
(remplacer SUDO par sudo pour lancer réellement la commande)
9 sudo sync; sync
10 replacer la carte et démarre l'appareil

secours

Recréer/remonter une carte micro SD d'un appareil HS

Appareils opérationnels et cartes SD/micro SD de secours

IMPORTANT : les raspi zero et raspi 1 ne bootent pas sur une carte issue de 20210209_jk-un-fil_jk2019_8GB.img

# APPAREILS Lieu Description
1 xavbox noire stock rpi3b/carte micro SD de 16 Go
issue de 20210209_jk-un-fil_jk2019_8GB.img
IP wifi 30
2 medium bleu rouge stock rpi3b/carte micro SD de 16 Go
issue de 20210209_jk-un-fil_jk2019_8GB.img
IP wifi 25
3 multicoul cuisine rpi3b/carte micro SD de 16 Go (8 Go système)
issue de 20210209_jk-un-fil_jk2019_8GB.img
IP wifi 35
4 jkmusic12 ch. mil. rpi3b/carte micro SD de 32 Go (32 Go système)
IP wifi 12
5 jkzero2018 (chassis vert et blanc) stock pi zero W/micro SD 8 Go orange et blanche (3 Go système)
6 chassis noir stock pi zero W/micro SD 8 Go (8 Go système)
raspbian stretch d'origine
7 raspi1 coque pin contreplaqué
avec écran LCD deux lignes
salon pi zero W/micro SD 8 Go (8 Go système)
raspbian stretch d'origine


# CARTES Lieu Description
1 carte micro SD sachet xavbox 1 micro SD Sandisk ultra rouge et grise 64 Go (8 Go système)
2 carte micro SD sachet xavbox 1 micro SD 32 Go EVO rouge et blanche (8 Go système)
3 carte micro SD sachet xavbox 2 micro SD 8 Go (3 Go système)
issue de 20210211_jkzero2018_jk2019_3GB.img
4 carte micro SD sachet xavbox 2 micro SD 4 Go (1950 M système)
issue de 20210212_jkzero2018_jk2019_1950M_swapoff.img

Installation

installation

Fin octobre 2021, sortie de la nouvelle version du Raspbian OS bullseye (précédent=buster).
Réinstallation de xavbox sur un raspberry pi 4, une carte micro SD de 4 Go.
Le dossier /opt/jk2019, légèrement modifié, est sauvegardé dans le fichier opt_xavbox/jk2019_sur_raspi4_20211112.7z.

L'image complète de la carte SD est sauvegardée dans le fichier 20211112_xavbox_micro_sd_4GB_raspi4_2GB_ram.img.7z (558 259 093 octets).

Fichier xavbox_2021_install_raspbian_os_bullseye_puis_xavbox_sur_carte_4_GB.txt, sur raspi4/2 Go RAM

Voir le contenu de xavbox_2021_install_raspbian_...
- sudo apt install mpc mpd
- copie de /opt/jk2019 de machine dev vers /opt
- copie de /opt/jk2019/conf/_.profile/home_pi_.profile.sh vers /home/pi/Profile
- sudo mkdir /m; chmod -R 777 /m
- sudo apt install mpg123 sysvbanner eyed3 mpg321 mplayer
## - sudo apt install libttspico*   # pour pico2wave ?
- sudo apt install sendemail     # envoi ip au boot ?
- sudo mkdir /m/playlists; sudo chmod -R 777 /m/playlists
- copie /opt/jk2019/conf/mpd/mpd.conf dans /etc/mpd.conf
- copie /opt/jk2019/conf/startup_mailer vers /home/pi/startup_mailer
- sudo apt insttalml mediainfo p7zip-full
- mpc.py : PCM devient Headphone sur bullseye
    # r = sub_proc("amixer -c 0 set PCM " + sens + " | grep '%'")
    r = sub_proc("amixer -c 0 set Headphone " + sens + " | grep '%'")
- pico2wave pas installé, utiliser les cinq lignes suivantes :
cd
mkdir install_pico2wave
cd    install_pico2wave
wget http://ftp.us.debian.org/debian/pool/non-free/s/svox/libttspico0_1.0+git20130326-9_armhf.deb
wget http://ftp.us.debian.org/debian/pool/non-free/s/svox/libttspico-utils_1.0+git20130326-9_armhf.deb
sudo apt-get install -f ./libttspico0_1.0+git20130326-9_armhf.deb ./libttspico-utils_1.0+git20130326-9_armhf.deb

- startup_mailer.py (envoi d'un mail avec adresse ip) ne fonctionne plus, peut-être depuis l'authentification à 2 facteurs imposée par Google/Gmail le 9 novembre 2021

- sauvegarde avec dd de cette carte de 4 Go vers le fichier xavbox_202111_micro_sd_4GB_raspi4_2GB_ram.img.7z

release_notes

En configuration source réseau, le fichier /m/nas/rouge/xavbox/users/user_1.ini peut présenter un défaut gênant (bug ?) : la première ligne est très très longue, et peut provoquer de très grosses lenteurs de xavbox.
Il faut supprimer la première ligne, ou le fichier.

Profil utilisateur

Les données de l'utilisateur sont stockées sur le support source (source média). Pour le module radio, on va stocker la dernière radio écoutée en quittant l'appli. En source média réseau, cette information est stockée dans le fichier /m/nas/memo/...

Radio

Le module radio est géré par mod/rad.py.
Il utilise /m/...user....ini pour y stocker les variables suivantes :
- TODO
- ...
- ...
- ...

Fichier Dossier Description
/opt/jk2019/conf/m_sur_clef_usb/playlists contient les stations à recopier dans /m/playlists, par la fonction charger_les_stations()
/m/nas/rec/user_1 stockage des enregistrements de flux mp3 en mode réseau (nas) par la fonction fonction enrg_radio()
/m/memo/rad/py_rad_der_radio.txt dossier INUTILISÉ OBSOLÈTE par rad.py mais peut-être par jukebox.sh

Musique et enregistrements

Fichier Dossier Description
/m/playlists/zik_mem.m3u playliste mémorisée quand on quitte musique et enregistrements
/m/memo/zik/zik_mem.txt combiné à /m/playlists/zik_mem.m3u, mémorise la position dans playliste et progression

fichier d'une seule ligne, à basculer dans py_user.ini
écriture par fonction zik_memo("save_position_et_progression")
lecture par fonction reprendre_la_musique() -> zik_memo("position")

ex : volume: 87% repeat: off random: on single: off consume: off|1|200|0:06
Les 4 champs sauvegardés sont :
1. options de lecture (volume, ..., random, ...)
2. numéro de la liste des favoris (1 pour l'instant)
3. position dans playliste
4. progression dans morceau (en secondes)

Audiolivres

Le module audiolivres est géré par mod/aba.py.
Il utilise /m/... pour y stocker les variables suivantes :
- TODO
- ...
- ...
- ...

Fichier Dossier Description
... ... ...

Commun

Fichier Dossier Description
/m/...user....ini fichier de configuration commun aux modules

Lecture des médias

mpd et sa base de données peuvent être utilisés pour lire les médias (fichiers mp3, flux internet, playlistes), ou bien la base peut être mise de côté, comme pour les audiolivres.

rad_lecture

La fonction group_n() utilise la fonction load() de mpc.py pour charger une playlist.

zik_lecture

La fonction mp3_lettre() charge un sous-dossier relatif de /m/music avec mpc -q add type1/A, mpc -q add type1/R, ...

aba_lecture

La fonction lire_livre_actuel.lancer_lecture() ajoute les médias à lire par
mpc.add("file:///m/music/type3/Z/Stefan Zweig/Partie 1")
si ce sont des fichiers physiques de la clé usb,
soit par
mpc.add("aba/audio_cite_classiques/0254"), mpc.add("aba/litteaudio/0015")
pour des sous-dossiers relatifs du dossier music de mpd "/m/music".

Pour lire les audiolivres de la freebox, qui se trouveront dans le dossier /media/fbx/aba (voir fonction reseau_partages() de commun.py), on tentera d'utiliser mpc.add("file:///media/fbx/aba/audio_cite_classiques/0124")

Divers

duree_mp3

Connaître la durée de tous les mp3 avec mp3report

1. installer mp3report (sudo apt install mp3report)
2. télécharger le template suivant
3. utiliser la ligne de commande suivante :
mp3report --template mp3report_modele1.html --outfile rapport.html ./ 0001-0100

Durées cumulées par groupe de 100 livres

La colonne Taille désigne les fichiers convertis en mono,
grâce au script ffmpeg_mono.py,
à lancer dans le dossier contenant les sous-dossiers remplis de mp3.

1000 premiers livres audiocite.net
RapportDureeTaille
0001-0100 6j 22h4,0 Go
0101-0200 4j 20h2,8 Go
0201-0300 7j 9h4,2 Go
0301-0400 9j 12h5,4 Go
0401-0500 9j 16h5,5 Go
0501-0600 9j 2h5,2 Go
0601-0700 3j 4h1,9 Go
0701-0800 8j 7h4,7 Go
0801-090011j 6h6,4 Go
0901-1000 7j 9h4,2 Go
Total78 jours45 Go

100 premiers livres litteratureaudio.com
RapportDureeTaille
0001-010044 jours26 Go
Total44 jours26 Go

doc_mpd

Voir la doc, recopiée de /usr/share/doc/mpd/html

reparer_cle_usb_lecture_seule

sudo fsck.vfat /dev/sda1 -a

todos

OK : mettre code python dans /opt/jk2019/ et non plus dans /opt/jk2019/tou_py
OK : raccourci 774 : recherche le mot TODOS dans le code

- utiliser une file d'attente pour gérer les (raccourcis de) commandes
INTÉRÊT : faciliter l'intégration de commandes externes (par le web par exemple)

- synchroniser les xavbox présents sur le réseau (par utilisateur, module, fichiers mp3)

- conserver une partie des wav générés par pico2wave, pour lire plus vite

- intégrer la commande 25 dans la maintenance (bascule wifi partage modem smartphone)

- essayer d'intégrer de la domotique simple

- zik : *9 => lire les enregistrements dans l'ordre du plus récent au plus ancien

- touches raccourci :
n => next (équivalent de 6),
A : copier les favoris dans /m/usb/copie_favoris

- ordre des titres pour Marcel Proust, livre 0005 litteratureaudio.com
voir image du problème

usages_extra

Appareil audio multi-fonction, le xavbox pourra remplir d'autres tâches pratiques.

Usages et fonctions supplémentaires à envisager
FonctionNote
Chargeur de smartphoneUtiliser les ports usb disponibles
Audiolivres abaScraper bibliboom

touches_adm_dev

Voici les séquences de touches admin ou développeur.

Touches admin développeur
ToucheAction
Pvoir playliste
Qquitter (équivalent ...)
.0 ou 0.nettoyer écran
445 ou 456basculer le mode debug (voir_debug)
774voir les TODOS
775voir les stats_dev
778voir touches module
779voir touches communes
------ rad -----
*7[rad] voir les fichiers enregistrements user actu
------ aba -----
B[aba] les variables essentielles aba
C[aba] les catalogues bibliothèques
D[aba] documentation bibliothèques
R[aba] rechercher par mot (touche 18 pour user)

Matériel (compatible)

Matériel

Trevor's "Raspberry Pi" Wiki Export

Dans l'optique de fabriquer un lecteur d'audiolivres autonome, càd capable de lire des centaines de livres disponibles immédiatement, il faut regarder vers les clés usb de grande taille et à prix réduit.

Clé usb 128 Go à 22 euros