fractalkitty looking for math? fractalkitty.com

Genuary 2023

genuary9 and 10 - this banjo leaves us here

#random#trig#classes#sound#interactive#animation#plants#music#genuary

generatiive music and art

bTrackcTrackdTrackplayBoolbanjobegStrumleafBleafCleafD

let bTrack = [];
let cTrack = [];
let dTrack = [];
let playBool = false;
let banjo = [];
let t = 0;
let beg = 0;
nT = 10;
let t1;
let x1, y1, x2, y2;
function preload() {
  userStartAudio();
  for (let i = 0; i < 12; i++) {
    banjo[i] = loadSound(
      "/assets/banjo" + str(i + 1) + ".m4a"
    );
  }
}
function setup() {
  frameCount = 0;
  bTrack = [];
  cTrack = [];
  dTrack = [];
  t = 0;
  createCanvas(500, 500);
  noFill();
  strokeWeight(0.5);
  angleMode(DEGREES);
  nT = floor(random(20, 30));

  for (let i = 0; i < 12; i++) {
    if (i === 3) {
      banjo[i].amp(0.2);
    } else {
      banjo[i].amp(0.4);
    }
  }
  for (let i = 0; i < nT; i++) {
    bTrack.push(new Strum(floor(random(1, 2.9) * 32)));
    cTrack.push(new Strum(floor(random(2, 3.9) * 32)));
    dTrack.push(new Strum(floor(random(1, 2.9) * 32)));
  }
  c = color(random(200, 205), random(210, 255), random(210, 255), 4);
}

function draw() {
  translate(width / 2, height / 2);
  background(c);
  t1 = frameCount;
  t += 0.5;
  w = width / 3 + 100 * sin(t / 3);
  x1 = w * sin(t);
  y1 = 50 + w * cos(t);
  x2 = w * sin(t + 180);
  y2 = 50 + w * cos(t + 180);
  circle(x1, y1, 0.1);
  circle(x2, y2, 0.1);
  if (playBool) {
    beg = 1;
    if (t1 === 0) {
      background(255);
      push();
      strokeWeight(5);
      circle(0, 50, width / 2);
      pop();
    }
    if (t1 % 3600 === 0) {
      push();
      strokeWeight(5);
      circle(0, 50, width / 2);
      pop();
    }
    for (let i = 0; i < nT; i++) {
      if (t1 % bTrack[i].beat === 0 && t1 % 3600 < 1200) {
        banjo[bTrack[i].track].play();
        bTrack[i].display();
      }
      if (t1 % cTrack[i].beat === 0 && t1 % 3600 < 2400 && t1 % 3600 > 1000) {
        banjo[cTrack[i].track].play();
        cTrack[i].display();
      }
      if (t1 % dTrack[i].beat === 0 && t1 % 3600 > 2200) {
        banjo[dTrack[i].track].play();
        dTrack[i].display();
      }
    }
  } else {
    push();
    fill(0);

    triangle(
      -width / 2 + 10,
      height / 2 - 20,
      -width / 2 + 10,
      height / 2 - 10,
      -width / 2 + 20,
      height / 2 - 15
    );

    pop();
  }
}

class Strum {
  constructor(d) {
    this.beat = int(random(1, 4)) * d * 4;
    this.x = random(50, 200);
    this.y = random(-height / 2, height / 2);
    this.p1 = random(1, 10);
    this.track = floor(random(0, 11.99));
    this.dType = floor(random(0, 8.9));
    this.color = color(random(30, 100), random(30, 100), random(30, 100), 20);
  }
  display() {
    fill(this.color);
    if (this.dType === 0) {
      circle(
        (this.x / 2) * sin((t1 * this.p1) / 10),
        50 + (this.x / 2) * cos((t1 * this.p1) / 10),
        2
      );
      circle(0, 50, this.x);
      push();
      translate(x1, y1);
      rotate(t1);
      leafB(30);
      pop();
      push();
      translate(x2, y2);
      rotate(t1 + 180);
      leafB(30);
      pop();
    }
    if (this.dType === 1) {
      circle(
        (this.x / 2) * sin((-t1 * this.p1) / 10),
        50 + (this.x / 2) * cos((-t1 * this.p1) / 10),
        2
      );
      circle(0, 50, this.x);
      push();
      translate(x1, y1);
      rotate(this.p1 + t1);
      leafC(30);
      pop();
      push();
      translate(x2, y2);
      rotate(this.p1 + t1 + 180);
      leafC(30);
      pop();
    }
    if (this.dType === 2) {
      line(-20, -height / 2 + 100, -20, 150);

      push();
      translate(x1, y1);
      rotate(this.p1 + t1);
      leafD(30);
      pop();
      push();
      translate(x2, y2);
      rotate(this.p1 + t1 + 180);
      leafD(30);
      pop();
    }
    if (this.dType === 3) {
      line(-10, -height / 2 + 20, -10, 150);
      push();
      translate(x1, y1);
      rotate(this.p1 * 4 + t1);
      leafB(60);
      pop();
      push();
      translate(x2, y2);
      rotate(this.p1 * 4 + t1 + 180);
      leafB(60);
      pop();
    }
    if (this.dType === 4) {
      line(0, -height / 2 + 20, 0, 150);
      push();
      translate(x1, y1);
      rotate(this.p1 * 4 + t1);
      leafC(60);
      pop();
      push();
      translate(x2, y2);
      rotate(this.p1 * 4 + t1 + 180);
      leafC(60);
      pop();
    }
    if (this.dType === 5) {
      line(10, -height / 2 + 20, 10, 150);
    }
    if (this.dType === 6) {
      line(20, -height / 2 + 20, 20, 150);
    }
    if (this.dType === 7) {
      for (let i = 0; i < 10; i++) {
        circle(
          this.x * sin(t1 / 10 + this.y + i * 36),
          50 + this.x * cos(t1 / 10 + this.y + i * 36),
          i
        );
      }
    }
    if (this.dType === 8) {
      for (let i = 0; i < 4; i++) {
        circle(
          this.x * sin(t1 / 100 + this.y),
          50 + this.x * cos(t1 / 100 + this.y),
          i * this.p1
        );
      }
    }
  }
}

