import type { MicrophoneBufferType } from "../types/Microphone.js"; export interface CreateMicrophoneBufferParams { audioContext: AudioContext; micStream: MediaStream | undefined; rnnoiseNode: AudioWorkletNode | null; /** * Gate running on the audio thread. When null the pipeline falls back to the GainNode * driven from the main thread, which cannot gate while the window is hidden. */ noiseGateNode: AudioWorkletNode | null; eSportsModeEnabled: boolean; autoGainEnabled: boolean; compressorEnabled: boolean; /** Nothing would change the voice: no processing, no gate, volume at 100%. Sends the raw track. */ direct?: boolean; } /** Whether the voice goes out. Writes the mute gain, and the raw track when that is what's sent. */ export declare function setSending(buffer: MicrophoneBufferType, audioContext: AudioContext, on: boolean): void; export declare function createMicrophoneBuffer({ audioContext, micStream, rnnoiseNode, noiseGateNode, eSportsModeEnabled, autoGainEnabled, compressorEnabled, direct, }: CreateMicrophoneBufferParams): MicrophoneBufferType; export interface PipelineControlParams { microphoneBuffer: MicrophoneBufferType; audioContext: AudioContext | undefined; micStream: MediaStream | undefined; micVolume: number; isMuted: boolean; noiseGate: number; noiseGateRelease: number; loopbackEnabled: boolean; inputMode: "voice_activity" | "push_to_talk"; eSportsModeEnabled: boolean; autoGainEnabled: boolean; autoGainTargetDb: number; compressorAmount: number; } export declare function usePipelineControls({ microphoneBuffer, audioContext, micStream, micVolume, isMuted, noiseGate, noiseGateRelease, loopbackEnabled, inputMode, eSportsModeEnabled, autoGainEnabled, autoGainTargetDb, compressorAmount, }: PipelineControlParams): { getVisualizerData: () => Uint8Array | null; };