xxxxxxxxxx
487
let serial;
let latestData = "waiting for data";
let ledBrightness = 0;
let mic;
let analyzer;
let sampler = new Tone.Sampler({
"A4": "samples/violin/A4.mp3"
// "C4": "samples/violin/C4.mp3"
});
sampler.envelope = {
attack: 0.2,
decay: 0.5,
sustain: 0.5,
release: 0.1
}
sampler.toMaster();
var vibrato = new Tone.Vibrato({
maxDelay : 0.005 ,
frequency : 5 ,
depth : 0.1
}).toMaster();
sampler.connect(vibrato);
// var pingPong = new Tone.PingPongDelay("1n", 0.05).toMaster();
// sampler.connect(pingPong);
// var distortion = new Tone.Distortion(0.5).toMaster();
// sampler.connect(distortion);
// let radius = 200;
// let radiusStep = 0.25;
// let radiusDirection = 1
//pixel parameter
let redratio = 0.3;
let greenratio = 0.3;
let blueratio = 0.8;
let colorDirection = 1;
// soundplay
let song;
let rainsound;
let pianosound;
let rainPlay = 0;
let pianoPlay = 0;
let violinPlay = 0;
let touch1Play = 0;
let finalReady = 0;
let finalPlay = 0;
// sun
var n = 12,
r = 100,
l = 0,
k = 0,
m = 0,
t=0;
// flower song
let angle = 0;
let flowerLen = 20;
let flowerWid = 10;
let theme = 1;
function preload() {
song = loadSound('finalmusic.mp3');
rainsound = loadSound('rain.mp3');
pianosound = loadSound('piano.wav');
}
function keyPressed() {
let pitch;
if(key == '1'){
pitch = "A4";
}
else if(key == '2'){
pitch = "B4";
}
else if(key == '3'){
pitch = "C5";
}
else if(key == '4'){
pitch = "D5";
}
else if(key == '5'){
pitch = "E5";
}
else if(key == '6'){
pitch = "F5";
}
else if(key == '7'){
pitch = "G5";
}
else if(key == '8'){
pitch = "A5";
}
else if(key == '9'){
pitch = "B5";
}
else if(key == '0'){
pitch = "C6";
}
if(pitch && sampler.loaded){
// Sampler will repitch the closest sample
sampler.triggerAttack(pitch);
}
}
function keyReleased() {
sampler.triggerRelease();
}
var drops = [];
function setup() {
createCanvas(800, 600);
pixelDensity(1);
serial = new p5.SerialPort();
serial.list();
serial.open("COM8"); // change it to match your arduino serial port name
serial.on("connected", serverConnected);
serial.on("list", gotList);
serial.on("data", gotData);
serial.on("error", gotError);
serial.on("open", gotOpen);
serial.on("close", gotClose);
analyzer = new Tone.Waveform(256);
sampler.connect(analyzer);
for (var i = 0; i < 50; i++) {
drops.push(new Drop());
}
// l system
fractTree= new Lsystem(radians(25))
createP("X");
fractTree.turtle();
// var button = createButton("generate");
// button.mousePressed(generate);
song.addCue(4,extendFlower);
song.addCue(5,shrinkFlower);
song.addCue(7,extendFlower);
song.addCue(8,extendFlower2);
song.addCue(13,shrinkFlower);
song.addCue(13,shrinkFlower2);
song.addCue(16,extendFlower);
song.addCue(16,shrinkFlower);
song.addCue(17,extendFlower);
song.addCue(18,extendFlower);
song.addCue(18,extendFlower2);
song.addCue(25,changeTheme);
song.addCue(70,changeTheme);
song.addCue(74,extendFlower);
song.addCue(75,shrinkFlower);
song.addCue(77,extendFlower);
song.addCue(78,extendFlower2);
song.addCue(83,shrinkFlower);
song.addCue(83,shrinkFlower2);
song.addCue(86,extendFlower);
song.addCue(86,shrinkFlower);
song.addCue(87,extendFlower);
song.addCue(88,extendFlower);
song.addCue(88,extendFlower2);
}
function serverConnected() {
print("Connected to Server");
}
function gotList(thelist) {
print("List of Serial Ports:");
for (let i = 0; i < thelist.length; i++) {
print(i + " " + thelist[i]);
}
}
function gotOpen() {
print("Serial Port is Open");
}
function gotClose() {
print("Serial Port is Closed");
latestData = "Serial Port is Closed";
}
function gotError(theerror) {
print(theerror);
}
function gotData() {
let currentString = serial.readLine();
trim(currentString);
if (!currentString) return;
console.log(currentString);
latestData = currentString;
let pitch;
if(currentString.slice(0,1) == "D"){
let distance = int(currentString.substring(2));
if (distance < 5){
pitch = "G5";
}
else if (distance <10){
pitch = "F5";
} else {
violinPlay = 0;
}
if(pitch && sampler.loaded){
if(violinPlay == 0 && finalReady == 0){
sampler.triggerAttack(pitch);
violinPlay = 1;
}
}
} else if (currentString.slice(0,2) == "T1") {
let touch1 = int(currentString.substring(3))
print(touch1)
if (touch1 < 10 && touch1Play ==0){
pitch = "A4";
touch1Play = 1;
} else if (touch1 > 20){
touch1Play = 0;
}
if(pitch && sampler.loaded){
if (finalReady == 0){
sampler.triggerAttack(pitch);
}
}
} else if (currentString.slice(0,1) == "M") {
let moisture = int(currentString.substring(2))
if (moisture < 1600 && rainPlay == 0) {
if (finalReady == 0){
rainsound.play();
rainPlay = 1;
}
}
} else if (currentString.slice(0,2) == "T2") {
let touch2= int(currentString.substring(3))
print(touch2)
if (touch2 < 15){
finalReady = 1;
print("ready!!!!!!!!!!!!!!!!!!!")
}
}
else if (currentString.slice(0,1) == "L") {
let light = int(currentString.substring(2));
if (light == 0 && pianoPlay == 0) {
if (finalReady == 0){
pianosound.play();
pianoPlay = 1;
}
} else if (light != 0){
pianoPlay = 0;
}
}
else if (currentString.slice(0,2) == "T3") {
let touch3= int(currentString.substring(3))
print(touch3)
if (touch3 < 15 && finalReady == 1){
print("play!!!!!!")
if (finalPlay == 0) {
song.play();
}
finalPlay = 1;
}
}
}
function extendFlower(){
flowerLen += 10;
}
function extendFlower2(){
flowerWid += 10;
}
function shrinkFlower(){
flowerLen -= 10;
}
function shrinkFlower2() {
flowerWid -=10;
}
function changeTheme(){
if (theme == 1){
theme =2;
} else if (theme==2){
theme = 1;
}
}
function draw() {
background(0);
loadPixels();
for (var y = 0; y < height; y++) {
for (var x = 0; x < width; x++) {
var index = (x + y * width) * 4;
pixels[index + 0] = x*redratio;
pixels[index + 1] = y*greenratio;
pixels[index + 2] = y*blueratio;
pixels[index + 3] = 255;
}
}
updatePixels();
if (blueratio <= 0){
colorDirection *= -1
} else if (blueratio >= 0.8) {
colorDirection *= -1
}
blueratio += colorDirection * 0.005
if (finalPlay == 0){
let waveform = analyzer.getValue();
strokeWeight(2);
noFill();
stroke(255);
beginShape();
for (let i = 0; i < waveform.length; i++) {
let x = map(i, 0, waveform.length, 0, width);
let y = map(waveform[i], -1, 1, 600, 0);
vertex(x, y);
}
endShape();
// rain drop
if(rainsound.isPlaying()){
for (var i = 0; i < drops.length; i = i + 1) {
drops[i].show();
drops[i].fall();
drops[i].puddle();
drops[i].reset();
}
}
if(pianosound.isPlaying()) { //sun
if (m < 90) {
m += 12;
// fill(0);
} else {
m = 0;
if (k < n-1) k++;
else k = 0;
noFill();
}
strokeWeight(6);
translate(width / 2, height / 4);
rotate(radians(t+=0.05));
ellipse(0,0,100,100)
for (let i = 0; i < n; i++) {
let ang = i * 360 / n;
let x = (r + ((k == i) ? l = 5 * sin(radians(m)) : 5)) * cos(radians(ang));
let y = (r + ((k == i) ? l = 5 * sin(radians(m)) : 5)) * sin(radians(ang));
push();
translate(x, y);
rotate(radians(ang));
line(0, 0, 35, 0);
pop();
}
}
} else if (finalPlay == 1){
// draw flower
switch (theme) {
case 1:
for (let j = 0; j < width*1.2; j += 100){
for (let k = 0; k < height*1.2; k+=100) {
push()
translate(j,k)
rotate(angle)
for (let i = 0; i < 10; i ++) {
ellipse(0,15, flowerWid, flowerLen);
rotate(PI/5);
}
pop()
}
}
angle += 0.05;
break;
case 2:
fractTree.drawL = (fractTree.drawL+1)%21
if(fractTree.drawL == 20 && fractTree.drawLimit < 4){
print("generate!!!!!!!!!!!!!!!")
fractTree.generate();
fractTree.drawLimit += 1;
} else if (fractTree.drawLimit >= 50){
fractTree.resetL()
} else if (fractTree.drawLimit >= 4) {
fractTree.drawLimit += 1;
}
fractTree.turtle();
}
}
}
/*****arduino code
#include <analogWrite.h>
const int ledPin = 13; // the pin that the LED is attached to
byte incomingBytes[2]; // a variable to read incoming serial data into
void setup() {
// initialize serial communication:
Serial.begin(9600);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
analogWriteResolution(ledPin, 12);
}
void loop() {
// see if there's incoming serial data:
if (Serial.available() > 0) {
// read the oldest byte in the serial buffer:
Serial.readBytes(incomingBytes,2);
Serial.print("arduino received: ");
Serial.print(incomingBytes[0]);
Serial.print(", ");
Serial.println(incomingBytes[1]);
if(incomingBytes[0] == 'L'){
analogWrite(ledPin,incomingBytes[1]);
}
}
}
*/