Spatial Audio

@web-kits/audio supports full 3D spatial audio using the Web Audio API's HRTF panning. Position sounds anywhere in 3D space and set up a listener to hear them from a specific vantage point.

Position a sound

Add a panner to any layer:

defineSound({
  source: { type: "sine", frequency: 200 },
  envelope: { attack: 0.1, decay: 2, sustain: 0.2, release: 0.5 },
  gain: 0.3,
  panner: {
    positionX: 5,
    positionY: 0,
    positionZ: -3,
    panningModel: "HRTF",
    distanceModel: "inverse",
    refDistance: 1,
    maxDistance: 100,
  },
});

Set the listener

Tell @web-kits/audio where the listener is. In a game, this would track the camera or player position.

import { setListener } from "@web-kits/audio";

setListener({
  positionX: 0,
  positionY: 1.6,
  positionZ: 0,
});

Panner properties

PropertyTypeDefaultDescription
positionX/Y/Znumber-Source position
orientationX/Y/Znumber0, 0, 0Source direction
panningModelstring"equalpower""equalpower" or "HRTF"
distanceModelstring"inverse""linear", "inverse", "exponential"
refDistancenumber1Distance where volume is 100%
maxDistancenumber10000Maximum audible distance
rolloffFactornumber1How quickly volume drops
coneInnerAnglenumber360Full-volume cone (degrees)
coneOuterAnglenumber360Audible cone (degrees)
coneOuterGainnumber0Volume outside cone

Listener properties

PropertyTypeDefaultDescription
positionX/Y/Znumber-Listener position
forwardX/Y/Znumber0,0,-1Forward direction
upX/Y/Znumber0,1,0Up direction