let _context; function getContext() { if (!_context) { _context = new AudioContext(); } return _context; } function loadSample(url) { return fetch(url) .then((response) => response.arrayBuffer()) .then((buffer) => getContext().decodeAudioData(buffer)); } function playSoundSample(sample, sampleNote, noteToPlay) { const ctx = getContext(); const source = ctx.createBufferSource(); source.buffer = sample; source.playbackRate.value = 2 ** ((noteToPlay - sampleNote) / 12); source.connect(ctx.destination); source.start(0); }