Browsers have come a long way over the years, and we are now able to achieve amazing results using all of the great new technologies often referred to as HTML5. However, generally speaking, audio still sucks. Thankfully, Google decided to create Web Audio API and make all our lives easier. The problem is that only the latest browsers support this new-fangled browser audio, so what are we to do?
We were presented with this very question while developing our new HTML5 game and set out to find a library that provided the functionality we needed, without all of the bloat, while still supporting the majority of browsers. Unfortunately, we didn't find anything that met our needs. So, we decided to create our own library and open source it. This library works great for games, but it can work just as well for any other audio-related web app.
Most basic, play an MP3/OGG:
var sound = new Howl({
urls: ['sound.mp3', 'sound.ogg']
}).play();
More playback options:
var sound = new Howl({
urls: ['sound.mp3', 'sound.ogg', 'sound.wav'],
autoplay: true,
loop: true,
volume: 0.5,
onend: function() {
alert('Finished!');
}
});
Define and play a sound sprite:
var sound = new Howl({
urls: ['sounds.mp3', 'sounds.ogg'],
sprite: {
blast: [0, 2000],
laser: [3000, 700],
winner: [5000, 9000]
}
});
// shoot the laser!
sound.play('laser');
Boolean
(true
by default) Set to true
to automatically start playback when sound is loaded.Boolean
(false
by default) Set to true
to force HTML5 Audio. This should be used for large audio files so that you don't have to wait for the full file to be downloaded and decoded before playing.String
(null
by default) howler.js automatically detects your file format from the URL, but you may also specify a format in situations where URL extraction won't work.Boolean
(false
by default) Set to true
to automatically loop the sound forever.Object
({}
by default) Define a sound sprite for the sound. The offset and duration are defined in milliseconds.// Sound sprite definition format
{
key: [offset, duration]
}
Number
(1.0
by default) The volume of the specific track, from 0.0
to 1.0
.Array
([]
by default) The source URLs to the track(s) to be loaded for the sound. These should be in order of preference, howler.js will automatically load the first one that is compatible with the current browser.Function
(function(){}
by default) Fire when the sound finishes playing (if it is looping, it'll fire at the end of each loop).Function
(function(){}
by default) Fires when the sound is loaded.Function
(function(){}
by default) Fires when the sound fails to load.Function
(function(){}
by default) Fires when the sound has been paused.Function
(function(){}
by default) Fires when the sound begins playing.String
(optional) Plays from the defined sprite key.pos
of playback.Number
(optional) The play instance ID.pos
to 0
.Number
(optional) The play instance ID.Number
(optional) The play instance ID.Number
(optional) The play instance ID.Number
Volume to fade to (0.0
to 1.0
).Number
Time in milliseconds to fade.Function
(optional) Fires when fade is complete.Number
Volume to fade to (0.0
to 1.0
).Number
Time in milliseconds to fade.Function
(optional) Fires when fade is complete.Number
(optional) The play instance ID.Boolean
(optional) To loop or not to loop, that is the question.Number
(optional) The position to move current playback to.Number
(optional) The play instance ID.Object
(optional) See above for sound sprite definition.x
position to affect the left/right ear panning. Setting the value higher than 1.0
will begin to decrease the volume of the sound as it moves further away.Number
The x-position of the sound.Number
The y-position of the sound.Number
The z-position of the sound.Number
(optional) The play instance ID.Number
(optional) Volume from 0.0
to 1.0
.Number
(optional) The play instance ID.Array
(optional) Changes the source files for this Howl
object.String
Name of event to fire/set.Function
(optional) Define function to fire on event.String
Name of event.Function
(optional) The listener to remove.The following methods are used to modify all sounds globally, and are called from the Howler
object.
Number
(optional) Volume from 0.0
to 1.0
.