howler.js is an audio library for the modern web. It defaults to Web Audio API and falls back to HTML5 Audio. This makes working with audio in JavaScript easy and reliable across all platforms.
Additional information, live demos and a user showcase are available at howlerjs.com.
Follow on Twitter for howler.js and development-related discussion: @GoldFireStudios.
Tested in the following browsers/versions: * Google Chrome 7.0+ * Internet Explorer 9.0+ * Firefox 4.0+ * Safari 5.1.4+ * Mobile Safari 6.0+ (after user input) * Opera 12.0+ * Microsoft Edge
Several options to get up and running:
git clone https://github.com/goldfire/howler.js.gitnpm install howleryarn add howlerbower install howlercdnjs jsDelivrIn the browser:
<script src="https://github.com/goldfire/howler.js/raw/v2.2.4/path/to/howler.js"></script>
<script>
var sound = new Howl({
src: ['sound.webm', 'sound.mp3']
});
</script>
As a dependency:
import {Howl, Howler} from 'howler';
const {Howl, Howler} = require('howler');
Included distribution files:
howler.core and howler.spatial. It includes all functionality that howler comes with.howler.core to operate as it is simply an add-on to the core.var sound = new Howl({
src: ['sound.mp3']
});
sound.play();
var sound = new Howl({
src: ['stream.mp3'],
html5: true
});
sound.play();
var sound = new Howl({
src: ['sound.webm', 'sound.mp3', 'sound.wav'],
autoplay: true,
loop: true,
volume: 0.5,
onend: function() {
console.log('Finished!');
}
});
var sound = new Howl({
src: ['sounds.webm', 'sounds.mp3'],
sprite: {
blast: [0, 3000],
laser: [4000, 1000],
winner: [6000, 5000]
}
});
// Shoot the laser!
sound.play('laser');
var sound = new Howl({
src: ['sound.webm', 'sound.mp3']
});
// Clear listener after first call.
sound.once('load', function(){
sound.play();
});
// Fires when the sound finishes playing.
sound.on('end', function(){
console.log('Finished!');
});
var sound = new Howl({
src: ['sound.webm', 'sound.mp3']
});
// Play returns a unique Sound ID that can be passed
// into any method on Howl to control that specific sound.
var id1 = sound.play();
var id2 = sound.play();
// Fade out the first sound and speed up the second.
sound.fade(1, 0, 1000, id1);
sound.rate(1.5, id2);
import {Howl, Howler} from 'howler';
// Setup the new Howl.
const sound = new Howl({
src: ['sound.webm', 'sound.mp3']
});
// Play the sound.
sound.play();
// Change global volume.
Howler.volume(0.5);
More in-depth examples (with accompanying live demos) can be found in the examples directory.
Array/String [] requiredThe sources to the track(s) to be loaded for the sound (URLs or base64 data URIs). These should be in order of preference, howler.js will automatically load the first one that is compatible with the current browser. If your files have no extensions, you will need to explicitly specify the extension using the format property.
Number 1.0The volume of the specific track, from 0.0 to 1.0.
Boolean falseSet 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.
Boolean falseSet to true to automatically loop the sound forever.
Boolean|String trueAutomatically begin downloading the audio file when the Howl is defined. If using HTML5 Audio, you can set this to 'metadata' to only preload the file's metadata (to get its duration without download the entire file, for example).
Boolean falseSet to true to automatically start playback when sound is loaded.
Boolean falseSet to true to load the audio muted.
Object {}Define a sound sprite for the sound. The offset and duration are defined in milliseconds. A third (optional) parameter is available to set a sprite as looping. An easy way to generate compatible sound sprites is with audiosprite.
new Howl({
sprite: {
key1: [offset, duration, (loop)]
},
});
Number 1.0The rate of playback. 0.5 to 4.0, with 1.0 being normal speed.
Number 5The size of the inactive sounds pool. Once sounds are stopped or finish playing, they are marked as ended and ready for cleanup. We keep a pool of these to recycle for improved performance. Generally this doesn't need to be changed. It is important to keep in mind that when a sound is paused, it won't be removed from the pool and will still be considered active so that it can be resumed later.
Array []howler.js automatically detects your file format from the extension, but you may also specify a format in situations where extraction won't work (such as with a SoundCloud stream).
Object nullWhen using Web Audio, howler.js uses an XHR request to load the audio files. If you need to send custom headers, set the HTTP method or enable withCredentials (see reference), include them with this parameter. Each is optional (method defaults to GET, headers default to null and withCredentials defaults to false). For example:
// Using each of the properties.
new Howl({
xhr: {
method: 'POST',
headers: {
Authorization: 'Bearer:' + token,
},
withCredentials: true,
}
});
// Only changing the method.
new Howl({
xhr: {
method: 'POST',
}
});
FunctionFires when the sound is loaded.
FunctionFires when the sound is unable to load. The first parameter is the ID of the sound (if it exists) and the second is the error message/code.
The load error codes are defined in the spec: * 1 - The fetching process for the media resource was aborted by the user agent at the user's request. * 2 - A network error of some description caused the user agent to stop fetching the media resource, after the resource was established to be usable. * 3 - An error of some description occurred while decoding the media resource, after the resource was established to be usable. * 4 - The media resource indicated by the src attribute or assigned media provider object was not suitable.
FunctionFires when the sound is unable to play. The first parameter is the ID of the sound and the second is the error message/code.
FunctionFires when the sound begins playing. The first parameter is the ID of the sound.
FunctionFires when the sound finishes playing (if it is looping, it'll fire at the end of each loop). The first parameter is the ID of the sound.
FunctionFires when the sound has been paused. The first parameter is the ID of the sound.
FunctionFires when the sound has been stopped. The first parameter is the ID of the sound.
FunctionFires when the sound has been muted/unmuted. The first parameter is the ID of the sound.
FunctionFires when the sound's volume has changed. The first parameter is the ID of the sound.
FunctionFires when the sound's playback rate has changed. The first parameter is the ID of the sound.
FunctionFires when the sound has been seeked. The first parameter is the ID of the sound.
FunctionFires when the current sound finishes fading in/out. The first parameter is the ID of the sound.
FunctionFires when audio has been automatically unlocked through a touch/click event.
Begins playback of a sound. Returns the sound id to be used with other methods. Only method that can't be chained.
* sprite/id: String/Number optional Takes one parameter that can either be a sprite or sound ID. If a sprite is passed, a new sound will play based on the sprite's definition. If a sound ID is passed, the previously played sound will be played (for example, after pausing it). However, if an ID of a sound that has been drained from the pool is passed, nothing will play.
Pauses playback of sound or group, saving the seek of playback.
* id: Number optional The sound ID. If none is passed, all sounds in group are paused.
Stops playback of sound, resetting seek to 0.
* id: Number optional The sound ID. If none is passed, all sounds in group are stopped.
Mutes the sound, but doesn't pause the playback.
* muted: Boolean optional True to mute and false to unmute.
* id: Number optional The sound ID. If none is passed, all sounds in group are stopped.
Get/set volume of this sound or the group. This method optionally takes 0, 1 or 2 arguments.
* volume: Number optional Volume from 0.0 to 1.0.
* id: Number optional The sound ID. If none is passed, all sounds in group have volume altered relative to their own volume.
Fade a currently playing sound between two volumes. Fires the fade event when complete.
* from: Number Volume to fade from (0.0 to 1.0).
* to: Number Volume to fade to (0.0 to 1.0).
* duration: Number Time in milliseconds to fade.
* id: Number optional The sound ID. If none is passed, all sounds in group will fade.
Get/set the rate of playback for a sound. This method optionally takes 0, 1 or 2 arguments.
* rate: Number optional The rate of playback. 0.5 to 4.0, with 1.0 being normal speed.
* id: Number optional The sound ID. If none is passed, playback rate of all sounds in group will change.
Get/set the position of playback for a sound. This method optionally takes 0, 1 or 2 arguments.
* seek: Number optional The position to move current playback to (in seconds).
* id: Number optional The sound ID. If none is passed, the first sound will seek.
Get/set whether to loop the sound or group. This method can optionally take 0, 1 or 2 arguments.
* loop: Boolean optional To loop or not to loop, that is the question.
* id: Number optional The sound ID. If none is passed, all sounds in group will have their loop property updated.
Check the load status of the Howl, returns a unloaded, loading or loaded.
Check if a sound is currently playing or not, returns a Boolean. If no sound ID is passed, check if any sound in the Howl group is playing.
* id: Number optional The sound ID to check.
Get the duration of the audio source (in seconds). Will return 0 until after the load event fires.
* id: Number optional The sound ID to check. Passing an ID will return the duration of the sprite being played on this instance; otherwise, the full source du
$ claude mcp add howler.js \
-- python -m otcore.mcp_server <graph>