/** * tts.ts — Text-to-Speech engine for the CareerVivid REPL * * Auth: Uses the CareerVivid API key (cv_live_...) → cliGetInterviewToken * → short-lived Gemini key. No GEMINI_API_KEY env var required. * * Chunking: Long text is split at sentence boundaries and synthesized * sequentially, then played back-to-back for seamless audio. * * Retry: Gemini 3.1 TTS models occasionally return 500 errors; * each chunk is retried up to 3 times with exponential back-off. * * Toggle: /voice on | off * Replay: /speak */ export declare const AVAILABLE_VOICES: readonly ["Zephyr", "Puck", "Charon", "Kore", "Fenrir", "Aoede", "Orbit", "Stellar", "Leda", "Orus", "Autonoe", "Enceladus", "Iapetus", "Umbriel", "Algieba", "Despina", "Erinome", "Sulafat", "Schedar", "Vindemiatrix"]; export declare const AVAILABLE_TTS_MODELS: readonly ["gemini-3.1-flash-tts-preview", "gemini-2.5-flash-preview-tts", "gemini-2.5-pro-preview-tts"]; export declare function isVoiceEnabled(): boolean; export declare function setVoiceEnabled(on: boolean): void; export declare function setLastResponse(text: string): void; export declare function getLastResponse(): string; export declare function getCurrentVoice(): string; export declare function setCurrentVoice(v: string): void; export declare function getCurrentTtsModel(): string; export declare function setCurrentTtsModel(m: string): void; export declare function stopPlayback(): void; /** * Synthesizes `text` via Gemini TTS. * - Cleans markdown * - Splits into sentence-boundary chunks * - Synthesizes each chunk sequentially with retry * - Concatenates all PCM data into one WAV and plays it * * Non-blocking: errors are silently swallowed so the REPL is never disrupted. */ export declare function speakText(text: string, _unusedKey?: string): Promise; //# sourceMappingURL=tts.d.ts.map