# [wavesurfer.js](https://wavesurfer-js.org) # Read below how to update to version 2! [](https://www.npmjs.com/package/wavesurfer.js)  [](https://gitter.im/katspaugh/wavesurfer.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) Interactive navigable audio visualization using Web Audio and Canvas. [](https://wavesurfer-js.org) See a [tutorial](https://wavesurfer-js.org/docs) and [examples](https://wavesurfer-js.org/examples) on [wavesurfer-js.org](https://wavesurfer-js.org). ## Browser support wavesurfer.js works only in [modern browsers supporting Web Audio](http://caniuse.com/audio-api). It will fallback to Audio Element in other browsers (without graphics). You can also try [wavesurfer.swf](https://github.com/laurentvd/wavesurfer.swf) which is a Flash-based fallback. ## FAQ ### Can the audio start playing before the waveform is drawn? Yes, if you use the `backend: 'MediaElement'` option. See here: https://wavesurfer-js.org/example/audio-element/. The audio will start playing as you press play. A thin line will be displayed until the whole audio file is downloaded and decoded to draw the waveform. ### Can drawing be done as file loads? No. Web Audio needs the whole file to decode it in the browser. You can however load pre-decoded waveform data to draw the waveform immediately. See here: https://wavesurfer-js.org/example/audio-element/ (the "Pre-recoded Peaks" section). ## API in examples Choose a container: ```html
``` Create an instance, passing the container selector and [options](https://wavesurfer-js.org/docs/options.html): ```javascript var wavesurfer = WaveSurfer.create({ container: '#waveform', waveColor: 'violet', progressColor: 'purple' }); ``` Subscribe to some [events](https://wavesurfer-js.org/docs/events.html): ```javascript wavesurfer.on('ready', function () { wavesurfer.play(); }); ``` Load an audio file from a URL: ```javascript wavesurfer.load('example/media/demo.wav'); ``` ## Documentation See the documentation on all available [methods](https://wavesurfer-js.org/docs/methods.html), [options](https://wavesurfer-js.org/docs/options.html) and [events](https://wavesurfer-js.org/docs/events.html) on the [homepage](https://wavesurfer-js.org/docs/). **Note on version 2**: The wavesurfer.js core library and the plugins were refactored to be modular so it can be used with a module bundler. (You can still use wavesurfer without, e.g. with `