Per suonare un file audio nel browser lo carichi, lo decodifichi in un buffer e lo riproduci con un AudioBufferSourceNode.
const res = await fetch("/samples/break.wav");
const buffer = await ctx.decodeAudioData(await res.arrayBuffer());
function suona(rate = 1) {
const src = ctx.createBufferSource();
src.buffer = buffer;
src.playbackRate.value = rate; // 2 = doppia velocità e ottava sopra
src.loop = true;
src.connect(ctx.destination);
src.start();
return src; // per fermarlo poi con src.stop()
}
Nota una peculiarità: un AudioBufferSourceNode è usa e getta: dopo start() non si può riavviare, ne crei uno nuovo ogni volta. In cambio è leggerissimo.
playbackRate cambia velocità e intonazione insieme (come in Sonic Pi con rate), loop fa ripetere il campione, start(time) lo schedula preciso. Da qui costruisci sampler, loop station e drum machine basate su file veri.