/**
 * 音频相关工具函数
 */
/**
 * 预设采样率（Hz）
 */
export declare const SAMPLE_RATES: {
    /** 语音识别推荐 */
    readonly SPEECH: 16000;
    /** 标准音质 */
    readonly STANDARD: 22050;
    /** CD音质 */
    readonly CD: 44100;
    /** 高清音质 */
    readonly HD: 48000;
};
/**
 * 预设通道数
 */
export declare const CHANNEL_COUNTS: {
    /** 单声道，适合语音识别 */
    readonly MONO: 1;
    /** 立体声，适合音乐录制 */
    readonly STEREO: 2;
};
/**
 * 预设音频格式
 */
export declare const AUDIO_FORMATS: {
    /** WAV格式，无损音质，文件较大 */
    readonly WAV: "wav";
    /** MP3格式，有损压缩，文件小，普遍支持 */
    readonly MP3: "mp3";
    /** WebM格式，专为网络优化，支持流式传输 */
    readonly WEBM: "webm";
    /** Ogg格式，开放格式，支持流式传输 */
    readonly OGG: "ogg";
};
/**
 * 采样率类型
 */
export type SampleRate = typeof SAMPLE_RATES[keyof typeof SAMPLE_RATES];
/**
 * 通道数类型
 */
export type ChannelCount = typeof CHANNEL_COUNTS[keyof typeof CHANNEL_COUNTS];
/**
 * 音频格式类型
 */
export type AudioFormat = typeof AUDIO_FORMATS[keyof typeof AUDIO_FORMATS];
/**
 * 录音选项接口
 */
export interface RecorderOptions {
    /**
     * 音频格式
     * - WAV: WAV格式，无损音质，文件较大
     * - MP3: MP3格式，有损压缩，文件小，普遍支持
     * - WEBM: WebM格式，专为网络优化，支持流式传输
     * - OGG: Ogg格式，开放格式，支持流式传输
     */
    format?: AudioFormat;
    /**
     * 采样率 (Hz)
     * - SPEECH: 16000Hz（语音识别推荐）
     * - STANDARD: 22050Hz（标准音质）
     * - CD: 44100Hz（CD音质）
     * - HD: 48000Hz（高清音质）
     */
    sampleRate?: SampleRate;
    /**
     * 音频通道数
     * - MONO: 1（单声道，适合语音识别）
     * - STEREO: 2（立体声，适合音乐录制）
     */
    channelCount?: ChannelCount;
    /** 输出音频比特率 (kbps) */
    bitRate?: number;
    /** 是否启用回声消除 */
    echoCancellation?: boolean;
    /** 是否启用噪音抑制 */
    noiseSuppression?: boolean;
    /** 是否自动增益 */
    autoGainControl?: boolean;
    /** 是否使用流式录音模式 */
    isStreaming?: boolean;
    /** 数据块大小（毫秒），控制流式数据回调频率 */
    timeslice?: number;
    /** 流式数据回调，每当有新的音频数据块可用时调用 */
    onDataAvailable?: (blob: Blob) => void;
    /** 音频处理回调，接收原始音频分析数据，可用于音频可视化 */
    onAudioProcess?: (audioData: Uint8Array) => void;
}
/**
 * 录音状态
 */
export type RecorderState = 'inactive' | 'recording' | 'paused';
/**
 * 录音器对象接口
 */
export interface Recorder {
    /** 开始录音 */
    start(): Promise<void>;
    /** 暂停录音 */
    pause(): void;
    /** 恢复录音 */
    resume(): void;
    /** 停止录音并获取录音数据 */
    stop(): Promise<Blob>;
    /** 取消录音 */
    cancel(): void;
    /** 获取录音状态 */
    getState(): RecorderState;
    /** 获取录音时长（秒） */
    getDuration(): number;
    /** 获取实时音频分析数据 */
    getAudioData(): Uint8Array;
    /** 获取当前已采集的音频数据（不停止录音） */
    getCurrentAudio(): Promise<Blob>;
    /** 释放资源 */
    release(): void;
}
/**
 * 创建录音器
 * @param options 录音选项
 * @returns 录音器对象
 * @example
 * ```typescript
 * // 创建录音器
 * const recorder = await createRecorder({
 *   format: 'wav',
 *   sampleRate: 44100,
 *   channelCount: 1,
 *   // 流式获取数据
 *   timeslice: 500, // 每500毫秒获取一次数据
 *   onDataAvailable: (blob) => {
 *     // 处理音频数据块
 *     console.log('新的音频数据块大小:', blob.size);
 *   },
 *   onAudioProcess: (audioData) => {
 *     // 处理音频分析数据，用于可视化等
 *     console.log('音频数据:', audioData);
 *   }
 * });
 *
 * // 开始录音
 * await recorder.start();
 *
 * // 停止录音并获取数据
 * const audioBlob = await recorder.stop();
 *
 * // 创建音频URL
 * const audioUrl = URL.createObjectURL(audioBlob);
 *
 * // 释放资源
 * recorder.release();
 * ```
 */
