import { AudioManager } from './AudioManager'; /** * Typing sound configuration */ export interface TypingSoundConfig { /** Enable typing sounds (default: true) */ enabled: boolean; /** Volume multiplier (0.0 to 1.0, default: 0.3) */ volume: number; /** Typing sound URL (default: assets.vowel.to/typing-sound.pcm) */ typingSoundUrl: string; /** Click sound URL (default: assets.vowel.to/mouse-click-sound.pcm) */ clickSoundUrl?: string; /** Minimum segment duration in ms (default: 200) */ minSegmentDurationMs: number; /** Maximum segment duration in ms (default: 800) */ maxSegmentDurationMs: number; /** Minimum pause duration in ms (default: 300) */ minPauseDurationMs: number; /** Maximum pause duration in ms (default: 1500) */ maxPauseDurationMs: number; /** Probability of click sound vs typing (0.0 to 1.0, default: 0.15) */ clickSoundProbability: number; } /** * Typing Sound Manager class * Manages client-side typing/clicking filler sounds during AI thinking */ export declare class TypingSoundManager { private config; private audioManager; private typingSoundData; private clickSoundData; private isPlaying; private activeTimeout; private isInitialized; private initializationPromise; private typingSoundDurationMs; private clickSoundDurationMs; /** * Constructor * @param config - Typing sound configuration * @param audioManager - Audio manager instance for playback */ constructor(config: Partial, audioManager: AudioManager); /** * Initialize and load sound files from CDN * This is called lazily on first use */ initialize(): Promise; /** * Internal initialization implementation */ private _doInitialize; /** * Load sound file from CDN * @param url - CDN URL for sound file * @returns Promise resolving to audio data as Uint8Array */ private loadSoundFromCDN; /** * Start playing typing sounds * Automatically initializes if not already done */ start(): Promise; /** * Stop playing typing sounds immediately */ stop(): void; /** * Set volume (0.0 to 1.0) * @param volume - Volume level */ setVolume(volume: number): void; /** * Play a random typing/clicking segment */ private playRandomSegment; /** * Apply fade-in and fade-out to audio data to prevent clicks/pops * @param data - Audio data (PCM16) * @param fadeMs - Fade duration in milliseconds * @returns Processed audio data with fade applied */ private applyFadeInOut; /** * Generate random number between min and max (inclusive) */ private randomBetween; /** * Cleanup resources */ cleanup(): void; } //# sourceMappingURL=TypingSoundManager.d.ts.map