Exemple #1
0
  function compose(e) {
    const token = tokens.shift();

    if (!token) {
      return process.exit();
    }

    const playbackTime = e.playbackTime;

    switch (token.type) {
    case "punctuator":
      sched.insert(playbackTime, hihat, { token });
      break;
    case "keyword":
      sched.insert(playbackTime, chord, { token });
      break;
    case "number":
    case "string":
      sched.insert(playbackTime, beep, { token });
      break;
    default:
      sched.insert(playbackTime, synth, { token });
      break;
    }

    sched.insert(playbackTime + beat, compose);
  }
Exemple #2
0
  function compose(e) {
    const token = tokens.shift();

    if (!token) {
      return process.exit();
    }

    const t0 = e.playbackTime;
    const index = e.args.index;

    // kick
    if (index % 4 === 0) {
      sched.insert(t0, shot, { inst: 0, amp: 0.4, dur: 1 });
    } else {
      if (token.type === "keyword") {
        const amp = token.type === "identifier" ? 0.25 : 0.125;

        sched.insert(t0, shot, { inst: 0, amp: amp, dur: 0.25 });
      }
    }

    // snare
    if (token.type !== "punctuator") {
      if (index % 8 === 4) {
        sched.insert(t0, shot, { inst: 1, amp: 0.75, dur: 1 });
      } else if (token.type === "keyword" || token.type === "identifier") {
        const amp = Math.min(token.value.length / 32, 0.5);
        const dur = token.type === "identifier" ? 0.25 : 0.5;

        sched.insert(t0, shot, { inst: 1, amp: amp, dur: dur });
      }
    }

    // hihat
    if (token.type === "keyword" || token.type === "identifier") {
      if (index % 4 === 2) {
        const dur = token.type === "keyword" ? 0.75 : 0.5;

        sched.insert(t0, shot, { inst: 2, amp: 0.325, dur: dur });
      } else {
        sched.insert(t0, shot, { inst: 2, amp: 0.25, dur: 0.1 });
      }
    } else if (token.type === "number" || token.type === "string") {
      const amp = Math.min(token.value.length / 12, 0.5);

      sched.insert(t0, shot, { inst: 2, amp: amp, dur: 1 });
    } else {
      const amp = wrapAt([ 0.125, 0.05, 0.1, 0.075 ], index);

      sched.insert(t0, shot, { inst: 2, amp: amp, dur: 0.1 });
    }

    sched.insert(t0 + beat, compose, { index: e.args.index + 1 });
  }
Exemple #3
0
  function compose(e) {
    const t0 = e.playbackTime;
    const token = tokens.shift();

    if (token) {
      const index = e.args.index;

      // kick
      if (index % 4 === 0) {
        sched.insert(t0, shot, { inst: 0, amp: 0.4, dur: 1 });
      } else {
        if (/\d/.test(token)) {
          const amp = /[02468]/.test(token) ? 0.25 : 0.125;

          sched.insert(t0, shot, { inst: 0, amp: amp, dur: 0.25 });
        }
      }

      // snare
      if (/\w/.test(token.test)) {
        if (index % 8 === 4) {
          sched.insert(t0, shot, { inst: 1, amp: 0.75, dur: 1 });
        } else if (/[A-Z]/.test(token)) {
          const amp = 0.25;
          const dur = /AEIOU/.test(token) ? 0.25 : 0.5;

          sched.insert(t0, shot, { inst: 1, amp: amp, dur: dur });
        }
      }

      // hihat
      if (/\w/.test(token)) {
        if (index % 4 === 2) {
          const dur = /[a-zA-Z]/.test(token) ? 0.75 : 0.5;

          sched.insert(t0, shot, { inst: 2, amp: 0.325, dur: dur });
        } else {
          sched.insert(t0, shot, { inst: 2, amp: 0.25, dur: 0.1 });
        }
      } else if (/\d/.test(token)) {
        const amp = +token / 10;

        sched.insert(t0, shot, { inst: 2, amp: amp, dur: 1 });
      } else {
        const amp = wrapAt([ 0.125, 0.05, 0.1, 0.075 ], index);

        sched.insert(t0, shot, { inst: 2, amp: amp, dur: 0.1 });
      }

      sched.insert(t0 + beat, compose, { index: e.args.index + 1 });
    }
  }