import { StartRecordingOptions, PCMRecorder } from '@speechmatics/browser-audio-input';
export * from '@speechmatics/browser-audio-input';
import * as react_jsx_runtime from 'react/jsx-runtime';

type AudioDevices = {
    permissionState: 'prompt';
    promptPermissions: () => void;
} | {
    permissionState: 'prompting';
} | {
    permissionState: 'granted';
    deviceList: ReadonlyArray<MediaDeviceInfo>;
} | {
    permissionState: 'denied';
};
declare function useAudioDevices(): AudioDevices;

type UsePCMAudioRecorderReturn = {
    startRecording: (options: Omit<StartRecordingOptions, 'audioContext'>) => Promise<void>;
    stopRecording: PCMRecorder['stopRecording'];
    mute: PCMRecorder['mute'];
    unmute: PCMRecorder['unmute'];
    isMuted: boolean;
    addEventListener: PCMRecorder['addEventListener'];
    removeEventListener: PCMRecorder['removeEventListener'];
    analyser: PCMRecorder['analyser'];
    isRecording: boolean;
};
declare function usePCMAudioRecorder(workletScriptURL: string, audioContext: AudioContext | undefined): UsePCMAudioRecorderReturn;

interface IPCMAudioRecorderContext {
    startRecording: (opts: Omit<StartRecordingOptions, 'audioContext'>) => Promise<void>;
    stopRecording: PCMRecorder['stopRecording'];
    mute: PCMRecorder['mute'];
    unmute: PCMRecorder['unmute'];
    addEventListener: PCMRecorder['addEventListener'];
    removeEventListener: PCMRecorder['removeEventListener'];
    analyser: PCMRecorder['analyser'];
    isRecording: PCMRecorder['isRecording'];
    isMuted: PCMRecorder['isMuted'];
    audioContext?: AudioContext;
}

declare function usePCMAudioRecorderContext(): IPCMAudioRecorderContext;
declare function usePCMAudioListener(cb: (audio: Float32Array) => void): void;

declare function PCMAudioRecorderProvider({ workletScriptURL, children, audioContext, }: {
    workletScriptURL: string;
    children: React.ReactNode;
    audioContext: AudioContext | undefined;
}): react_jsx_runtime.JSX.Element;

export { type AudioDevices, PCMAudioRecorderProvider, useAudioDevices, usePCMAudioListener, usePCMAudioRecorder, usePCMAudioRecorderContext };
