JSFiddle - React, Tailwind, and code Playground

JavaScript

var context = new AudioContext()
  , bufferSource = context.createBufferSource()
  , muteGain = context.createGain()
  , samplesPerBlock = 16384
  , scriptProcessor = context.createScriptProcessor(samplesPerBlock, 1, 1)
  , buffer = context.createBuffer(1, context.sampleRate * 2, context.sampleRate)
  , pulseTime = 1.5

scriptProcessor.onaudioprocess = function(event) {
    var array = event.inputBuffer.getChannelData(0)
    for (var i = 0; i < event.inputBuffer.length; i++) {
        if (array[i] == 1) {
            var currentSample = event.playbackTime 
                * context.sampleRate - 2 * samplesPerBlock
              , pulseSample = currentSample + i
            document.body.innerHTML = 'running at sample rate ' + context.sampleRate
              + '<br/> pulse sample received at ' + pulseSample
              + '<br/> expected at ' + (pulseTime * context.sampleRate)
        }
    }
}

buffer.getChannelData(0)[0] = 1 // The buffer contains a pulse at time = 0
bufferSource.buffer = buffer
muteGain.gain.value = 0

bufferSource.connect(scriptProcessor)
scriptProcessor.connect(muteGain)
bufferSource.connect(muteGain)
muteGain.connect(context.destination)
bufferSource.start(pulseTime)