/** * The microphone effects, sample by sample with no lookahead, for the own voice transport (GRYT-1819). * No imports and no Web Audio, so an AudioWorklet can run it as it is. Same settings as the graph's. */ export interface VoiceEffectSettings { /** The volume slider, 0–200 %, 100 = unchanged. */ volume: number; /** The gate slider, 0–100 on the meter's scale. 0 means no gate. */ gateThreshold: number; gateReleaseMs: number; /** Level smoothing, as AnalyserNode.smoothingTimeConstant: 0.8, or 0.3 in eSports. */ gateSmoothing: number; autoGain: boolean; autoGainTargetDb: number; compressor: boolean; /** The compressor slider, 0–100. */ compressorAmount: number; /** Whether the soft limiter runs. The graph runs it whenever any processing does. */ limiter: boolean; } export declare class VoiceEffects { private settings; private readonly sampleRate; private level; private gateGain; private gateOpen; private holdSamples; private compEnv; private agcTarget; private agcGain; private agcSum; private agcPeak; private agcCount; constructor(sampleRate: number, settings: VoiceEffectSettings); set(settings: VoiceEffectSettings): void; /** The gate's smoothed level, 0–100, the number the gate slider is compared with. */ get meter(): number; get open(): boolean; /** In place. Every output sample depends only on samples up to it. With `right`, both sides get one gain. */ process(block: Float32Array, right?: Float32Array): void; }