import * as ortInstance from "onnxruntime-web";
import { FrameProcessor, FrameProcessorOptions, Message, OrtOptions, SpeechProbabilities } from "./common";
type RealTimeDetectionCallbacks = {
    onFrameProcessed: (data: FrameData) => any;
    onMisfire: () => any;
    onSpeechStart: () => any;
    onSpeechEnd: (audio: Float32Array) => any;
    onFFTProcessed: (fftData: Float32Array) => any;
    fftSize: number;
};
type AudioConstraints = Omit<MediaTrackConstraints, "channelCount" | "echoCancellation" | "autoGainControl" | "noiseSuppression">;
type AssetOptions = {
    workletURL: string;
    modelURL: string;
    modelFetcher: (path: string) => Promise<ArrayBuffer>;
};
type RealTimeDetectionOptionsWithoutStream = {
    additionalAudioConstraints?: AudioConstraints;
    stream: undefined;
} & FrameProcessorOptions & RealTimeDetectionCallbacks & OrtOptions & AssetOptions;
type RealTimeDetectionOptionsWithStream = {
    stream: MediaStream;
} & FrameProcessorOptions & RealTimeDetectionCallbacks & OrtOptions & AssetOptions;
export declare const ort: typeof ortInstance;
export type RealTimeDetectionOptions = RealTimeDetectionOptionsWithStream | RealTimeDetectionOptionsWithoutStream;
type FrameData = {
    probabilities: SpeechProbabilities;
    fftData: Float32Array;
};
export declare const defaultRealTimeDetectionOptions: RealTimeDetectionOptions;
export declare class Detect {
    options: RealTimeDetectionOptions;
    private audioContext;
    private stream;
    private audioNodeDetection;
    private sourceNode;
    analyserNode: AnalyserNode;
    listening: boolean;
    static new(options?: Partial<RealTimeDetectionOptions>): Promise<Detect>;
    private constructor();
    pause: () => void;
    start: () => void;
    destroy: () => void;
}
export declare class AudioNodeDetection {
    ctx: AudioContext;
    options: RealTimeDetectionOptions;
    private frameProcessor;
    private entryNode;
    private analyserNode;
    static new(ctx: AudioContext, options: Partial<RealTimeDetectionOptions> | undefined, analyserNode: AnalyserNode): Promise<AudioNodeDetection>;
    private isProcessing;
    constructor(ctx: AudioContext, options: RealTimeDetectionOptions, frameProcessor: FrameProcessor, entryNode: AudioWorkletNode, analyserNode: AnalyserNode);
    pause: () => void;
    start: () => void;
    receive: (node: AudioNode) => void;
    processFrame: (frame: Float32Array) => Promise<void>;
    handleFrameProcessorEvent: (ev: Partial<{
        probs: SpeechProbabilities;
        msg: Message;
        audio: Float32Array;
    }>) => void;
    private processFFT;
    destroy: () => void;
}
export {};
