EZ Web Audio / Sampler
Class: Sampler
Defined in: packages/core/src/sampler.ts:35
Round-robin playback of multiple sounds.
Sampler holds multiple Sound instances and automatically alternates between them on each play() call. This creates realistic variation when playing repeated samples (e.g., multiple recordings of the same drum hit).
Example
import { createSampler } from 'ez-web-audio'
// Load multiple kick drum samples for variation
const kick = await createSampler([
'kick-1.mp3',
'kick-2.mp3',
'kick-3.mp3'
])
// Each play() uses the next sample in rotation
kick.play() // plays kick-1
kick.play() // plays kick-2
kick.play() // plays kick-3
kick.play() // back to kick-1Extended by
Constructors
Constructor
new Sampler(
sounds,opts?):Sampler
Defined in: packages/core/src/sampler.ts:44
Parameters
sounds
Playable & Connectable[]
Sound instances to cycle through. Stored internally as a Set, so duplicate references silently collapse: [kick1, kick1, kick2] becomes a 2-item rotation (kick1, kick2), not the 3-hit weighting a caller passing the same instance twice would expect (R7 low). Pass distinct instances — e.g. separately-loaded copies of the same sample — if you want one sound to play more often than others in the rotation.
opts?
Returns
Sampler
Properties
name
name:
string
Defined in: packages/core/src/sampler.ts:53
Optional name to aid in identification.
Accessors
gain
Get Signature
get gain():
number
Defined in: packages/core/src/sampler.ts:75
Gain level applied to each sample when played. This value is applied to the underlying Sound on every play() call, overriding any per-sound gain customization.
Validated the same way as Sampler.changeGainTo / BaseSound.changeGainTo: throws a ValidationError for negative values, warns on the console for values above 1 (R1#1 — previously this was a raw mutable field with no validation at all). Defaults to 1.
Returns
number
Set Signature
set gain(
value):void
Defined in: packages/core/src/sampler.ts:79
Parameters
value
number
Returns
void
pan
Get Signature
get pan():
number
Defined in: packages/core/src/sampler.ts:92
Stereo pan position applied to each sample (-1 = left, 0 = center, 1 = right). This value is applied to the underlying Sound on every play() call, overriding any per-sound pan customization.
Validated the same way as Sampler.changePanTo / BaseSound.changePanTo: warns on the console for values outside [-1, 1] (R1#1). Defaults to 0.
Returns
number
Set Signature
set pan(
value):void
Defined in: packages/core/src/sampler.ts:96
Parameters
value
number
Returns
void
Methods
changeGainTo()
changeGainTo(
value):this
Defined in: packages/core/src/sampler.ts:108
Set the gain level applied to each sample. Equivalent to sampler.gain = value, provided for API symmetry with BaseSound.changeGainTo() / LayeredSound.changeGainTo().
Parameters
value
number
The gain value (0-1 typical range)
Returns
this
this for chaining
changePanTo()
changePanTo(
value):this
Defined in: packages/core/src/sampler.ts:120
Set the pan position applied to each sample. Equivalent to sampler.pan = value, provided for API symmetry with BaseSound.changePanTo() / LayeredSound.changePanTo().
Parameters
value
number
The pan value (-1 to 1)
Returns
this
this for chaining
getSounds()
getSounds(): readonly
Playable&Connectable[]
Defined in: packages/core/src/sampler.ts:208
Get a readonly snapshot of the sampler's sounds.
Returns a shallow copy as an array so callers can inspect which sounds are loaded without mutating the internal Set.
Returns
readonly Playable & Connectable[]
Readonly array of sounds in the sampler
Example
const sampler = await createSampler(['kick-1.mp3', 'kick-2.mp3'])
const sounds = sampler.getSounds()
console.log(sounds.length) // 2play()
play(
velocity):void
Defined in: packages/core/src/sampler.ts:149
Play the next sound in the rotation immediately.
Parameters
velocity
number = 1
Gain multiplier (0–1) applied on top of the sampler's gain. Defaults to 1 (no attenuation).
Returns
void
Example
sampler.play() // plays sound 1
sampler.play() // plays sound 2
sampler.play(0.4) // plays sound 3 at 40% of the sampler's gain (then wraps to 1)playAt()
playAt(
time,velocity):void
Defined in: packages/core/src/sampler.ts:186
Play the next sound at a specific AudioContext time.
Parameters
time
number
The AudioContext.currentTime value when to play
velocity
number = 1
Gain multiplier (0–1) applied on top of the sampler's gain. Defaults to 1 (no attenuation).
Returns
void
Example
const startTime = audioContext.currentTime + 1
sampler.playAt(startTime) // plays next sound at exactly startTime
sampler.playAt(startTime, 0.8) // plays next sound at exactly startTime at 80% gainplayIn()
playIn(
seconds,velocity):void
Defined in: packages/core/src/sampler.ts:169
Play the next sound in the rotation after a delay.
Parameters
seconds
number
Number of seconds from now to play the sound
velocity
number = 1
Gain multiplier (0–1) applied on top of the sampler's gain. Defaults to 1 (no attenuation).
Returns
void
Example
sampler.playIn(0.5) // plays next sound in 0.5 seconds
sampler.playIn(0.5, 0.6) // plays next sound in 0.5 seconds at 60% gain