Chaîne de traitement complète NowYouSea — signal d'entrée → Pi → transport → serveur → traitements → écritures → rétention → sorties. Clique un nœud pour le détail. Données live rafraîchies /10 s.
192 kHzCapture matérielle (AudioMoth, Nyquist)
24 kHzAudio archivé (candoo, 48 kHz Nyquist/2)
8 kHzAnalyse IA (AST rééchantillonne à 16 kHz)
Le spectre large bande 192 kHz passe par le canal spectro, pas par l'audio archivé.
✓ Canal 384 kHz rétabli. Le spectro large bande du firmware alimente désormais la chaîne — 128 bandes logarithmiques de 100 Hz à 192 kHz. spectro_rig_hour = 0. Obtenu en arrêtant nys-audio sur la Pi, qui monopolisait la carte son en 48 kHz. Seul rig-candoo publie ce canal ; rig-pi-flag reste en 96 kHz sans canal large bande.
décode trame [4o BE][JSON][audio]
archive toujours en FLAC (transcode si WAV, ~−45% octets)
écriture atomique (fichier temp + os.rename), chmod 644
si backfill : os.utime à l'horodatage d'origine
compute_spectro()
Process · DSP
PCM int16 → float32 (÷32768) · downmix mono STFT nperseg=1024, noverlap=512 · module |Zxx|
regroupement bins → 128 bandes, espacement LINÉAIRE · plafond 100 trames dB = 20·log10(mag+1e-10), écrêté [-80,0] → [0,255] uint8, base64 fmax = sample_rate/2 → 24 kHz candoo, 48 kHz flag — jamais 192 kHz 128 bandes LINÉAIRES ici, contre 128 bandes LOG côté rig — deux échelles différentes à ne pas confondre
handle_rig_spectro()
Process · actif
spectro large bande calculé à bord sur PCM 384 kHz
colonnes uint8, champs cols/colHz/meta meta = {binCount: 128, fMinHz: 100.0, fMaxHz: 192000.0, scale: "log"} 128 bandes LOGARITHMIQUES, 100 Hz → 192 kHz colHz = 46.88 (colonnes/s) · 5 colonnes/message seul canal porteur de l'ultrason — désormais alimenté
spectro_rig_hour 0
classify_chunk()
Process · fail-soft
POST http://192.168.0.87:8091/classify (GPU box)
modèle AST MIT/ast-finetuned-audioset-10-10-0.4593
rééchantillonne à 16 kHz → ne voit que 0–8 kHz
log-mel 128 bandes → patchs 16×16 → ViT → 527 classes AudioSet timeout=8s · fil séparé, tolérant panne
seuil écriture EVENTS_MIN_SCORE=0.10
latence — ms
handle_gps / power / system / summary / ais
Process
normalisation puis écriture InfluxDB
↓
6
Écritures
Fichiers audio
Stockage
/data/nowyousea/audio/<rig>/<YYYY-MM-DD>/<HH>/chunk-<ts_ms>.flac
FLAC mono 16 bits · candoo 48 kHz, flag 96 kHz · chunks 10 s
fichiers/h —total —
Historique spectro
Stockage
/data/nowyousea/spectro/<rig>/<date>/<HH>.ndjson, un fichier/heure en append
(choix assumé : milliers de petits fichiers coûtent plus cher sur ce HDD)
chaque ligne porte src="serveur" ou "rig"
+ instantané <rig>.json (dernier lot, écrasé à chaque fois)
⚠ Aucun quota par rig. La purge est globale et par âge uniquement, jamais par volume. Un rig mal réglé remplit le disque partagé — c'est ce qui a mis l'iowait à 94% le 05/10 (candoo à 1 chunk/s, 3300 fichiers/h). Prérequis avant d'ouvrir l'enrôlement à des contributeurs.
nys-audio-prune
Tâche
/usr/local/sbin/nys-audio-prune, timer systemd horaire find -mmin +2880 -delete sur *.wav/*.flac et *.ndjson, puis suppression dossiers vides
soit 48 h
audio — minspectro — min
dernière — · prochaine —
enregistré le plus ancien : —
✓ backfill détecté — des chunks plus anciens que les fichiers eux-mêmes ont été renvoyés par le spool de la Pi
conteneur nowyousea-web · webroot /srv/www/nowyousea
proxy /api/* → 172.17.0.1:8090 · /hls/ → 172.17.0.1:8888 · /ops-admin/ → 172.17.0.1:8793
alias /audio-files/ → /data/nowyousea/audio/ ⚠ seules les routes /api/ déclarées sont proxifiées, le reste tombe en catchall HTML 200
Pages
Sortie
/dashboard/ (carte+écoute+waterfall live) /timeline/ (48h, fenêtre 20–192 kHz) /live/ (HLS) · /ops-admin/ · /archi/ · /toolbox/ (cette page) waterfall large bande et timeline montent maintenant réellement à 192 kHz sur candoo
MediaMTX
Sortie · inactif
v1.21.1 · SRT 10.9.0.1:8890 (VPN seulement)
transcodage auto Opus 64k+32k · HLS basse latence segments 1s sur 127.0.0.1:8888 publishers=0, aucun ffmpeg→SRT posé sur la Pi
Opus plafonne à 48 kHz → écoute humaine seulement, jamais l'archive