/** * Voice feature entry point: resolve which TTS engine a bot should use * (per-bot override → global config), report whether voice is configured * (gates the "🔊 语音总结" button), and synthesize text → a ready-to-send * ogg/opus file. * * Engine is pluggable behind a tiny contract (text → PCM): `sami` (in-tree * JSON-over-WS, internal) and `openai` (OpenAI-compatible HTTP, open-source * default). Neither pulls a heavyweight dependency into the package. */ import { type OpusResult, type Pcm } from './audio.js'; import { type VoiceProviderEffectOptions } from './sami.js'; import type { VoiceConfig } from './types.js'; export type { VoiceConfig, VoiceEngine } from './types.js'; /** Default SAMI voice — 灿灿 (bigtts), the product-chosen default. */ export declare const DEFAULT_SAMI_SPEAKER = "zh_female_cancan_mars_bigtts"; /** Default OpenAI-compatible voice. */ export declare const DEFAULT_OPENAI_SPEAKER = "alloy"; /** Pure evaluation: per-bot `voice` merged over global `voice`, validated for * usable creds. Exported for testing the button-gating logic without disk. */ export declare function evaluateVoiceConfig(global?: VoiceConfig, perBot?: VoiceConfig): VoiceConfig | null; /** Resolve effective voice config for a bot: per-bot `voice` merged over the * global `voice` block. Returns null when nothing usable is configured. */ export declare function resolveVoiceConfig(larkAppId?: string): VoiceConfig | null; /** Cheap predicate for conditionally rendering the voice button. */ export declare function isVoiceConfigured(larkAppId?: string): boolean; /** * Synthesize `text` into raw signed-16 PCM. Realtime VC voice uses this * intermediate directly; IM voice bubbles encode it to ogg/opus below. */ export declare function synthesizeVoicePcmForMessage(larkAppId: string | undefined, text: string, effects?: VoiceProviderEffectOptions): Promise; /** * Synthesize `text` into an ogg/opus file for a Feishu voice bubble. * Caller owns the returned temp dir and must rm -rf it after sending. * Throws when voice isn't configured for this bot or synthesis fails. */ export declare function synthesizeVoiceOpus(larkAppId: string | undefined, text: string, effects?: VoiceProviderEffectOptions): Promise; //# sourceMappingURL=index.d.ts.map