La Web Audio API è potente ma verbosa. Tone.js ci costruisce sopra un livello musicale: sintetizzatori, effetti e un "trasporto" con un tempo, pronti all'uso.

import * as Tone from "tone";

const synth = new Tone.PolySynth().toDestination();

// una sequenza sincronizzata al tempo globale
const seq = new Tone.Sequence((time, note) => {
  synth.triggerAttackRelease(note, "8n", time);
}, ["C4", "E4", "G4", "B4"], "4n");

Tone.Transport.bpm.value = 120;
Tone.Transport.start();
seq.start(0);

Tone.Transport è un orologio musicale globale al quale agganci tutto; le durate le scrivi in notazione musicale ("8n" = un ottavo). Il timing preciso al campione, che con la Web Audio nuda dovresti gestire a mano, qui è automatico.

Se la Web Audio API è l'assembly del suono nel browser, Tone.js è il linguaggio ad alto livello. Perfetto quando vuoi comporre, non reimplementare uno scheduler.