🌊 IronTide Demo

High Performance WebAssembly Waveform Renderer

Upload Audio File

No file selected - enter URL below
Compare decoding performance

Interactive Waveform

00:00 / 00:00
Initializing WASM...
Seek: 0s
Zoom:
Navigation Tips:
Click to seek • Zoom in to scroll
Middle-click + drag to pan when zoomed
Two-finger pinch to zoom on touch devices
Three-finger swipe to pan when zoomed
Flick/swipe quickly for momentum scrolling ✨

Usage Example

import { initIrontide, Waveform } from 'irontide';

// Initialize the WASM module
await initIrontide();

// Create waveform instance
const waveform = new Waveform({
    container: '#waveform',
    src: 'audio.mp3',
    waveColor: '#464340',
    progressColor: '#e1b728',
    height: 100,
    decoder: 'wasm',  // 'wasm' (default) or 'web'
    interact: true,
    momentum: true,  // Enable inertial scrolling (default)
    onLoading: (progress, stage) => {
        console.log(`Loading: ${progress}% (${stage})`);
    },
    onReady: (wf) => console.log('Ready!'),
    onSeek: (time) => console.log('Seeked to:', time),
});

// Control playback position
waveform.setCurrentTime(30);  // 30 seconds

// Zoom in/out
waveform.zoom(200);  // 200 pixels per second

// When zoomed in, navigate using:
// - Middle-click and drag
// - Two-finger swipe on touch
// - Mouse wheel / trackpad scroll