Very simple howler.js based sound manager for games (and not only).
- Controller makes it easier to manage sounds
- Loader helps to load all sounds before use
- Allows to use spatial sound too
- Organise all sounds and sprites
- Plus all standard features of Howler.js
- Install via npm:
npm install howler-sound-controller
- or clone the repo:
git clone https://github.com/Qriva/howler-sound-controller.git
import { HowlerSoundController } from 'howler-sound-controller';
var controller = HowlerSoundController;
// Get load manager via method
var loader = controller.getLoader();
// Queue resources in loader
loader
.add('soundName', {
src: ['music1.mp3'],
volume: 0.7
})
.add('soundName2', {
src: ['music2.mp3'],
volume: 0.5
});
// Wait for 'loaded' event fired when all sounds are ready
loader.once('loaded', function(){
// Play sound by name
controller.play('music');
});
// Start loading queued sounds
loader.load();
// Queue can be cleared
loader.clearQueue();
// Before loading add resources to queue
// Controller creates spirtes if provided
loader.add('spriteSound', {
src: ['music1.mp3'],
volume: 0.7,
sprite: {
explosion: [0, 2000],
laser: [2000, 2000]
}
);
// Start loading files from queue
loader.load();
// Monitoring progress
loader.on('progress', function(event){
// event.progress - number of sounds loded
// event.total - total number of sounds
});
// Event fired when all sounds are ready to use
loader.once('loaded', function(event){
// After this event, loader is ready again to use
// event.sounds - array of sounds objects added to controller
});
// Play sound - provide sound name or sprite name
var id = controller.play('sound1');
// Stop sound
controller.stop('sound1', id);
// Or stop all sounds in group
controller.stop('sound1');
// Play looped background music
controller.playBackground('sound1');
// Change background music with fade effect
controller.playBackground('sound2', 0, 3000, true);
// Fade out background music (off)
controller.playBackground(null, 2000);
// Set master volume (can be done via Howler too)
controller.setMasterVolume(0.6);
// Set background music volume
controller.setBackgroundVolume(0.8);
// Get Sound object
controller.get('sound1');
interface Sound {
name: string;
howl: Howl;
sprite: string | null;
}
All registered objects in Controller and objects returned by loaded event extends above interface. You can register Sounds manually by passing array of following objects.
Queue resource in loader. Sound is added in Controller into provided name or sprite name if provided. Param howlOptions is used to setup Howl object.
- src
Array/String
required
- volume
Number
- loop
Boolean
- rate
Number
- format
Array
- sprite
Object
{
key: [offset, duration, (loop)]
}
If Howl Sound sprite is provided then Loader will generate sound for each key instead of for resource name.
Start loading all queued resources.
Clear all queued resources
Event emitter methods.
Fires when all sounds are loaded.
- progress
number
- number of loaded sounds - total
number
- total number of sounds
Fires when single sound (howler instance) is loaded.
- sounds
array
- array of loaded Sounds added to controller library (Sound object described above). There is no need to use Controller to play sounds, you can just use Loader to load all files and use Howl instances separately.
Fires if any of provided sounds cannot be loaded.
Plays sound registered for given name. Returns the sound id to be used with other methods.
Stops playback of all sounds for given name. If id is provided only sound by given id is stopped. Calling stop
without id stops background music too.
Plays looped backgorund music registered for given name with fade effect between sonuds.
name string | null
- name of registered sound. If null passed then no backgorund music will be played after fadeout.
transition bollean
[false]
- if true is passed, fadein will start at the same time as fadeout. If false, fadein will be queued to play after fadeout of previous track.
Returns main volume.
Set main volume.
Returns volume background music.
Set background music volume.
Returns Sound object for given name (Described above).
Returns array of all Sound objects registered in Controller.
Register manually Sound objects.
Returns SoundLoader object.
Update position of listener (only used by spatial sounds).
Orientation is updated only if both orientation and orientationUp is provided (Vector3D
).
Play spatial sound on provided position. Panner attributes are all avaiable attributes of Howl pannerAttr option. Position and orientation are Vector3D
objects.
{
x: number,
y: number,
z: number,
}
- coneInnerAngle
number
- coneOuterAngle
number
- coneOuterGain
number
- distanceModel
inverse
|linear
|exponential
- maxDistance
number
- refDistance
number
- rolloffFactor
number
- panningModel
HRTF
|equalpower