export interface VocalizerPlayer {
    start(sampleRate: number): void;
    write(pcm: Float32Array): void;
    setGain(gain: number): void;
    end(): Promise<void>;
    stop(): void;
}
export declare class Vocalizer {
    #private;
    constructor(createPlayer?: () => VocalizerPlayer);
    /**
     * Stream a delta of assistant text into the engine. No-op when vocalization
     * is disabled. The engine buffers the running text and emits audio for each
     * complete sentence; the trailing partial is flushed by {@link flush}.
     */
    pushDelta(text: string): void;
    /**
     * Close the current input stream (call at message/turn end). The engine
     * flushes its trailing partial as a final chunk; the player keeps draining
     * queued audio until it completes.
     */
    flush(): void;
    /**
     * Speak a complete piece of text in one shot (ask questions, yield-mode final
     * message): stream it in and immediately close the input. No-op when disabled.
     */
    speak(text: string): void;
    /**
     * Interrupt and drop the current session, killing in-flight playback and
     * synthesis (new turn / user message / Esc interrupt). Audio stops at once.
     */
    clear(): void;
    /** Lower the volume while the user is speaking (push-to-talk), so speech doesn't drown them out. */
    duck(): void;
    /** Restore full volume once the user stops speaking. */
    unduck(): void;
    /** Resolve once the playback chain has drained (tests / shutdown). */
    idle(): Promise<void>;
}
/** Process-level vocalizer shared by the event controller and the ask tool. */
export declare const vocalizer: Vocalizer;
