openmixer — generated API reference
    Preparing search index...

    Type Alias RangeSource

    RangeSource:
        | { kind: "headAmpGain" }
        | { kind: "faderTaper" }
        | { kind: "trimDb" }
        | { kind: "catalogLimits" }
        | { kind: "allocation" }
        | { kind: "coreLimits" }

    Where a fact's presentation LIMITS come from — never a hardcoded constant (#66's precedent, HeadAmpCapability.gainRange / headAmpGainRangeOf). Each member is a POINTER at the owning declaration, never a copied number: the consumer resolves it against the declaration it already imports, so the contract cannot hold a second spelling of a travel that then drifts.

    Facts with no range either have no numeric travel at all (a name, a membership set) or their limits live in a declaration this column does not point at yet (the EQ's own EQ_GAIN_LIMIT_DB/EQ_FREQ_RANGE in eq.ts; delay/reverb, whose params carry no declared limit table today) — absences, recorded as such rather than guessed.

    Type Declaration

    • { kind: "headAmpGain" }

      Reads the pad-aware HeadAmpCapability.gainRange (source.ts's headAmpGainRangeOf) — the REAC 0..55 travel by default, an RME mic input's 0..65 when the capability says so.

    • { kind: "faderTaper" }

      The per-channel FADER TAPER the topology declares (ChannelCapabilities.faderScaleFor, model.ts's FaderScale) — a position↔dB coupling, not a min/max pair. The server's fader row derives db through it and the DCA override shares it; a consumer that couples position to dB any other way is the class-D "both must keep the same taper" hazard.

    • { kind: "trimDb" }

      The desk's own digital input-TRIM travel — TRIM_RANGE (control-descriptor.ts), the declared TRIM_MIN_DB..TRIM_MAX_DB pair the trim row's codec clamps by.

    • { kind: "catalogLimits" }

      The processor's limit table in @freemixer/catalog (GATE_LIMITS / COMP_LIMITS), which its server controller seeds and clamps by — the desk-independent DSP law.

    • { kind: "allocation" }

      The SESSION's allocation: how many of a thing this channel may carry — sends, DCA members, insert slots, chain entries, bindable sources. The bound is a COUNT, not a travel in a unit, and it is neither a constant nor a device fact: a 32-bus session and an 8-bus session answer differently for the same code. Supplied through BoundsContext like catalogLimits, and legitimately ABSENT before a session is loaded — an absence to render, never a default to substitute (#150).

    • { kind: "coreLimits" }

      A travel CORE itself declares, per field, in the module that owns the fact — eq.ts's EQ_*_RANGE / HPF/LPF, fbs.ts's FBS_*_RANGE, strip-fx-limits.ts's delay and reverb travels. Resolvable with NO context at all, which is the point: these are facts of the desk's own DSP, one per rig, so nothing has to be handed in to reach them.

      Distinct from catalogLimits only by WHO declares it — catalog depends on core, so its tables must be injected while these can simply be read. Same authority class, two homes.