/** * WaveformData - Framework-agnostic waveform data extraction module * * Provides pure functions for extracting waveform visualization data from * audio buffers. Generates peaks, RMS values, and downsampled data suitable * for any visualization framework or canvas rendering. * * @module WaveformData * @author PlecoXA Audio Analysis */ /** * Waveform data configuration options * @typedef {Object} WaveformOptions * @property {number} [width=800] - Target width in pixels for waveform * @property {number} [height=200] - Target height in pixels for waveform * @property {number} [peaks=null] - Number of peaks to extract (overrides width) * @property {string} [type='peaks'] - Type of data: 'peaks', 'rms', 'samples' * @property {boolean} [normalize=true] - Normalize peaks to [-1, 1] range * @property {number} [channel=0] - Audio channel to analyze (0=left, 1=right, -1=mix) * @property {number} [precision=2] - Decimal precision for output values */ /** * Waveform data result * @typedef {Object} WaveformResult * @property {Float32Array} data - Waveform data array * @property {Float32Array} peaks - Peak values for visualization * @property {number} length - Number of data points * @property {number} sampleRate - Original audio sample rate * @property {number} duration - Audio duration in seconds * @property {Object} metadata - Additional analysis metadata */ /** * Extracts waveform peaks suitable for visualization * * @param {AudioBuffer} audioBuffer - Web Audio API AudioBuffer * @param {WaveformOptions} [options={}] - Extraction options * @returns {WaveformResult} Waveform data for visualization * * @example * ```javascript * import { getWaveformPeaks } from './analysis/WaveformData.ts'; * * const peaks = getWaveformPeaks(audioBuffer, { * width: 1000, * type: 'peaks', * normalize: true * }); * * // Use with canvas * const canvas = document.getElementById('waveform'); * const ctx = canvas.getContext('2d'); * * peaks.data.forEach((peak, i) => { * const x = (i / peaks.length) * canvas.width; * const y = canvas.height / 2; * const height = peak * canvas.height / 2; * ctx.fillRect(x, y - height, 1, height * 2); * }); * ``` */ export declare function getWaveformPeaks(audioBuffer: any, options?: {}): { data: Float32Array; peaks: Float32Array; length: any; sampleRate: any; duration: any; metadata: { samplesPerPeak: number; originalLength: any; method: string; }; }; /** * Extracts stereo waveform data for left and right channels * * @param {AudioBuffer} audioBuffer - Web Audio API AudioBuffer * @param {WaveformOptions} [options={}] - Extraction options * @returns {Object} Stereo waveform data with left and right channels * * @example * ```javascript * import { getStereoWaveformPeaks } from './analysis/WaveformData.ts'; * * const stereo = getStereoWaveformPeaks(audioBuffer, { width: 800 }); * console.log('Left channel:', stereo.left.data); * console.log('Right channel:', stereo.right.data); * ``` */ export declare function getStereoWaveformPeaks(audioBuffer: any, options?: {}): { left: { data: Float32Array; peaks: Float32Array; length: any; sampleRate: any; duration: any; metadata: { samplesPerPeak: number; originalLength: any; method: string; }; }; right: { data: Float32Array; peaks: Float32Array; length: any; sampleRate: any; duration: any; metadata: { samplesPerPeak: number; originalLength: any; method: string; }; }; isMono: boolean; }; /** * Generates time-based waveform data with precise time stamps * * @param {AudioBuffer} audioBuffer - Web Audio API AudioBuffer * @param {Object} [options={}] - Generation options * @returns {Object} Time-indexed waveform data * * @example * ```javascript * import { getTimebasedWaveform } from './analysis/WaveformData.ts'; * * const timeWaveform = getTimebasedWaveform(audioBuffer, { * resolution: 0.01 // 10ms resolution * }); * * timeWaveform.data.forEach((point, i) => { * console.log(`Time: ${point.time}s, Amplitude: ${point.amplitude}`); * }); * ``` */ export declare function getTimebasedWaveform(audioBuffer: any, options?: {}): { data: any[]; resolution: number; duration: any; sampleRate: any; type: string; }; /** * Generates waveform data for a specific time range * * @param {AudioBuffer} audioBuffer - Web Audio API AudioBuffer * @param {number} startTime - Start time in seconds * @param {number} endTime - End time in seconds * @param {WaveformOptions} [options={}] - Extraction options * @returns {WaveformResult} Waveform data for the specified range * * @example * ```javascript * import { getWaveformRange } from './analysis/WaveformData.ts'; * * // Get waveform for seconds 10-20 * const rangeWaveform = getWaveformRange(audioBuffer, 10, 20, { * width: 500, * type: 'rms' * }); * ``` */ export declare function getWaveformRange(audioBuffer: any, startTime: any, endTime: any, options?: {}): { data: Float32Array; peaks: Float32Array; length: any; sampleRate: any; duration: any; metadata: { samplesPerPeak: number; originalLength: any; method: string; }; }; /** * Calculates waveform statistics for analysis * * @param {AudioBuffer} audioBuffer - Web Audio API AudioBuffer * @param {Object} [options={}] - Analysis options * @returns {Object} Statistical analysis of waveform * * @example * ```javascript * import { analyzeWaveform } from './analysis/WaveformData.ts'; * * const stats = analyzeWaveform(audioBuffer); * console.log('Peak amplitude:', stats.peak); * console.log('RMS level:', stats.rms); * console.log('Dynamic range:', stats.dynamicRange); * ``` */ export declare function analyzeWaveform(audioBuffer: any, options?: {}): { peak: number; rms: number; dcOffset: number; dynamicRange: number; crestFactor: number; zeroCrossingRate: number; length: any; duration: any; sampleRate: any; }; export declare const WaveformData: typeof getWaveformPeaks;