A SoundInstance plays a Sound.
new SoundInstance(
manager: SoundManager,
sound: Sound,
options: {
duration: number;
loop: boolean;
onEnd: Function;
onPause: Function;
onPlay: Function;
onResume: Function;
onStop: Function;
pitch: number;
startTime: number;
volume: number;
}): SoundInstance
Create a new SoundInstance instance.
The sound manager.
The sound to play.
Options for the instance.
number
The total time after the startTime in seconds when playback will stop or restart if loop is true. Defaults to 0.
boolean
Whether the sound should loop when it reaches the end or not. Defaults to false.
Function called when the instance ends.
Function called when the instance is paused.
Function called when the instance starts playing.
Function called when the instance is resumed.
Function called when the instance is stopped.
number
The relative pitch. Defaults to 1 (plays at normal pitch).
number
The time from which the playback will start in seconds. Default is 0 to start at the beginning. Defaults to 0.
number
The playback volume, between 0 and 1. Defaults to 1.
EventHandler.constructor
source: AudioBufferSourceNode = null
Gets the source that plays the sound resource. If the Web Audio API is not supported the type of source is Audio. Source is only available after calling play.
get currentTime(): number
Gets the current time of the sound that is playing.
number
set currentTime(value: number): void
Sets the current time of the sound that is playing. If the value provided is bigger than the duration of the instance it will wrap from the beginning.
number
void
get duration(): number
Gets the duration of the sound that the instance will play starting from startTime.
number
set duration(value: number): void
Sets the duration of the sound that the instance will play starting from startTime.
number
void
get isPaused(): boolean
Gets whether the instance is currently paused.
boolean
get isPlaying(): boolean
Gets whether the instance is currently playing.
boolean
get isStopped(): boolean
Gets whether the instance is currently stopped.
boolean
get isSuspended(): boolean
Gets whether the instance is currently suspended because the window is not focused.
boolean
get loop(): boolean
Gets whether the instance will restart when it finishes playing.
boolean
set loop(value: boolean): void
Sets whether the instance will restart when it finishes playing.
boolean
void
get pitch(): number
Gets the pitch modifier to play the sound with.
number
set pitch(pitch: number): void
Sets the pitch modifier to play the sound with. Must be larger than 0.01.
number
void
get sound(): Sound
Gets the sound resource that the instance will play.
set sound(value: Sound): void
Sets the sound resource that the instance will play.
void
get startTime(): number
Gets the start time from which the sound will start playing.
number
set startTime(value: number): void
Sets the start time from which the sound will start playing.
number
void
get volume(): number
Gets the volume modifier to play the sound with. In range 0-1.
number
set volume(volume: number): void
Sets the volume modifier to play the sound with. In range 0-1.
number
void
clearExternalNodes(): void
Clears any external nodes set by SoundInstance#setExternalNodes.
void
fire(
name: string,
arg1?: any,
arg2?: any,
arg3?: any,
arg4?: any,
arg5?: any,
arg6?: any,
arg7?: any,
arg8?: any): EventHandler
Fire an event, all additional arguments are passed on to the event listener.
string
Name of event to fire.
any
First argument that is passed to the event handler.
any
Second argument that is passed to the event handler.
any
Third argument that is passed to the event handler.
any
Fourth argument that is passed to the event handler.
any
Fifth argument that is passed to the event handler.
any
Sixth argument that is passed to the event handler.
any
Seventh argument that is passed to the event handler.
any
Eighth argument that is passed to the event handler.
Self for chaining.
obj.fire('test', 'This is the message')
getExternalNodes(): AudioNode[]
Gets any external nodes set by SoundInstance#setExternalNodes.
Returns an array that contains the two nodes set by SoundInstance#setExternalNodes.
hasEvent(name: string): boolean
Test if there are any handlers bound to an event name.
string
The name of the event to test.
boolean
True if the object has handlers bound to the specified event name.
obj.on('test', () => {}) // bind an event to 'test'
obj.hasEvent('test') // returns true
obj.hasEvent('hello') // returns false
off(
name?: string,
callback?: HandleEventCallback,
scope?: any): EventHandler
Detach an event handler from an event. If callback is not provided then all callbacks are unbound from the event, if scope is not provided then all events with the callback will be unbound.
string
Name of the event to unbind.
HandleEventCallback
Function to be unbound.
any
Scope that was used as the this when the event is fired.
Self for chaining.
const handler = () => {}
obj.on('test', handler)
obj.off() // Removes all events
obj.off('test') // Removes all events called 'test'
obj.off('test', handler) // Removes all handler functions, called 'test'
obj.off('test', handler, this) // Removes all handler functions, called 'test' with scope this
on(
name: string,
callback: HandleEventCallback,
scope?: any): EventHandle
Attach an event handler to an event.
string
Name of the event to bind the callback to.
HandleEventCallback
Function that is called when event is fired. Note the callback is limited to 8 arguments.
any = ...
Object to use as 'this' when the event is fired, defaults to current this.
Can be used for removing event in the future.
obj.on('test', (a, b) => {
console.log(a + b)
})
obj.fire('test', 1, 2) // prints 3 to the console
const evt = obj.on('test', (a, b) => {
console.log(a + b)
})
// some time later
evt.off()
once(
name: string,
callback: HandleEventCallback,
scope?: any): EventHandle
Attach an event handler to an event. This handler will be removed after being fired once.
string
Name of the event to bind the callback to.
HandleEventCallback
Function that is called when event is fired. Note the callback is limited to 8 arguments.
any = ...
Object to use as 'this' when the event is fired, defaults to current this.
obj.once('test', (a, b) => {
console.log(a + b)
})
obj.fire('test', 1, 2) // prints 3 to the console
obj.fire('test', 1, 2) // not going to get handled
pause(): boolean
Pauses playback of sound. Call resume() to resume playback from the same position.
boolean
Returns true if the sound was paused.
play(): boolean
Attempt to begin playback the sound. If the AudioContext is suspended, the audio will only start once it's resumed. If the sound is already playing, this will restart the sound.
boolean
True if the sound was started immediately.
resume(): boolean
Resumes playback of the sound. Playback resumes at the point that the audio was paused.
boolean
Returns true if the sound was resumed.
setExternalNodes(firstNode: AudioNode, lastNode?: AudioNode): void
Connects external Web Audio API nodes. You need to pass the first node of the node graph that you created externally and the last node of that graph. The first node will be connected to the audio source and the last node will be connected to the destination of the AudioContext (e.g. speakers). Requires Web Audio API support.
The first node that will be connected to the audio source of sound instances.
The last node that will be connected to the destination of the AudioContext. If unspecified then the firstNode will be connected to the destination instead.
void
const context = app.systems.sound.context
const analyzer = context.createAnalyzer()
const distortion = context.createWaveShaper()
const filter = context.createBiquadFilter()
analyzer.connect(distortion)
distortion.connect(filter)
instance.setExternalNodes(analyzer, filter)
stop(): boolean
Stops playback of sound. Calling play() again will restart playback from the beginning of the sound.
boolean
Returns true if the sound was stopped.
static EVENT_END: string = 'end';
Fired when the sound currently played by the instance ends.
instance.on('end', () => {
console.log('Instance ended')
})
static EVENT_PAUSE: string = 'pause';
Fired when the instance is paused.
instance.on('pause', () => {
console.log('Instance paused')
})
static EVENT_PLAY: string = 'play';
Fired when the instance starts playing its source.
instance.on('play', () => {
console.log('Instance started playing')
})
static EVENT_RESUME: string = 'resume';
Fired when the instance is resumed.
instance.on('resume', () => {
console.log('Instance resumed')
})
static EVENT_STOP: string = 'stop';
Fired when the instance is stopped.
instance.on('stop', () => {
console.log('Instance stopped')
})