Zonza : dictée vocale locale macOS (MLX-Whisper + cercle pulsant)

Reconstruction propre de l'ancien projet Dictée. Bundle id neuf
(cloud.mrtechlab.zonza), chemin de build unique vers /Applications
(plus jamais de builds /tmp enregistrés dans LaunchServices).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 23:57:59 +02:00
co-authored by Claude Fable 5
commit 22080eb997
18 changed files with 955 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
"""Pont audio → animation : calcule un niveau de volume normalisé.
Unité pure (numpy seulement) — aucune dépendance matérielle, testable sans micro.
"""
import numpy as np
def compute_rms(frames):
"""Niveau RMS d'un bloc audio float32, normalisé et borné dans [0.0, 1.0].
frames : tableau numpy 1-D d'échantillons float32 (typiquement dans [-1, 1]).
Retourne 0.0 pour un bloc vide ou silencieux.
"""
if frames.size == 0:
return 0.0
rms = float(np.sqrt(np.mean(np.square(frames, dtype="float64"))))
return min(1.0, max(0.0, rms))
def shape_level(rms, gain):
"""Met en forme un niveau RMS brut pour l'animation : amplifie et borne dans [0, 1].
Les RMS vocaux sont faibles (~0.02–0.15) ; appliqués tels quels, le cercle bouge à
peine. On applique un gain puis une courbe en racine carrée : les niveaux faibles sont
boostés (forte réactivité à voix normale) tout en restant bornés à 1.0 (pas de
saturation visuelle). gain=0 → toujours 0 (aucune réaction).
"""
boosted = max(0.0, rms) * gain
shaped = boosted ** 0.5
return min(1.0, max(0.0, shaped))