export declare function createRecorder(options?: RecorderOptions): Promise<Recorder>;
/**
 * 将音频Blob转换为AudioBuffer
 * @param blob 音频Blob对象
 * @param context 音频上下文
 * @returns AudioBuffer对象
 */
export declare function blobToAudioBuffer(blob: Blob, context?: AudioContext): Promise<AudioBuffer>;
/**
 * 播放音频Blob
 * @param blob 音频Blob对象
 * @returns 音频元素
 */
export declare function playAudioBlob(blob: Blob): HTMLAudioElement;
/**
 * 将Base64音频数据转换为Blob
 * @param base64 Base64音频数据
 * @param mimeType MIME类型
 * @returns 音频Blob对象
 */
export declare function base64ToAudioBlob(base64: string, mimeType: string): Blob;
/**
 * 将音频Blob转换为Base64
 * @param blob 音频Blob对象
 * @returns Promise<string> Base64音频数据
 */
export declare function audioBlobToBase64(blob: Blob): Promise<string>;
/**
 * 将流式音频响应转换为可读的音频 Blob
 * @param stream 音频流数据（Response 对象或 ReadableStream）
 * @param mimeType 音频 MIME 类型，例如 'audio/mp3' 或 'audio/wav'，如果不提供将尝试自动检测
 * @returns 包含音频数据的 Blob 对象的 Promise
 */
export declare function streamToAudioBlob(stream: Response | ReadableStream<Uint8Array>, mimeType?: string): Promise<Blob>;
/**
 * 从流式音频响应创建并播放音频
 * @param stream 音频流数据（Response 对象或 ReadableStream）
 * @param mimeType 音频 MIME 类型
 * @returns 音频元素
 */
export declare function playAudioStream(stream: Response | ReadableStream<Uint8Array>, mimeType?: string): Promise<HTMLAudioElement>;
/**
 * 流式音频播放器接口
 */
export interface StreamingAudioPlayer {
    /** 开始播放 */
    play(): void;
    /** 暂停播放 */
    pause(): void;
    /** 恢复播放 */
    resume(): void;
    /** 停止播放并释放资源 */
    stop(): void;
    /** 设置音量 (0-1) */
    setVolume(volume: number): void;
    /** 获取当前播放状态 */
    getState(): 'playing' | 'paused' | 'stopped';
    /** 获取总持续时间（秒） */
    getDuration(): number;
    /** 获取当前播放位置（秒） */
    getCurrentTime(): number;
    /** 跳转到指定位置（秒） */
    seek(time: number): void;
    /** 获取当前缓冲进度（0-1） */
    getBufferedProgress(): number;
    /** 设置播放结束回调 */
    onEnded: (() => void) | null;
    /** 设置缓冲进度更新回调 */
    onBufferUpdate: ((progress: number) => void) | null;
    /** 设置播放时间更新回调 */
    onTimeUpdate: ((currentTime: number, duration: number) => void) | null;
    /** 设置播放错误回调 */
    onError: ((error: Error) => void) | null;
}
/**
 * 流式音频播放器选项
 */
export interface StreamingAudioPlayerOptions {
    /** 是否自动播放 */
    autoPlay?: boolean;
    /** 初始音量 (0-1) */
    volume?: number;
    /** 是否循环播放 */
    loop?: boolean;
    /** 缓冲区大小（秒） */
    bufferSize?: number;
    /** 是否使用 MediaSource 播放 (默认为 true，如果浏览器不支持则使用 Audio) */
    useMediaSource?: boolean;
    /** 是否在有足够数据时立即播放 (autoPlay 为 true 时有效) */
    playWhenEnoughData?: boolean;
    /** 每次缓冲更新触发的间隔（毫秒） */
    bufferUpdateInterval?: number;
}
/**
 * 创建流式音频播放器，支持边下载边播放
 * @param stream 音频流数据（Response 对象或 ReadableStream）
 * @param mimeType 音频 MIME 类型，例如 'audio/mp3' 或 'audio/wav'
 * @param options 播放器选项
 * @returns 流式音频播放器对象的 Promise
 */
export declare function createStreamingAudioPlayer(stream: Response | ReadableStream<Uint8Array>, mimeType?: string, options?: StreamingAudioPlayerOptions): Promise<StreamingAudioPlayer>;
