<!DOCTYPE html> <script> var ac = new AudioContext(); var runningPromise = new Promise(resolve => { ac.onstatechange = event => { if (ac.state == "running") { resolve(); } }; }); fetch("audio.ogg").then(response => { return response.arrayBuffer(); }).then(ab => { return ac.decodeAudioData(ab); }).then(ab => { var src = ac.createBufferSource(); src.buffer = ab; src.loop = true; src.loopStart = 0; src.loopEnd = ab.duration; src.start(); src.connect(ac.destination); }); var suspendPromise; function suspendAC() { runningPromise.then(() => { suspendPromise = ac.suspend(); }); } var resumePromise; function resumeAC() { suspendPromise.then(() => { resumePromise = ac.resume(); }); } function closeAC() { resumePromise.then(() => { ac.close(); }); } </script>