import type { IAudioGraphPlugin } from "./types"; /** * Упорядоченная цепочка аудиоплагинов между источником и назначением. * * Цепочка имеет фиксированные input и output GainNodes. Плагины * вставляются между ними. При добавлении или удалении плагинов * пересобирается только внутреннее соединение * input → плагины → output — источники, подключённые ко входу, * не затрагиваются. * * source → [input] → plugin₁ → plugin₂ → … → [output] → destination */ export declare class AudioPluginChain { private readonly _inputNode; private readonly _outputNode; private _plugins; private _destination; private readonly _taps; constructor(ctx: AudioContext); /** Узел, к которому подключаются источники. */ get input(): AudioNode; /** Текущие плагины в порядке цепочки. */ get plugins(): readonly IAudioGraphPlugin[]; /** Подключает выход цепочки к узлу назначения. */ connectTo(destination: AudioNode): void; /** Паразитное подключение к выходу цепочки (например, для AnalyserNode). Сохраняется при пересборке. */ addTap(node: AudioNode): void; hasPlugin(id: string): boolean; addPlugin(plugin: IAudioGraphPlugin): void; removePlugin(id: string): void; /** * Разрушает и пересобирает внутреннее соединение: * input → plugin₁ → … → pluginₙ → output → destination * * Отключает только outputNode каждого плагина (не inputNode), чтобы * сохранить внутренние соединения внутри плагинов, имеющих несколько * внутренних узлов (например, последовательность BiquadFilterNodes * в EqualizerPlugin). */ private rebuild; }