/**
 * The plain-language layer over the effect registry.
 *
 * Every entry is written for somebody who has never opened a mixer. The rule
 * used throughout: name the OUTCOME, never the mechanism, and describe a control
 * by what changes in the sound rather than what it does to the signal.
 *
 * This is a layer *over* the registry, not a replacement for it. `HF_AUDIO_FX`
 * stays the authority on what an effect is and what its parameters do; this says
 * what to call those things in front of an author. `audioFxCopy.test.ts` holds
 * the two together — every shipped effect, every one of its parameters, and
 * every preset must have an entry here, so adding one to the registry without
 * copy fails a test rather than shipping a rack panel labelled `highpass`.
 *
 * Tone and the levelling module are deliberately absent: both carry their own
 * copy in core already (`audioEqSummary`, `levellingSummary`), because a summary
 * that has to read the chain belongs beside the code that writes it.
 *
 * Design rationale, and the review page built from this, in
 * `plans/audio-fx-ux/README.md`.
 */
export interface Ends {
    /** What the low end of the control sounds like. */
    low: string;
    high: string;
}
export interface ParamCopy {
    label: string;
    hint?: string;
    ends?: Ends;
}
export interface EffectCopy {
    /** What the module is called in the rack. Never the DSP name. */
    title: string;
    /** One line: what it is for. Present tense, second person implied. */
    does: string;
    /** The problem an author would say out loud that leads here. */
    reachFor: string;
    /**
     * The single control that carries the module. Either a real parameter key,
     * or "strength" — meaning the module gets one derived knob and the real
     * parameters live behind Details.
     */
    primary: string;
    primaryEnds: Ends;
    /** Plain names for the real parameters, shown only under Details. */
    params: Record<string, ParamCopy>;
    /** Which frequencies it acts on, for the shared ruler. Omit if not spectral. */
    band?: [number, number];
}
export declare const EFFECT_COPY: Record<string, EffectCopy>;
/**
 * The shared vocabulary. Frequencies mean nothing to somebody who has not been
 * taught them; these words are what the same person would say unprompted, and
 * naming the ranges once teaches them everywhere they appear.
 */
export declare const BANDS: {
    from: number;
    to: number;
    name: string;
    says: string;
}[];
/**
 * Which named range a frequency falls in.
 *
 * The whole point of `BANDS` is that the words get taught, and they only get
 * taught if a module can say which one it is working in. Below the first band
 * and above the last both clamp rather than returning nothing: 15 Hz is still
 * rumble to anybody who can hear it, and the alternative is a filter at the edge
 * of its range having no name at all.
 */
export declare function audioBandAt(hz: number): (typeof BANDS)[number] | undefined;
/** Which everyday complaint each preset answers. Presets ARE the product here. */
export declare const PRESET_PROBLEM: Record<string, string>;
/**
 * What a module says when it is CLOSED.
 *
 * The most-seen state by a distance: a rack with six modules is six of these
 * and nothing else. So it is a sentence about what is happening to the sound,
 * not a dump of the parameter that happens to be first. An author should be
 * able to read the rack top to bottom and understand their own mix.
 *
 * Numbers stay in — they are what makes it checkable rather than vague — but
 * they arrive inside a phrase instead of on their own.
 */
type P = Record<string, unknown>;
export declare const SUMMARY: Record<string, (p: P) => string>;
export {};
//# sourceMappingURL=audioFxCopy.d.ts.map