The SoundSlot controls playback of an audio asset.
new SoundSlot(
component: SoundComponent,
name?: string,
options?: {
asset: number;
autoPlay: boolean;
duration: number;
loop: boolean;
overlap: boolean;
pitch: number;
startTime: number;
volume: number;
}): SoundSlot
Create a new SoundSlot.
The Component that created this slot.
string = 'Untitled'
The name of the slot. Defaults to 'Untitled'.
Settings for the slot.
number
The asset id of the audio asset that is going to be played by this slot.
boolean
If true, the slot will start playing as soon as its audio asset is loaded.
number
The duration of the sound that the slot will play starting from startTime.
boolean
If true, the sound will restart when it reaches the end.
boolean
If true, then sounds played from slot will be played independently of each other. Otherwise the slot will first stop the current sound before starting the new one.
number
The relative pitch, default of 1, plays at normal pitch.
number
The start time from which the sound will start playing.
number
The playback volume, between 0 and 1.
EventHandler.constructor
instances: SoundInstance[] = [];
An array that contains all the SoundInstances currently being played by the slot.
name: string
The name of the slot.
get asset(): null | number
Gets the asset id.
null | number
set asset(value: null | number): void
Sets the asset id.
null | number
void
get autoPlay(): boolean
Gets whether the slot will begin playing as soon as it is loaded.
boolean
set autoPlay(value: boolean): void
Sets whether the slot will begin playing as soon as it is loaded.
boolean
void
get duration(): number
Gets the duration of the sound that the slot will play starting from startTime.
number
set duration(value: number): void
Sets the duration of the sound that the slot will play starting from startTime.
number
void
get isLoaded(): boolean
Gets whether the asset of the slot is loaded.
boolean
get isPaused(): boolean
Gets whether the slot is currently paused.
boolean
get isPlaying(): boolean
Gets whether the slot is currently playing.
boolean
get isStopped(): boolean
Gets whether the slot is currently stopped.
boolean
get loop(): boolean
Gets whether the slot will restart when it finishes playing.
boolean
set loop(value: boolean): void
Sets whether the slot will restart when it finishes playing.
boolean
void
get overlap(): boolean
Gets whether the sounds played from this slot will be played independently of each other.
boolean
set overlap(value: boolean): void
Sets whether the sounds played from this slot will be played independently of each other. Otherwise, the slot will first stop the current sound before starting the new one.
boolean
void
get pitch(): number
Gets the pitch modifier to play the sound with.
number
set pitch(value: number): void
Sets the pitch modifier to play the sound with. Must be larger than 0.01.
number
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.
number
set volume(value: 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 SoundSlot#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 an array that contains the two external nodes set by SoundSlot#setExternalNodes.
An array of 2 elements that contains the first and last nodes set by SoundSlot#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
load(): void
Loads the asset assigned to this slot.
void
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 all sound instances. To continue playback call SoundSlot#resume.
boolean
True if the sound instances paused successfully, false otherwise.
play(): SoundInstance
Plays a sound. If SoundSlot#overlap is true the new sound instance will be played independently of any other instances already playing. Otherwise existing sound instances will stop before playing the new sound.
The new sound instance.
resume(): boolean
Resumes playback of all paused sound instances.
boolean
True if any instances were resumed.
setExternalNodes(firstNode: AudioNode, lastNode?: AudioNode): void
Connect external Web Audio API nodes. Any sound played by this slot will automatically attach the specified nodes to the source that plays the sound. 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).
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)
slot.setExternalNodes(analyzer, filter)
stop(): boolean
Stops playback of all sound instances.
boolean
True if any instances were stopped.
static EVENT_LOAD: string = 'load';
Fired when the sound Asset assigned to the slot is loaded. The handler is passed the loaded Sound resource.
slot.on('load', (sound) => {
console.log('Sound resource loaded')
})
static EVENT_PAUSE: string = 'pause';
Fired when a SoundInstance is paused on a slot. The handler is passed the sound instance that is paused.
slot.on('pause', (instance) => {
console.log('Sound instance paused')
})
static EVENT_PLAY: string = 'play';
Fired when a SoundInstance starts playing on a slot. The handler is passed the sound instance that started playing.
slot.on('play', (instance) => {
console.log('Sound instance started playing')
})
static EVENT_RESUME: string = 'resume';
Fired when a SoundInstance is resumed on a slot. The handler is passed the sound instance that is resumed.
slot.on('resume', (instance) => {
console.log('Sound instance resumed')
})
static EVENT_STOP: string = 'stop';
Fired when a SoundInstance is stopped on a slot. The handler is passed the sound instance that is stopped.
slot.on('stop', (instance) => {
console.log('Sound instance stopped')
})