/** * WaveformGenerator - Generate waveform visualization data in a Web Worker * * This class provides an easy-to-use API for generating downsampled waveform * data from audio buffers. This is useful for rendering audio waveforms in * visualizations without blocking the main thread. * * @example * ```typescript * const generator = new WaveformGenerator(); * * const waveform = await generator.generate(audioBuffer, { * samples: 1000, * channel: 0, * useRMS: false * }); * * // Use waveform.data for visualization * generator.dispose(); * ``` */ import type { WaveformOptions, WaveformData } from './types'; /** * Configuration options for WaveformGenerator */ export interface WaveformGeneratorConfig { /** * Path or URL to the worker script * @default '/audio-processor.worker.bundle.js' */ workerPath?: string; /** * Maximum time to wait for operations (in milliseconds) * @default 30000 (30 seconds) */ timeout?: number; } /** * WaveformGenerator class for generating waveform data in Web Workers */ export declare class WaveformGenerator { private worker; private pendingRequests; private config; private isReady; private readyPromise; /** * Create a new WaveformGenerator instance * * @param config - Configuration options * * @example * ```typescript * const generator = new WaveformGenerator({ * workerPath: '/workers/audio-processor.worker.bundle.js', * timeout: 60000 // 1 minute * }); * ``` */ constructor(config?: WaveformGeneratorConfig); /** * Initialize the worker */ private initialize; /** * Handle messages from the worker */ private handleWorkerMessage; /** * Send a request to the worker and wait for response */ private sendRequest; /** * Generate waveform visualization data from an audio buffer * * @param audioBuffer - The audio buffer to generate waveform from * @param options - Waveform generation options * @returns Promise that resolves to waveform data * * @throws {Error} If generation fails * * @example * ```typescript * // Generate a 1000-sample waveform from the left channel * const waveform = await generator.generate(audioBuffer, { * samples: 1000, * channel: 0, * useRMS: false * }); * * // Use waveform.data to draw the visualization * for (let i = 0; i < waveform.data.length; i++) { * const amplitude = waveform.data[i]; * // Draw bar at position i with height proportional to amplitude * } * ``` * * @example * ```typescript * // Generate average of all channels with RMS values * const waveform = await generator.generate(audioBuffer, { * samples: 500, * channel: -1, // -1 = average all channels * useRMS: true // Use RMS instead of peak values * }); * ``` */ generate(audioBuffer: AudioBuffer, options?: WaveformOptions): Promise; /** * Generate waveform data for multiple channels separately * * @param audioBuffer - The audio buffer * @param options - Waveform options (channel will be overridden) * @returns Promise that resolves to array of waveform data (one per channel) * * @example * ```typescript * const waveforms = await generator.generateMultiChannel(audioBuffer, { * samples: 1000, * useRMS: false * }); * * // waveforms[0] = left channel * // waveforms[1] = right channel (if stereo) * ``` */ generateMultiChannel(audioBuffer: AudioBuffer, options?: Omit): Promise; /** * Generate a quick preview waveform with fewer samples * * @param audioBuffer - The audio buffer * @param previewSamples - Number of samples (default: 100) * @returns Promise that resolves to waveform data * * @example * ```typescript * // Quick low-res preview for thumbnails * const preview = await generator.generatePreview(audioBuffer, 100); * ``` */ generatePreview(audioBuffer: AudioBuffer, previewSamples?: number): Promise; /** * Generate a high-resolution waveform * * @param audioBuffer - The audio buffer * @param channel - Which channel to use (default: 0) * @returns Promise that resolves to waveform data * * @example * ```typescript * // High-res waveform for detailed visualization * const hires = await generator.generateHighRes(audioBuffer); * ``` */ generateHighRes(audioBuffer: AudioBuffer, channel?: number): Promise; /** * Check if the generator is ready to accept requests * * @returns True if the worker is initialized and ready */ get ready(): boolean; /** * Wait for the generator to be ready * * @returns Promise that resolves when the generator is ready */ waitForReady(): Promise; /** * Dispose and clean up resources * * Call this when you're done using the generator. * After calling dispose(), this instance should not be used again. * * @example * ```typescript * generator.dispose(); * generator = null; * ``` */ dispose(): void; } //# sourceMappingURL=WaveformGenerator.d.ts.map