Module audiolivres

Fichier mod/aba.py

Organisation

analyse_nov_2021

Concernant la radio, l'enregistrement des stations peut se faire à trois endroits, en fonction de la source média : sur carte micro sd, sur clé usb ou sur le nas.

Pour les audiolivres, la source prioritaire et quasiment unique est la clé usb, et exactement le dossier /m/usb/aba, /m/usb correspondant au montage de la racine de la clé usb détectée au boot.

Plusieurs raisons pour ce choix :
- minorer l'usure de la carte micro sd
- la présence d'un partage réseau est exceptionnel
- un accès rapide aux livres téléchargés ou copiés (mode anarchie/ordonné).

Variables

all_lvr, sel_lvr et sel_n2i

Le coeur du module aba.py tourne autour des trois variables globales all_lvr[], sel_lvr[] et sel_n2i{}, et de la fonction build_selektion(). Un livre est un objet qui contient 11 attributs (nydplatufx + type_url) :

Champ Description
n num4c, Numéro à 4 chiffres
y genre, tYpe
d Durée
p Poids, ex : "5.78", "12"
l Lecteur
a Auteur
t Titre
u Urls ressources (tableau)
f Fiche internet
x eXtra
type_url

all_lvr[] contient tous les livres proposés par la bibliothèque en cours.
sel_lvr[] est créé depuis all_lvr[] et un/des critères de filtrage.
sel_n2i{} est un tableau de pointeurs vers l'index de sel_lvr[].

Exemples pour les trois variables essentielles.
Exemple 01
Exemple 02

Source module mod/aba.py

Fonctions

build_selektion

Docstring
construit les tableaux globaux
sel_lvr[] et sel_n2i{} depuis all_lvr[],

sel_lvr[] est une liste d'objets livre
C'est la sélection des livres en cours,
c'est une partie du tableau complet all_lvr[]
sel_n2i{} fait pointer un champ "n" vers l'index de sel_lvr[]

list_champs_n : tableau de champs "n" d'un objet livre,
                anciennement appelé num4c

Un exemple pour voir les liens entre les variables.

charger_all_lvr

Fonction appelée dans present_hasard_biblios(), rand11lvr_biblios() et surtout dans reprendre().

Docstring
crée le tableau all_lvr[]
d'une bibliothèque depuis le fichier catalog.txt correspondant
(ex : /opt/jk2019/tout/ini/aba/audiocite_classiques/catalog.txt)

all_lvr[] est un tableau d'objets livres

n=  OBLIGATOIRE
y=  facultatif
d=  facultatif
p=  facultatif
l=  facultatif
a=  OBLIGATOIRE
t=  OBLIGATOIRE
u=  OBLIGATOIRE, liste d'urls de .mp3 ou .zip,
    ou d'une url commençant par http et
    ne se finissant pas par zip ou mp3
f=  facultatif
x=  facultatif

renvoie True si succès, False sinon

Bibliothèques

intro

Les bibliothèques se classent en ... groupes :
1. livres gratuits en ligne (ex : audiocite.net, litteratureaudio.com)
2. livres privés sur clé usb
3. ...

Une bibliothèque propose des livres qui peuvent être :
- lus immédiatement ou pas
- supprimés ou pas
- ...

L'attribut "catalogue" d'une bibliothèque la caractérise (à vérifier).
...

tableau

Nouveauté : pour être accessibles plus rapidement, les livres des bibliothèques en ligne peuvent être dupliqués localement, sur un partage du réseau local. Par exemple, sur le disque dur d'une freebox. Le catalogue utilisé reste le fichier catalog.txt. Mais au lieu de vérifier pour chaque livre s'il est présent (sur la clé usb) ou s'il faut le télécharger pour le lire, il devient lisible directement du dépôt local. Attention, les fichiers doivent être lisibles directement (fichiers .mp3), pas sous format zippé. La fonction reseau_partages() de commun.py monte le nas (si présent) de la freebox vers /media/fbx/xavbox. Ensuite, la fonction media_present() de aba.py prendra en compte le nas pour déclarer un livre présent ou absent.

Tableau issu de la variable BIB_DISPOS de cfg.py.

