wavesurfer.js
Version:
Interactive navigable audio visualization using Web Audio and Canvas
68 lines (55 loc) • 1.92 kB
JavaScript
// Create a WaveSurfer instance
var wavesurfer = Object.create(WaveSurfer);
// Init on DOM ready
document.addEventListener('DOMContentLoaded', function () {
wavesurfer.init({
container: '#waveform',
waveColor: '#428bca',
progressColor: '#31708f',
height: 120,
barWidth: 3
});
});
// Bind controls
document.addEventListener('DOMContentLoaded', function () {
var playPause = document.querySelector('#playPause');
playPause.addEventListener('click', function () {
wavesurfer.playPause();
});
// Toggle play/pause text
wavesurfer.on('play', function () {
document.querySelector('#play').style.display = 'none';
document.querySelector('#pause').style.display = '';
});
wavesurfer.on('pause', function () {
document.querySelector('#play').style.display = '';
document.querySelector('#pause').style.display = 'none';
});
// The playlist links
var links = document.querySelectorAll('#playlist a');
var currentTrack = 0;
// Load a track by index and highlight the corresponding link
var setCurrentSong = function (index) {
links[currentTrack].classList.remove('active');
currentTrack = index;
links[currentTrack].classList.add('active');
wavesurfer.load(links[currentTrack].href);
};
// Load the track on click
Array.prototype.forEach.call(links, function (link, index) {
link.addEventListener('click', function (e) {
e.preventDefault();
setCurrentSong(index);
});
});
// Play on audio load
wavesurfer.on('ready', function () {
wavesurfer.play();
});
// Go to the next track on finish
wavesurfer.on('finish', function () {
setCurrentSong((currentTrack + 1) % links.length);
});
// Load the first track
setCurrentSong(currentTrack);
});