function mousePressed() {
  playBool = !playBool;
  frameCount = 0;
}

function keyPressed() {
  frameCount = 0;
  playBool = true;
  setup();
  draw();
}

function leafB(r) {
  fill(10, 40, 30, 50);
  beginShape();
  for (let i = 42; i < 90; i++) {
    x = -r / 3 + (r / 2) * sin(i);
    y = (r / 2) * cos(i);
    vertex(x, y);
  }
  for (let i = -90; i > -120; i--) {
    x = r / 3 + (r / 6) * sin(i);
    y = (r / 6) * cos(i);
    vertex(x, y);
  }
  for (let i = -190; i < -120; i++) {
    x = r / 3 - r / 6 + (r / 12) * sin(i);
    y = (r / 12) * cos(i);
    vertex(x, y);
  }
  for (let i = -120; i > -180; i--) {
    x = r / 3 - r / 6 + (r / 12) * sin(i);
    y = (r / 12) * cos(i);
    vertex(x, y);
  }
  for (let i = 100; i < 139; i++) {
    x = -r / 3 + (r / 2) * sin(i);
    y = (r / 2) * cos(i);
    vertex(x, y);
  }
  for (let i = 138; i > 99; i--) {
    x = r / 3 - (r / 2) * sin(i);
    y = (r / 2) * cos(i);
    vertex(x, y);
  }
  for (let i = 160; i > 120; i--) {
    x = -r / 3 + r / 6 + (r / 12) * sin(i);
    y = (r / 12) * cos(i);
    vertex(x, y);
  }
  for (let i = 120; i < 197; i++) {
    x = -r / 3 + r / 6 + (r / 12) * sin(i);
    y = (r / 12) * cos(i);
    vertex(x, y);
  }
  for (let i = 118; i > 90; i--) {
    x = -r / 3 + (r / 6) * sin(i);
    y = (r / 6) * cos(i);
    vertex(x, y);
  }
  for (let i = -90; i < -41; i++) {
    x = r / 3 + (r / 2) * sin(i);
    y = (r / 2) * cos(i);
    vertex(x, y);
  }
  endShape();
}

function leafC(r) {
  fill(10, 70, 30, 50);
  beginShape();
  for (let i = 42; i < 138; i++) {
    x = -r / 2.5 + (r / 3) * sin(i);
    y = (r / 3) * cos(i);
    vertex(x, y);
  }
  for (let i = 112; i > 77; i--) {
    x = -r / 3 - r / 6.5 + (r / 3) * sin(i);
    y = -r / 8 + (r / 3) * cos(i);
    vertex(x, y);
  }
  for (let i = -90; i < -77; i++) {
    x = r / 3 + (r / 2) * sin(i);
    y = (r / 2) * cos(i);
    vertex(x, y);
  }
  for (let i = 95; i > 70; i--) {
    x = -r / 3 - r / 6.5 + (r / 3) * sin(i);
    y = r / 8 + (r / 3) * cos(i);
    vertex(x, y);
  }

  endShape();
}

function leafD(r) {
  fill(50, 40, 20, 50);
  beginShape();
  for (let i = 81; i < 160; i++) {
    x = -r / 2.5 + (r / 2) * sin(i);
    y = (r / 2) * cos(i);
    vertex(x, y);
  }
  for (let i = 135; i > 80; i--) {
    x = -r / 2.5 - r / 10 + (r / 2.4) * sin(i);
    y = -r / 6 + (r / 2.4) * cos(i);
    vertex(x, y);
  }
  for (let i = -95; i < -20; i++) {
    x = r / 2.5 + (r / 2) * sin(i);
    y = (r / 2) * cos(i);
    vertex(x, y);
  }
  for (let i = 312; i > 257; i--) {
    x = r / 2.5 + r / 10 + (r / 2.4) * sin(i);
    y = r / 6 + (r / 2.4) * cos(i);
    vertex(x, y);
  }

  endShape();
}