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)