Le type caractérise le catalogue : il peut être statique, sous la forme d'un fichier en dur, ou dynamique, dans ce cas, le fichier catalog.txt n'existe pas.
Les catalogues en dur sont placés dans /opt/jk2019/ini/aba/...
Fichiers catalog.txt volumineux : 680 Ko pour audiocité classiques.

Un livre peut être présent (téléchargé) ou absent (en ligne).
Présent signifie qu'il peut être lu immédiatement et qu'il est stocké en local (clé usb généralement).
Les fichiers téléchargés sont stockés dans /m/usb/aba/<clé_biblio>
Le dossier du livre correspond au champ "n" (de nydplatufx) du livre, souvent représenté par une suite de 4 chiffres (variable utilisée : num4c, pour numéro à 4 chiffres).

Les bibliothèques : catalogue statique et dynamique
# Bibliothèque (clé) Type cata. Catalogue Présence
1 audio_cite_classiques statique audiocite_classiques/catalog.txt présent/absent
2 audio_cite_contemporains statique audiocite_contemporains/catalog.txt présent/absent
3 cle_usb_anarchie dynamique depuis contenu /m hors /m/music présent
4 cle_usb_ordonnee dynamique depuis contenu /m/music/type3 présent
5 divers_src statique autres_sources/catalog.txt présent/absent
6 perso_zip dynamique depuis http://gangand.net/aa/audiolivres/perso_zip présent/absent
7 librivoxde statique librivox_de/catalog.txt présent/absent
8 librivoxen statique librivox_en/catalog.txt présent/absent
9 librivoxfr statique librivox_fr/catalog.txt présent/absent
10 litteaudio statique litteratureaudio/catalog.txt présent/absent
Exemple de catalogue statique : extrait de audiocite_classiques/catalog.txt
n=0001|y=nouvelles|d=0:15:00|p=14|l=Plumedencr|a=Joseph Ferdinand Morissette|t=Lucien et Marie-Louise|u=https://archive.org/download/LucienEtMarieLouise/Lucien%20et%20Marie-Louise.mp3|f=nouvelles/joseph-ferdinand--morissette-lucien-et-marie-louise.html|x=
n=0002|y=religions|d=1:25:00|p=80|l=Léa|a=l’abbé Regnault|t=Chemin de croix médité|u=https://archive.org/compress/chemindecroixmedite/formats=VBR%20MP3&file=/chemindecroixmedite.zip|f=religions/p.a.-abbe-regnault-chemin-de-croix-medite.html|x=
n=0003|y=contes|d=0:2:00|p=1.75|l=Sabine|a=l’abbé Ricouard|t=Contes et légendes de la Seine-Maritime. Le bal des fées|u=https://www.archive.org/download/LeBalDesFees/Le_bal_des_fees.mp3|f=contes/abbe-ricouard-contes-et-legendes-de-la-seine-maritime--la-bal-des-fees.html|x=
n=0004|y=poesies|d=0:10:00|p=9.2|l=Ar Men|a=François Abgrall|t=Le Mystère de la Trinité|u=https://archive.org/download/abgrallfrancoislemysteredelatrinite/Abgrall_Francois_-_Le_Mystere_de_la_Trinite.mp3|f=poesies/francois-abgrall-le-mystere-de-la-trinite.html|x=
n=0005|y=romans/nouvelles|d=5:30:00|p=202|l=Raminagrobis|a=Edmond About|t=L'homme à l'oreille cassée|u=https://archive.org/compress/L_Homme_A_L_Oreille_Cassee/formats=VBR%20MP3&file=/L_Homme_A_L_Oreille_Cassee.zip|f=romans/edmond-about-lhomme-a-loreille-cassee.html|x=
n=0006|y=nouvelles|d=0:50:00|p=36|l=Daniel Luttringer|a=Edmond About|t=La Fille du chanoine|u=https://archive.org/download/Edmond_About_-_La_Fille_Du_Chanoine/Edmond_About_-_La_Fille_du_chanoine.mp3|f=nouvelles/edmond-about-la-fille-du-chanoine.html|x=
n=0007|y=romans/nouvelles|d=2:20:00|p=84|l=Raminagrobis|a=Edmond About|t=Le nez d'un notaire|u=https://archive.org/compress/LeNezDUnNoraire/formats=VBR%20MP3&file=/LeNezDUnNoraire.zip|f=romans/edmond-about-le-nez-dun-notaire.html|x=
n=0008|y=romans/nouvelles|d=6:17:00|p=231|l=Raminagrobis|a=Edmond About|t=Le roi des montagnes|u=https://archive.org/compress/LeRoiDesMontagnes/formats=VBR%20MP3&file=/LeRoiDesMontagnes.zip|f=romans/edmond-about-le-roi-des-montagnes.html|x=
Exemple de livres présents

