mickeyf.docs
    Preparing search index...

    Output features for a single frame.

    Conventions:

    • All *01 fields are normalized to $[0, 1]$.
    • nowMs/deltaMs are in milliseconds.
    • “Pulse” fields are edge-triggered and are typically true for a single frame.
    type MusicFeaturesFrame = {
        beatEnv01: number;
        beatHit: boolean;
        beatStrength01: number;
        clarity01: number;
        deltaMs: number;
        hasMusic: boolean;
        isBeat: boolean;
        moveGroup: 0 | 1;
        musicWeight01: number;
        nowMs: number;
        pitchColor: HslColor;
        pitchDecision?: ColorDecision;
        pitchHz: number;
    }
    Index

    Properties

    beatEnv01: number

    Smoothed beat envelope in $[0, 1]$ (continuous).

    beatHit: boolean

    Beat “hit” pulse: true only on the envelope trigger frame.

    beatStrength01: number

    Beat strength in $[0, 1]$ (normalized upstream, clamped here).

    clarity01: number

    Pitch confidence in $[0, 1]$ (clamped).

    deltaMs: number

    Elapsed time since the previous frame, in milliseconds.

    hasMusic: boolean

    true when audio is available and currently playing.

    isBeat: boolean

    Beat boolean from the upstream beat heuristic (transient).

    moveGroup: 0 | 1

    Beat group toggle emitted by BeatEnvelope (0 | 1).

    musicWeight01: number

    Overall “music present” weight in $[0, 1]$.

    This is derived from clarity and gated by hasMusic. It is intended as a relative intensity/enable signal for visuals rather than a physical measurement.

    nowMs: number

    Absolute time, in milliseconds (monotonic clock).

    pitchColor: HslColor

    Render-ready HSL color derived from pitch policy/controller (hue in degrees).

    pitchDecision?: ColorDecision

    Optional metadata from the pitch policy step (commit/silence info).

    pitchHz: number

    Raw detected pitch in Hz (may be NaN/Infinity if upstream provides it).