export interface AudioMetadata { trackId: string; name: string; duration: number; sampleRate: number; numberOfChannels: number; totalChunks: number; lastAccessed: number; fileSize: number; url: string; } export interface AudioChunk { id: string; trackId: string; chunkIndex: number; sampleRate: number; length: number; channels: Float32Array[]; } export interface StoredChunk { id: string; trackId: string; chunkIndex: number; sampleRate: number; length: number; channels: string[]; } export interface ProgressCallback { (loaded: number, total: number, canStartPlayback: boolean): void; } export interface InstantChunkConfig { initialChunkSize: number; subsequentChunkSize: number; enableInstantMode: boolean; } /** * iOS Safari-safe audio chunk storage with progressive loading * * Key features: * - Memory-safe chunk sizing to prevent iOS page reloads * - Safari-specific IndexedDB retry logic * - Progressive audio loading for instant playback * - Automatic cleanup and storage management * - Simple obfuscation for privacy */ export declare class AudioChunkStore { private db; private audioContext; private chunkSizeBytes; private initialized; private readonly dbName; private readonly dbVersion; private instantChunkConfig; private readonly obfuscationKey; private readonly maxStorageSize; private readonly maxAge; private readonly minChunksForPlayback; constructor(audioContext: AudioContext, instantConfig?: Partial, obfuscationKey?: string); private obfuscateString; private deobfuscateString; private obfuscateMetadata; private deobfuscateMetadata; private isSafariIOS; private withTimeout; private openDatabase; initialize(): Promise; storeAudio(url: string, trackId: string, name: string, progressCallback?: ProgressCallback): Promise; getAudioBuffer(trackId: string, startChunk?: number, chunkCount?: number): Promise; isStored(trackId: string): Promise; getAvailableChunks(trackId: string): Promise; private audioBufferToChunks; private mergeChunks; private float32ArrayToString; private stringToFloat32Array; private saveMetadata; getMetadata(trackId: string): Promise; private updateLastAccessed; private saveChunk; private getChunk; cleanup(): Promise; private getAllMetadata; removeTrack(trackId: string): Promise; storeAudioForInstantPlayback(url: string, trackId: string, name: string, progressCallback?: ProgressCallback): Promise; private audioBufferToInstantChunks; getFirstChunk(trackId: string): Promise; getProgressiveChunks(trackId: string, startChunk?: number, maxChunks?: number): Promise; configureInstantMode(config: Partial): void; storeAudioStreaming(url: string, trackId: string, name: string, options?: { initialChunkSize?: number; subsequentChunkSize?: number; useRangeRequests?: boolean; progressCallback?: ProgressCallback; }): Promise; private checkRangeSupport; private storeAudioWithRangeRequests; private getFileSize; private audioBufferToSingleChunk; private loadRemainingChunksInBackground; /** * Store assembly chunks from streaming assembler */ storeAssemblyChunks(trackId: string, name: string, assemblyChunks: import('./StreamingAssembler.js').AssemblyChunk[], progressCallback?: ProgressCallback): Promise; /** * Convert an AudioBuffer to a storage chunk */ private audioBufferToStorageChunk; /** * Get first chunk for instant playback (optimized for assembly chunks) */ getFirstChunkBuffer(trackId: string): Promise; getStorageInfo(): Promise<{ totalTracks: number; totalSize: number; oldestTrack: number; newestTrack: number; instantModeEnabled: boolean; chunkSizeConfig: { initialChunkSize: number; subsequentChunkSize: number; }; }>; getInstantPlaybackMetrics(): { initialChunkSize: number; subsequentChunkSize: number; estimatedInitialLoadTime: number; optimalForInstantPlayback: boolean; }; } //# sourceMappingURL=AudioChunkStore.d.ts.map