/**
 * Speech.ts — 浏览器端 TTS/STT 助手（TypeScript 完整实现）
 *
 * 提供三大功能：
 * 1. Keepwork TTS 播放（playKeepworkAudio）—— 百度 TTS，按年龄/性别自动选音色
 * 2. Volcano TTS 播放（playSynthesizedAudio）—— 火山 TTS，支持多种音色
 * 3. 麦克风录音 + 转写（speechToText）—— MediaRecorder + 服务端 STT
 */
import AudioEngine from './AudioEngine';
/** TTS 失败回退模式 */
export type FallbackMode = 'system' | 'silent' | 'retry';
/** 年龄性别音色配置 */
interface VoiceConfig {
    child: {
        male: number;
        female: number;
    };
    teen: {
        male: number;
        female: number;
    };
    adult: {
        male: number;
        female: number;
    };
    senior: {
        male: number;
        female: number;
    };
}
/** Keepwork TTS 请求选项 */
export interface PlayKeepworkAudioOptions {
    /** 发音人 ID（数字或字符串，内部统一转换） */
    per?: string | number;
    spd?: number;
    pit?: number;
    vol?: number;
    age?: number;
    gender?: 'male' | 'female';
    key?: string;
    useCache?: boolean;
    fallbackMode?: FallbackMode;
    onLoaded?: () => void;
    onEnded?: () => void;
    onError?: (error: unknown) => void;
    [key: string]: unknown;
}
/** Volcano TTS 选项 */
export interface PlaySynthesizedAudioOptions {
    voiceType?: string;
    encoding?: string;
    speedRatio?: number;
    loudnessRatio?: number;
    explicitLanguage?: string;
    fallbackMode?: FallbackMode;
    onLoaded?: () => void;
    onEnded?: () => void;
    onError?: (error: unknown) => void;
    [key: string]: unknown;
}
/** speechToText 配置 */
export interface SpeechToTextOptions {
    maxDuration?: number;
    sampleRate?: number;
    format?: string;
    onStart?: () => void;
    onStop?: () => void;
    onError?: (error: Error) => void;
    onResult?: (result: unknown) => void;
    [key: string]: unknown;
}
/** speechToText 返回的录音控制器 */
export interface SpeechToTextRecorder {
    start: () => void;
    stop: () => void;
    getState: () => string;
    isRecording: () => boolean;
}
/** TTS 服务配置 */
interface TTSServiceConfig {
    url: string;
    voiceType: string;
    encoding: string;
    speedRatio: number;
    loudnessRatio: number;
    explicitLanguage: string;
}
/** 浏览器兼容性检测结果 */
export interface BrowserCompatibilityResult {
    isSupported: boolean;
    errors: string[];
    warnings: string[];
    supportedFormats: string[];
}
/**
 * Speech — 浏览器端 TTS/STT 助手。
 *
 * 通常通过 `window.keepwork.speech` 访问共享实例；
 * 也可直接 `new Speech(sdk)` 创建独立实例。
 */
