import { AbstractTTSClient } from "../core/abstract-tts";
import { SpeakOptions, TTSCredentials, UnifiedVoice } from "../types";
import { WordBoundary } from "../utils/word-timing-estimator";
/**
 * PlayHT TTS Client Credentials
 */
export interface PlayHTTTSCredentials extends TTSCredentials {
    /** PlayHT API Key */
    apiKey?: string;
    /** PlayHT User ID */
    userId?: string;
}
/**
 * Extended options for PlayHT TTS
 */
export interface PlayHTTTSOptions extends SpeakOptions {
    /**
     * Output directory for audio files
     */
    outputDir?: string;
    /**
     * Output file name
     */
    outputFile?: string;
    /**
     * Callback for word boundary events
     */
    onWord?: (wordBoundary: WordBoundary) => void;
    /**
     * Whether to return word boundaries
     */
    returnWordBoundaries?: boolean;
    /**
     * Callback for end of speech event
     */
    onEnd?: () => void;
}
/**
 * PlayHT Voice Engine
 */
export type PlayHTVoiceEngine = "PlayHT1.0" | "PlayHT2.0" | null;
/**
 * PlayHT TTS Client
 *
 * This client uses the PlayHT API to convert text to speech.
 * It supports streaming audio but does not support SSML.
 * Word boundaries are estimated since PlayHT doesn't provide word events.
 */
export declare class PlayHTTTSClient extends AbstractTTSClient {
    private apiKey;
    private userId;
    private voice;
    private voiceEngine;
    private outputFormat;
    private lastWordBoundaries;
    /**
     * Create a new PlayHT TTS Client
     * @param credentials PlayHT API credentials
     */
    constructor(credentials?: PlayHTTTSCredentials);
    /**
     * Check if the credentials are valid
     * @returns Promise resolving to true if credentials are valid, false otherwise
     */
    checkCredentials(): Promise<boolean>;
    /**
     * Fetch voices from the PlayHT API
     * @returns Promise resolving to an array of PlayHT voice objects
     */
    private _fetchVoices;
    /**
     * Get available voices
     * @returns Promise resolving to an array of unified voice objects
     */
    protected _getVoices(): Promise<UnifiedVoice[]>;
    /**
     * Map PlayHT voice objects to unified format
     * @param rawVoices Array of PlayHT voice objects
     * @returns Promise resolving to an array of unified voice objects
     */
    protected _mapVoicesToUnified(rawVoices: any[]): Promise<UnifiedVoice[]>;
    /**
     * Set the voice to use for synthesis
     * @param voiceId Voice ID to use
     */
    setVoice(voiceId: string): void;
    /**
     * Set the voice engine to use for synthesis
     * @param engine Voice engine to use
     */
    setVoiceEngine(engine: PlayHTVoiceEngine): void;
    /**
     * Set the output format
     * @param format Output format (wav, mp3)
     */
    setOutputFormat(format: string): void;
    /**
     * Get a property value
     * @param property Property name
     * @returns Property value
     */
    getProperty(property: string): any;
    /**
     * Set a property value
     * @param property Property name
     * @param value Property value
     */
    setProperty(property: string, value: any): void;
    /**
     * Get the last word boundaries
     * @returns Array of word boundary objects
     */
    getLastWordBoundaries(): WordBoundary[];
    /**
     * Set the last word boundaries
     * @param wordBoundaries Array of word boundary objects
     */
    setLastWordBoundaries(wordBoundaries: WordBoundary[]): void;
    /**
     * Convert text to speech
     * @param text Text to convert to speech
     * @param options TTS options
     * @returns Promise resolving to the path of the generated audio file
     */
    textToSpeech(text: string, options?: PlayHTTTSOptions): Promise<string>;
    /**
     * Convert text to speech with streaming
     * @param text Text to convert to speech
     * @param options TTS options
     * @returns Promise resolving to the path of the generated audio file
     */
    textToSpeechStreaming(text: string, options?: PlayHTTTSOptions): Promise<string>;
    /**
     * Convert SSML to speech (not supported by PlayHT)
     * @param ssml SSML to convert to speech
     * @param options TTS options
     * @returns Promise resolving to the path of the generated audio file
     */
    ssmlToSpeech(_ssml: string, _options?: PlayHTTTSOptions): Promise<string>;
    /**
     * Convert SSML to speech with streaming (not supported by PlayHT)
     * @param ssml SSML to convert to speech
     * @param options TTS options
     * @returns Promise resolving to the path of the generated audio file
     */
    ssmlToSpeechStreaming(_ssml: string, _options?: PlayHTTTSOptions): Promise<string>;
    /**
     * Synthesize text to audio bytes
     * @param text Text to synthesize
     * @param options Synthesis options
     * @returns Promise resolving to audio bytes
     */
    synthToBytes(text: string | string[], _options?: PlayHTTTSOptions): Promise<Uint8Array>;
    /**
     * Synthesize text to audio byte stream
     * @param text Text to synthesize
     * @param options Synthesis options
     * @returns Promise resolving to audio byte stream
     */
    synthToBytestream(text: string, _options?: SpeakOptions): Promise<ReadableStream<Uint8Array>>;
}