changement

Déroulé des actions suite à une demande de changement de bibliothèque

Le changement de bibliothèque peut se faire suite à une demande de l'utilisateur grâce à la commande "11" (menu vocal) suivie de la touche "8", ou bien à la demande d'autres fonctions, comme le choix d'un livre au hasard de l'ensemble des bibliothèques (fonction present_hasard_biblios()).
La fonction menu_changer_biblio() est appelée.
La fonction menu_vocal() donne à choisir parmi les fonctions de changement des bibliothèques : bbl_audio_cite_classiques(), bbl_audio_cite_contemporains(), bbl_litterature(), bbl_cle_usb_anarchie(), bbl_cle_usb_ordonnee(), bbl_perso_zip(), bbl_librivoxde(), bbl_librivoxen() et bbl_librivoxfr().
Ensuite est appelée bbl_changer(clé_de_nouvelle_biblio), dont voici la définition ci-dessous.

def bbl_changer(new_biblio)
def bbl_changer(new_biblio):
    """ changement de bibliothèque grâce au menu vocal """
    bibo = bbl_actu()
    if bibo == new_biblio:
        msg = "Vous êtes déjà dans la bibliothèque " + bbl_nom()
        infos.pdrNew(msg)
    else:
        if nb_livres_total() > 0:
            memo_pos_livre_aba()
            save_num4c_actuel(lv_num4c())
        infos.ini_set("aba_bbl_actuelle", new_biblio)
        reprendre('pas_lancement des audiolivres')

S'il y a au moins un livre dans la nouvelle sélection, la fonction memo_pos_livre_aba() est d'abord appelée pour mémoriser un livre en lecture.
Ensuite, save_num4c_actuel(lv_num4c()) permet de sauvegarder le champ "n" du livre en cours de la bibliothèque en cours.
Enfin, on stocke la nouvelle biblio choisie dans py_user.ini, avec la variable aba_bbl_actuelle.
Et on relance les audiolivres avec reprendre().

La fonction phb_chercher() produit le tableau de résultats choix_hasard[] suivant.
Le tableau contient la liste des livres présents des bibliothèques statiques ("cata_type" : "statique").

phb_chercher(...) produit le résultat choix_hasard[...]
Clé biblio Fullpath num4c ou champ "n"
audio_cite_contemporains /m/music/aba/audio_cite_contemporains/0076 0076
audio_cite_classiques /m/music/aba/audio_cite_classiques/0755 0755
librivoxde /m/music/aba/librivoxde/0024 0024
librivoxde /m/music/aba/librivoxde/0037 0037

data_biblios

Statistiques sur les bibliothèques. Cliquez sur la colonne Bibliothèque (clé) pour voir la liste des livres.

EN COURS Les bibliothèques : statistiques des livres
# Bibliothèque (clé) Type cata. Livres Poids Durée Infos
1 audio_cite_classiques statique 2 601 220 Go 180 j
2 audio_cite_contemporains statique 318 12 Go 9 j 5 h
3 cle_usb_anarchie dynamique
4 cle_usb_ordonnee dynamique
5 divers_src statique
6 perso_zip dynamique
7 librivoxde statique 445 44 Go 64 j
8 librivoxen statique 227 33 Go 49 j
9 librivoxfr statique 127 15 Go 23 j
10 litteaudio statique 492 108 j
11 loyalbooksfr statique 3 60 Mo
Total 4200 320 Go 1 an 2 mois

Source

source

Le fichier source compte ... lignes, ... fonctions, ... variables, ...

Source module mod/aba.py

Projets autres auteurs

autres_auteurs

Audio book player for senior visually impaired

Raspberry Pi Talking Book Player

Audioplayer for blind people
Utilisation d'une routine python pour lire les input d'un seul caractère (pas d'appui sur Entrée nécessaire)
Le code sur github