declare class Speech {
    sdk: unknown;
    api: string;
    rate: number;
    volume: number;
    pitch: number;
    ttsService: TTSServiceConfig;
    /**
     * TTS 失败时的全局回退模式（可被单次调用的 options.fallbackMode 覆盖）：
     * - `'system'`（默认）：回退到浏览器原生 speechSynthesis
     * - `'silent'`：静默失败，不播放任何音频
     * - `'retry'`：重试一次远程 TTS，仍失败则静默
     */
    fallbackMode: FallbackMode;
    constructor(sdk: unknown);
    /**
     * 提取主域名（去掉子域名前缀）。
     * localhost / 127.x / 192.168.x 回退到 keepwork.com。
     */
    extractMainDomain(hostname: string): string;
    setRate(rate: number): void;
    setVolume(volume: number): void;
    setPitch(pitch: number): void;
    /**
     * 设置全局 TTS 回退模式。
     * 无效值会被忽略并发出警告。
     */
    setFallbackMode(mode: FallbackMode): void;
    /** 获取共享 AudioEngine 实例（优先 sdk.audioEngine，否则 AudioEngine.getShared()）。 */
    getAudioEngine(): ReturnType<typeof AudioEngine.getShared>;
    /**
     * 恢复共享 AudioEngine 的 AudioContext（绕过浏览器自动播放策略）。
     * 失败时静默忽略。
     */
    resumeSharedAudioEngine(options?: Record<string, unknown>): Promise<unknown> | null;
    /**
     * 将 AudioBuffer 重采样到目标采样率（使用 OfflineAudioContext）。
     * 若浏览器不支持或采样率已匹配则原样返回。
     */
    resampleAudioBuffer(audioBuffer: AudioBuffer, targetSampleRate: number): Promise<AudioBuffer>;
    /**
     * 调用 Keepwork TTS API，返回音频 URL。
     * @param text    - 要转换的文字
     * @param options - 发音人 / 语速 / 音量等参数
     */
    textToAudio(text: string, options?: PlayKeepworkAudioOptions): Promise<{
        data?: string;
        [key: string]: unknown;
    }>;
    /**
     * 获取年龄/性别对应的 Keepwork 发音人 ID 配置表。
     */
    getVoiceConfig(): VoiceConfig;
    /**
     * 根据年龄和性别获取对应的发音人 ID。
     * @param age    - 说话人年龄
     * @param gender - 性别（'male' | 'female'，默认 'female'）
     */
    getVoiceIdByAgeGender(age: number, gender: string): number;
    /**
     * 播放 Keepwork TTS 音频。
     * 若指定了 `age` / `gender` 则自动映射发音人 ID。
     * 支持 AudioEngine 缓存（传入 `useCache: true`）。
     *
     * @param text    - 要朗读的文字
     * @param options - 播放选项（发音人/语速/音量/缓存/回调等）
     */
    playKeepworkAudio(text: string, options?: PlayKeepworkAudioOptions): Promise<unknown>;
    /**
     * 调用火山 TTS API，返回 base64 音频数据。
     */
    synthesizeAudio(text: string, options?: PlaySynthesizedAudioOptions): Promise<{
        data?: {
            audioBase64?: string;
        };
    }>;
    /**
     * 播放火山 TTS 合成音频。
     * 自动处理 base64 → Audio 元素播放，失败时按 fallbackMode 回退。
     *
     * @param text    - 要合成的文字
     * @param options - 音色/语速/编码/回调等
     */
    playSynthesizedAudio(text: string, options?: PlaySynthesizedAudioOptions): Promise<unknown>;
    /**
     * 统一处理 TTS 失败后的回退逻辑。
     * - `silent`：静默 resolve
     * - `retry`：重试一次，失败后 silent
     * - `system`（默认）：使用浏览器 speechSynthesis
     * @private
     */
    _handleFallback(text: string, safeOptions: Record<string, unknown>, safeResolve: (v: unknown) => void, resultData: unknown, retryFn: () => Promise<unknown>): Promise<void>;
    /**
     * 使用浏览器原生 speechSynthesis 朗读文字（TTS 失败时的回退路径）。
     */
    playSystemAudio(text: string, options?: Record<string, unknown>): Promise<void>;
    /**
     * 停止所有音频播放（AudioEngine + speechSynthesis + 所有 audio 元素）。
     */
    stopAllAudio(): void;
    /** 停止所有音频（stopAllAudio 的别名）。 */
    stop(): void;
    /** 播放有道词典发音（英语词汇朗读）。 */
    playYouDaoAudio(text: string): void;
    /**
     * 创建麦克风录音控制器，并返回 start / stop / getState / isRecording 方法。
     * 录音停止后自动调用服务端 STT API 并通过 `options.onResult` 回调结果。
     *
     * @param options - 录音配置（maxDuration / sampleRate / 各种回调）
     * @throws 浏览器不支持 / 非 HTTPS 环境时抛出错误
     */
    speechToText(options?: SpeechToTextOptions): Promise<SpeechToTextRecorder>;
    /** 获取当前浏览器支持的录音 MIME 类型（优先 opus/webm）。 */
    getSupportedMimeType(): string;
    /**
     * 返回当前浏览器支持的录音音频格式简称（如 `webm` / `mp4` / `ogg`），
     * 便于 UI 展示或作为文件扩展名。无法检测时回退为 `webm`。
     */
    getSupportedAudioFormat(): string;
    /**
     * 将音频 Blob 转换为 WAV 格式的 base64 字符串。
     * 内部使用 Web Audio API 解码 + 必要时重采样。
     */
    convertToWavBase64(audioBlob: Blob, sampleRate?: number): Promise<string>;
    /** 将 ArrayBuffer 分块转换为 base64 字符串（避免大缓冲区栈溢出）。 */
    arrayBufferToBase64(buffer: ArrayBuffer): string;
    /** 将 AudioBuffer 编码为 WAV ArrayBuffer（16-bit PCM）。 */
    audioBufferToWav(buffer: AudioBuffer): ArrayBuffer;
    /**
     * 调用服务端 STT API（Keepwork audioEncode2Text）。
     * @param speechBase64 - WAV base64 字符串
     * @param format       - 音频格式（默认 'wav'）
     */
    callSpeechToTextAPI(speechBase64: string, format?: string): Promise<unknown>;
    /**
     * 检查当前浏览器是否支持录音功能。
     * @returns 兼容性检测结果（isSupported / errors / warnings / supportedFormats）
     */
    checkBrowserCompatibility(): BrowserCompatibilityResult;
    /**
     * 一键录音识别（自动启动录音，录音停止后返回识别结果）。
     * @param options - 同 speechToText 选项
     */
    quickSpeechToText(options?: SpeechToTextOptions): Promise<unknown>;
}
export default Speech;
//# sourceMappingURL=Speech.d.ts.map