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.