Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  
  <script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/0.10.1/fetch.js"></script>
</head>
<body>
  
  <button id="bassDrumBt">BD</button>
   <button id="snareDrumBt">SD</button>
  
</body>
</html>
 
/* jshint esnext: true */
var audioContext = window.AudioContext || window.webkitAudioContext;
var ctx = new audioContext();
/* decodeAudioData */
const snareDrumURL = 'https://dl.dropboxusercontent.com/u/1631516/sd.wav';
const bassDrumURL = 'https://dl.dropboxusercontent.com/u/1631516/bd.wav';
const bassDrumBt = document.querySelector("#bassDrumBt");
const snareDrumBt = document.querySelector("#snareDrumBt");
function loadSample(url){
          console.log('done');
    return new Promise(function(resolve, reject){
        fetch(url)
        .then((response) => {
            return response.arrayBuffer();
        })
        .then((buffer) =>{
            ctx.decodeAudioData(buffer, (decodedAudioData) =>{
                resolve(decodedAudioData);
            });
        });
    });
}
const samples = Promise.all([loadSample(bassDrumURL), loadSample(snareDrumURL)])
.then(onSamplesDecoded);
function playSample(buffer){
    const bufferSource = ctx.createBufferSource();
    bufferSource.buffer = buffer;
    bufferSource.connect(ctx.destination);
    bufferSource.start();
}
function onSamplesDecoded(buffers){
    bassDrumBt.onclick = (evt) => {
        playSample(buffers[0]);
    };
  
    snareDrumBt.onclick = (evt) => {
        playSample(buffers[1]);
    };
}
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
hugomalletpro
0viewers