type OnVolumeChange = (volume: number) => void;
type OnDataAvailable = (data: Blob) => void | undefined;
interface SilenceAwareRecorderOptions {
    deviceId?: string;
    minDecibels?: number;
    onDataAvailable?: OnDataAvailable;
    onVolumeChange?: OnVolumeChange;
    setDeviceId?: (deviceId: string) => void;
    silenceDetectionEnabled?: boolean;
    silenceDuration?: number;
    silentThreshold?: number;
    stopRecorderOnSilence?: boolean;
    timeSlice?: number;
}
declare class SilenceAwareRecorder {
    private readonly silenceDetectionEnabled;
    private readonly timeSlice;
    private audioContext;
    private mediaStreamSource;
    private analyser;
    private mediaRecorder;
    private silenceTimeout;
    private readonly silenceThreshold;
    private readonly silenceDuration;
    private readonly minDecibels;
    private readonly onVolumeChange?;
    private readonly onDataAvailable?;
    private isSilence;
    private hasSoundStarted;
    deviceId: string | null;
    isRecording: boolean;
    private readonly stopRecorderOnSilence;
    private animationFrameId;
    constructor({ onVolumeChange, onDataAvailable, silenceDuration, silentThreshold, minDecibels, deviceId, timeSlice, silenceDetectionEnabled, stopRecorderOnSilence, }: SilenceAwareRecorderOptions);
    startRecording(): Promise<void>;
    private getAudioStream;
    private setupAudioContext;
    private setupMediaRecorder;
    getAvailableDevices(): Promise<MediaDeviceInfo[]>;
    setDevice(deviceId: string): void;
    stopRecording(): void;
    private cleanUp;
    private checkForSilence;
    private computeVolume;
}

export { SilenceAwareRecorder as S, type SilenceAwareRecorderOptions as a };
