/**
 * useAudio
 * @description Enhanced audio hook with comprehensive controls and state management
 * @see {@link https://rooks.vercel.app/docs/hooks/useAudio}
 */
import { RefCallback } from "react";
type UseAudioOptions = {
    autoPlay?: boolean;
    isMuted?: boolean;
    volume?: number;
    playbackRate?: number;
    loop?: boolean;
    preload?: "none" | "metadata" | "auto";
};
type UseAudioCallbacks = {
    onPlay?: () => void;
    onPause?: () => void;
    onEnded?: () => void;
    onMute?: () => void;
    onUnmute?: () => void;
    onLoadedMetadata?: () => void;
    onTimeUpdate?: (currentTime: number) => void;
    onDurationChange?: (duration: number) => void;
    onVolumeChange?: (volume: number) => void;
    onRateChange?: (rate: number) => void;
    onError?: (error: string) => void;
    onLoadStart?: () => void;
    onCanPlay?: () => void;
    onWaiting?: () => void;
};
type AudioState = {
    isPlaying: boolean;
    isMuted: boolean;
    volume: number;
    currentTime: number;
    duration: number;
    playbackRate: number;
    isLoading: boolean;
    isBuffering: boolean;
    loop: boolean;
    hasError: boolean;
    error?: string;
};
type AudioControls = {
    play: () => void;
    pause: () => void;
    togglePlay: () => void;
    mute: () => void;
    unmute: () => void;
    toggleMute: () => void;
    setVolume: (volume: number) => void;
    setCurrentTime: (time: number) => void;
    setPlaybackRate: (rate: number) => void;
    seek: (seconds: number) => void;
    fastForward: (seconds: number) => void;
    rewind: (seconds: number) => void;
    setLoop: (loop: boolean) => void;
};
declare function useAudio(options?: UseAudioOptions, callbacks?: UseAudioCallbacks): [RefCallback<HTMLAudioElement>, AudioState, AudioControls];
export { useAudio };
export type { UseAudioOptions, UseAudioCallbacks, AudioState, AudioControls };
