UNPKG

waveform-renderer

Version:

High-performance audio waveform visualization library for the web. Create customizable, interactive waveform renderers with TypeScript support and zero dependencies.

39 lines (32 loc) 1.11 kB
/** * Calculates peaks from an AudioBuffer */ export function getPeaksFromAudioBuffer(audioBuffer: AudioBuffer, numberOfPeaks: number): number[] { const channelData = audioBuffer.getChannelData(0); const peaks: number[] = new Array(numberOfPeaks); const samplesPerPeak = Math.floor(channelData.length / numberOfPeaks); for (let i = 0; i < numberOfPeaks; i++) { const start = i * samplesPerPeak; const end = start + samplesPerPeak; let max = 0; for (let j = start; j < end; j++) { const absolute = Math.abs(channelData[j]); if (absolute > max) max = absolute; } peaks[i] = max; } return normalizePeaks(peaks); } /** * Normalizes an array of peak values to a range of -1 to 1 */ export function normalizePeaks(peaks: number[]): number[] { const maxPeak = Math.max(...peaks.map(Math.abs), 1); return peaks.map(peak => peak / maxPeak); } /** * Ensures progress value is between 0 and 1 */ export function normalizeProgress(progress: number): number { return Math.max(0, Math.min(1, progress)); }