export interface TextChunk { id: string; text: string; order: number; pauseAfter: number; // milliseconds emphasis: boolean; metadata: { isLastChunk: boolean; chunkType: 'sentence' | 'paragraph' | 'code' | 'list' | 'quote'; wordCount: number; }; } export interface AudioSegment { id: string; chunk: TextChunk; audioBuffer?: ArrayBuffer; audioUrl?: string; duration?: number; status: 'pending' | 'loading' | 'ready' | 'playing' | 'played' | 'error'; synthesizedAt?: Date; } export interface VoiceSettings { voice: string; speed: number; // 0.5 to 2.0 stability: number; // 0 to 1 similarityBoost: number; // 0 to 1 style?: number; // 0 to 1 useSpeakerBoost?: boolean; } export interface ChunkingOptions { maxSentencesPerChunk: number; respectParagraphs: boolean; detectCodeBlocks: boolean; preserveFormatting: boolean; } export type PlaybackStatus = 'idle' | 'loading' | 'playing' | 'paused' | 'stopped' | 'error'; export interface PlaybackState { status: PlaybackStatus; currentChunk: number; totalChunks: number; currentTime: number; totalTime: number; speed: number; isPlaying: boolean; isPaused: boolean; segments: Array<{ id: string; text: string; status: string; duration?: number; }>; }