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
|
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 | USB | NAS |
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 | USB | NAS |
dossier musique |
/m/sd/type1 |
/m/usb/type1 |
/m/nas/type1 |
Audiolivres
src_media pour les audiolivres
| SD | USB | NAS |
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")
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