Overlay reduit d'un quart, et sa geometrie devient proportionnelle

Barre 440x52 -> 330x40. Les proportions internes (bouton stop, micro, marges,
ecarts) etaient en dur dans le dessin : les laisser telles quelles aurait donne
une grosse pastille dans une barre retrecie. Elles derivent desormais de la
hauteur de la barre via core.bar_metrics, donc une seule valeur commande toute
l'echelle — diviser bar_height par deux divise tout par deux (teste).

Rendu verifie par capture d'ecran apres reduction.

50 tests passent.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-21 00:49:38 +02:00
co-authored by Claude Opus 5
parent 55c860c5b9
commit f8c30e0402
3 changed files with 89 additions and 26 deletions
+26 -6
View File
@@ -17,19 +17,19 @@ CONFIG = {
"sample_rate": 16000,
"fps": 30,
# --- overlay « barre de dictee » (bas de l'ecran) ---
"bar_width": 440.0,
"bar_height": 52.0,
"bar_radius": 16.0,
"bar_width": 330.0,
"bar_height": 40.0,
"bar_radius": 12.0,
"bar_bg_rgba": (0.09, 0.09, 0.10, 0.95),
"stop_button_rgb": (0.89, 0.31, 0.23), # rond rouge-orange
"stop_glyph_rgb": (1.0, 1.0, 1.0), # carre arrondi blanc au centre
"waveform_rgb": (0.95, 0.95, 0.97),
"waveform_bars": 34, # nombre de barres de la forme d'onde
"waveform_bars": 28, # nombre de barres de la forme d'onde
"waveform_floor": 0.07, # plancher : dessine en petit point (traine pointillee)
"mic_rgb": (0.78, 0.78, 0.82),
"bubble_text_rgb": (1.0, 1.0, 1.0),
"bubble_font_size": 13.0,
"bubble_max_width": 300.0,
"bubble_font_size": 12.0,
"bubble_max_width": 240.0,
"level_gain": 8.0, # amplification du niveau brut pour l'animation
"level_attack": 0.6, # lissage à la montée (0–1, proche de 1 = très réactif)
"level_release": 0.15, # lissage à la descente (plus petit = retombée douce)
@@ -92,6 +92,26 @@ def build_initial_prompt(termes=None):
return prefixe + ", ".join(retenus) + "."
# Proportions internes de la barre, exprimees en fraction de sa HAUTEUR : reduire
# `bar_height` reduit alors le bouton, le micro et les marges dans le meme
# mouvement, au lieu de laisser une grosse pastille dans une barre retrecie.
_PROPORTIONS = {
"stop_diametre": 0.538,
"mic_largeur": 0.173,
"marge_laterale": 0.423,
"mic_corps_hauteur": 0.250,
"mic_arceau_rayon": 0.135,
"ecart_interne": 0.346,
}
def bar_metrics(bar_height):
"""Mesures de l'overlay pour une hauteur de barre donnee, en points."""
if bar_height <= 0:
raise ValueError("bar_height doit etre > 0")
return {cle: bar_height * f for cle, f in _PROPORTIONS.items()}
def validate_config(config):
"""Valide la config ; lève ValueError si une valeur est aberrante."""
if config["min_duration_s"] < 0: