genuary9 and 10 - this banjo leaves us here
generatiive music and art
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();
}