t→t+1
Documentation

Sound

AudioWorklet

Own the DSP when samples are not enough: synthesis, ambience, sonification, and reactive sound.

Configure the processor

The source entry must contain browser-executable JavaScript and register the same processor name declared in the configuration.

{
  "audio": {
    "source_entry": "audio/processor.js",
    "source_api": "tplus1.audio-worklet/v1",
    "processor_name": "my-simulation-audio",
    "channels": 2,
    "master_gain": 0.72
  }
}

Processor outline

class SimulationAudio extends AudioWorkletProcessor {
  constructor() {
    super();
    this.port.onmessage = ({ data }) => {
      // data.type: "init" | "event" | "telemetry" | "dispose"
    };
  }

  process(inputs, outputs) {
    // Write generated samples into outputs[0].
    return true;
  }
}

registerProcessor("my-simulation-audio", SimulationAudio);

Runtime messages

init
Sample rate and current rendering quality.
event
Sound ID, attenuated volume, and stereo pan from play_audio.
telemetry
Listener position, velocity, speed, playback state, and quality.
dispose
Signal to release processor-owned resources.

AudioWorklet code runs only for simulations whose executable code is trusted.