import type { PresetName } from "../types/audio.js"; export interface FilterParamRange { min: number; max: number; } export interface PresetDefinition { name: PresetName; description: string; warning?: string; allowAdeclick: boolean; allowAdeclip: boolean; allowDenoise: boolean; allowHighpass: boolean; allowLowpass: boolean; /** Always apply clarity / presence shaping for this preset */ alwaysEnhanceTone: boolean; /** Always apply mild glue compression */ alwaysCompress: boolean; /** * Dedicated archival rescue: always declick/denoise, declip on high peaks, * cut mud, tame hiss with lowpass, favor mid presence over air boost. */ archivalRescue?: boolean; /** * Beyond heritage: maximum noise/quality scrub — no punch EQ or compression. */ noiseScrub?: boolean; /** Fallback FFmpeg afftdn noise type hint: white | vinyl | shellac */ noiseProfile: "white" | "vinyl" | "shellac"; /** Soft high-shelf cut to suppress leftover hiss (negative dB range) */ hissShelfDb: FilterParamRange | null; presenceDb: FilterParamRange; airDb: FilterParamRange; bassDb: FilterParamRange; /** Optional mud cut around ~350 Hz (negative gain). */ mudCutDb?: FilterParamRange; compressThresholdDb: FilterParamRange; compressRatio: FilterParamRange; /** Primary denoise amount ranges, in dB of reduction (single pass only). */ denoiseNr: FilterParamRange; /** * Where to put the denoise threshold *relative to the measured noise floor*, * in dB. Negative keeps the threshold under the floor, which is the safe side: * a threshold above the real floor subtracts quiet musical detail instead of * noise. An absolute dBFS value cannot work here — the same recording at a * different gain would be processed completely differently. */ denoiseNfOffsetDb: FilterParamRange; adeclickWindow: FilterParamRange; adeclickOverlap: FilterParamRange; adeclipThreshold: FilterParamRange; highpassHz: FilterParamRange; lowpassHz: FilterParamRange; } export declare const PRESETS: Record; export declare function getPreset(name: string): PresetDefinition; /** Interpolate within a preset range using strength 0–100. */ export declare function interpolateRange(range: FilterParamRange, strength: number): number;