UNPKG

js-tts-wrapper

Version:

A JavaScript/TypeScript library that provides a unified API for working with multiple cloud-based Text-to-Speech (TTS) services

71 lines (70 loc) 2.87 kB
import { AbstractTTSClient } from "../core/abstract-tts.js"; import type { SpeakOptions, TTSCredentials, UnifiedVoice } from "../types.js"; export type GeminiTTSModel = "gemini-3.1-flash-tts-preview" | "gemini-2.5-flash-preview-tts"; export type GeminiTTSVoice = "Zephyr" | "Puck" | "Charon" | "Kore" | "Fenrir" | "Leda" | "Orus" | "Aoede" | "Callirrhoe" | "Autonoe" | "Enceladus" | "Iapetus" | "Umbriel" | "Algieba" | "Despina" | "Erinome" | "Algenib" | "Rasalgethi" | "Laomedeia" | "Achernar" | "Alnilam" | "Schedar" | "Gacrux" | "Pulcherrima" | "Achird" | "Zubenelgenubi" | "Vindemiatrix" | "Sadachbia" | "Sadaltager" | "Sulafat"; export interface GeminiTTSOptions extends SpeakOptions { model?: GeminiTTSModel | string; voice?: GeminiTTSVoice | string; format?: "wav" | "pcm" | "mp3"; providerOptions?: Record<string, unknown>; } export interface GeminiTTSCredentials extends TTSCredentials { apiKey?: string; baseURL?: string; model?: GeminiTTSModel | string; voice?: GeminiTTSVoice | string; properties?: Record<string, unknown> | string; propertiesJson?: string; } type GeminiVoiceGender = "Male" | "Female"; type GeminiVoiceInfo = { id: GeminiTTSVoice; name: GeminiTTSVoice; style: string; gender: GeminiVoiceGender; }; /** * Gemini Flash TTS client. * * Uses the Gemini generateContent REST API directly. Gemini TTS returns PCM audio; * this client wraps it as WAV by default so normal playback and conversion paths work. */ export declare class GeminiTTSClient extends AbstractTTSClient { private apiKey; private baseUrl; private model; static readonly DEFAULT_MODEL: GeminiTTSModel; static readonly DEFAULT_VOICE: GeminiTTSVoice; static readonly VOICES: GeminiVoiceInfo[]; constructor(credentials?: GeminiTTSCredentials); private getEnv; private applyCredentialProperties; private prepareText; setModel(model: string): void; setVoice(voiceId: string): void; getProperty(property: string): any; setProperty(property: string, value: any): void; protected getRequiredCredentials(): string[]; checkCredentials(): Promise<boolean>; checkCredentialsDetailed(): Promise<{ success: boolean; error?: string; voiceCount?: number; }>; protected _getVoices(): Promise<any[]>; protected _mapVoicesToUnified(rawVoices: any[]): Promise<UnifiedVoice[]>; synthToBytes(text: string, options?: GeminiTTSOptions): Promise<Uint8Array>; synthToBytestream(text: string, options?: GeminiTTSOptions): Promise<{ audioStream: ReadableStream<Uint8Array>; wordBoundaries: Array<{ text: string; offset: number; duration: number; }>; }>; private extractAudioBytes; private base64ToBytes; private pcm16ToWav; private writeAscii; } export {};