JSFiddle - React, Tailwind, and code Playground

by sebpiq

JavaScript

window.AudioContext = window.AudioContext || window.webkitAudioContext

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) {
            document.body.innerHTML = 'running at sample rate ' + context.sampleRate.toFixed(2)
            + '<br/> pulse sample received at currentTime ' + (event.playbackTime * context.sampleRate)
            + '<br/> pulse sample received at playbackTime ' + (context.currentTime * context.sampleRate)
              + '<br/> while scheduled 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)