LegbaAudioLevel

expérimentaldepuis 0.1.0@legba-core/ui
Aperçu en direct — vrai composant, pas une image

LegbaAudioLevel

Ce que ça fait

Mètre visuel de niveau audio (<legba-audio-level>, role="meter"). Purement synchrone (pas d’état chargement). level (attendu entre 0 et 1) est toujours clampé silencieusement — hors bornes ou NaN retombent sur une valeur sûre, jamais une exception. active=false (aucune source) reste visuellement distinct d’un niveau à 0 avec source active.

Signature

class LegbaAudioLevel extends LegbaElement {
  level: number;     // attendu 0–1, clampé sinon
  active: boolean;
}

Tag : legba-audio-level.

Paramètres

PropriétéTypeRequisDéfautDescription
levelnumbernon0Niveau attendu entre 0 et 1 ; toute autre valeur (hors bornes, NaN) est clampée à une valeur sûre sans erreur
activebooleannonfalsefalse = aucune source (état vide), visuellement distinct d’un niveau à 0 actif

Retour

N/A — un élément DOM. Aucun événement émis.

Erreurs

Aucune : level invalide (hors bornes, NaN, non numérique) est toujours clampé silencieusement, jamais une exception.

Exemple minimal

import type { LegbaAudioLevel } from "@legba-core/ui";

function showAudioLevel(meter: LegbaAudioLevel, level: number): void {
  meter.active = true;
  meter.level = level;
}

Exemple complet

import type { LegbaAudioLevel } from "@legba-core/ui";

function wireAudioAnalyser(meter: LegbaAudioLevel, analyser: AnalyserNode): void {
  const data = new Uint8Array(analyser.frequencyBinCount);
  meter.active = true;

  function tick(): void {
    analyser.getByteFrequencyData(data);
    const average = data.reduce((sum, value) => sum + value, 0) / data.length;
    meter.level = average / 255; // hors bornes possible, le composant clampe
    window.requestAnimationFrame(tick);
  }
  window.requestAnimationFrame(tick);
}

Pièges

  • Pas d’état “chargement” : level est toujours une valeur déjà connue, jamais en cours d’obtention — genuinely pas applicable à ce composant.
  • active=false n’est pas équivalent à level=0 : ce sont deux états visuellement distincts (repli hachuré/atténué pour active=false), une UI d’appel doit poser active explicitement selon qu’une source existe.
  • level hors bornes ou NaN ne lève jamais — vérifier la source du calcul en amont si le mètre semble bloqué à 0, ce n’est pas un bug du composant.
  • Consomme les jetons --legba-* comme tout composant @legba-core/ui : ne redéclare jamais un jeton public directement, voir LegbaElement.

Voir aussi