JSFiddle - React, Tailwind, and code Playground

by langsamu

JavaScript

var sound = [
  /* 430 DATA */ 3950, 3, 4967, 1, 5918, 4, 4697, 4, 3950, 4, 2959, 8, 2348, 3, 2636, 1, 2959, 4, 4697, 4, 4184, 4, 3950, 7, 0, 1,
  /* 440 DATA */ 3950, 1, 0, 1, 3950, 1, 0, 1, 2348, 6, 2636, 2, 2959, 4, 3134, 8, 3516, 3, 3134, 1, 2959, 3, 0, 1, 2959, 4, 3950, 4, 4697, 4, 5918, 4, 10, 1,
  /* 450 DATA */ 2348, 1, 0, 1, 2348, 1, 0, 1, 2348, 4, 2216, 4, 1975, 3, 0, 1, 1975, 8, 2216, 2, 2348, 2, 2636, 4, 2348, 4, 2216, 3, 0, 1, 2216, 7, 0, 1,
  /* 460 DATA */ 2216, 4, 2348, 6, 2636, 2, 2959, 4, 3134, 8, 3516, 3, 3134, 1, 2959, 4, 4697, 4, 4184, 4, 3950, 7, 0, 1,
  /* 470 DATA */ 3950, 4, 2959, 3, 0, 1, 2959, 3, 0, 1, 2959, 2, 3134, 2, 3516, 3, 0, 1, 3516, 3, 0, 1, 3516, 4, 2636, 4, 2216, 2, 2348, 2, 2636, 2, 2959, 1, 0, 1, 2959, 4, 3134, 8,
  /* 480 DATA */ 3950, 1, 0, 1, 3950, 2, 2959, 6, 2636, 2, 2348, 2, 2216, 2, 1975, 16, 2959, 2, 2636, 2, 2348, 8, 2216, 3, 2636, 6, 2959, 16, 100, 0
];

var audio = new AudioContext();
audio.suspend();

var oscillator = audio.createOscillator();
oscillator.type = "square";

oscillator.connect(audio.destination);

var M = 7;
for (var time = 0, repeat = true, i = 0; i < sound.length; i += 2) {
  var N = sound[i];
  var L = sound[i + 1];

  if (N === 10 && L === 1) {
    if (repeat) {
      repeat = false;
      i = -2;
    }

    continue;
  }

  if (N === 100) {
    oscillator.frequency.setValueAtTime(0, time);

    break;
  }

  var correctedPitch = N === 0 ? 0 : 1100000 / N;
  var correctedLength = L / M;

  oscillator.frequency.setValueAtTime(correctedPitch, time);

  time += correctedLength;
}

oscillator.start();
audio.resume();