From c9af7bb67bfefc3f37b4cdd4a066a29138f202b3 Mon Sep 17 00:00:00 2001 From: piernov Date: Thu, 13 Mar 2014 16:48:55 +0100 Subject: Importation du projet --- Processing-js/Synthe3000.pde | 198 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 Processing-js/Synthe3000.pde (limited to 'Processing-js/Synthe3000.pde') diff --git a/Processing-js/Synthe3000.pde b/Processing-js/Synthe3000.pde new file mode 100644 index 0000000..97f205a --- /dev/null +++ b/Processing-js/Synthe3000.pde @@ -0,0 +1,198 @@ +/* @pjs preload="PartitionLune.png"; */ + +void calcScore() +{ + score = 0; + float tmpScore = 0; + for (int i=0; i<=numnote; i++) // Pour chaque note cliquée + { + for (int j=0; j < tmpNotes.length; j++) // La comparer à chaque note de la partition + { + if (notePressed[i][0] != tmpNotes[j][0]) // Si la note est différente + continue; // Passer à la note suivante + if(i == 0 && j == 0) // Si c'est la toute première note + tmpScore = 1; // Donner d'office un score de 1000 + if(i == 0 || j == 0) // Si on est à la première note d'un des deux tableaux + continue; // Passer à la note suivante + float deltaTime = sqrt(abs((notePressed[i][1]-notePressed[i-1][1]) - (tmpNotes[j][1]-tmpNotes[j-1][1]))); // Calcul de la différence de durée de la note de la partition et de la note cliquée passé à la racine carrée pour donner un résultat plus adapté + if (deltaTime == 0) // Si les notes ont exactement la même durée + tmpScore = 1; // Donner un score de 1000 + else if (1/((float)deltaTime) > tmpScore) // Si le score est le plus élevé pour une note cliquée comparée à plusieurs note de la partition + tmpScore = 1/((float)deltaTime); // Enregistrer ce score (l'inverse, puisque que plus la différence de temps est grande, moins le score est important) + } + score += tmpScore*1000; + tmpScore = 0; + } +} + +void setup() { + PartitionLune = loadImage(imagePartition); // Charge l'image de la partition + initSynth(); + defineKeys(); + size(1130,650); + background(255); + PFont myFont = createFont("Boingo", 32); + textFont(myFont); + drawKeyboard(); + drawDisplay(); + dimage(PartitionLune, imageCoordinates[0], imageCoordinates[1], imageSize[0], imageSize[1]); +} + +void draw() { + + if (events[MOUSEPRESSED] || events[KEYPRESSED]) // Si un clic a eu lieu, mettre à jour + { + playNotes(); + drawKeyboard(); + drawDisplay(); + } + else if (events[MUSICSTARTED]) // Ou si la musique est lancée + { + + if (events[MUSICFINISHED]) + { + events[MUSICSTARTED] = false; + events[MUSICFINISHED] = false; + drawDisplay(); + } + else + { + playNotes(); + drawKeyboard(); + } + } + if (events[RECORDINGSTARTED]) + { + if (events[RECORDINGSTOPPED]) + { + events[RECORDINGSTARTED] = false; + notePressed[0][1] = 0; + calcScore(); + numnote = 0; + drawDisplay(); + } + } + events[MOUSEPRESSED] = false; + events[KEYPRESSED] = false; + events[PLAYPRESSED] = false; +} + +int whiteKeys() // Détection du clic sur une touche blanche +{ + int activatedKey = 0; + for (int j=0; j= xPos*windowSize[0]) && (mouseX <= (xPos+(keyWidth[1]/(numOctaves)))*windowSize[0]) && (mouseY <= (keyboardYCoordinate+keyHeight[1])*windowSize[1])) + activatedKey = (j*7)+(i+1); + } + } + return activatedKey; +} + +int blackKeys() // Détection du clic sur une touche noire +{ + int activatedKey = 0; + for (int j=0; j= xPos*windowSize[0]) && (mouseX <= (xPos+(keyWidth[0]/(numOctaves)))*windowSize[0]) && (mouseY <= (keyboardYCoordinate+keyHeight[0])*windowSize[1])) + activatedKey = (j*5)+(i+1); + } + } + return activatedKey; +} + +void mousePressed() { + events[MOUSEPRESSED] = true; + + if (mouseY >= keyboardYCoordinate*windowSize[1]) // Si le clic est effectué au niveau du clavier + { + int activatedKey = blackKeys(); + + if (activatedKey == 0) + { + activatedKey = whiteKeys(); + if (activatedKey == 0) + return; + processNote(activatedKey, true, true, false); + } + else processNote(activatedKey, false, true, false); + } + else + { + if (!events[RECORDINGSTARTED] && sqrt(pow((playButtonCoordinates[0]*windowSize[0] - (float)mouseX), 2) + pow((playButtonCoordinates[1]*windowSize[1] - (float)mouseY), 2)) <= buttonRadius*windowSize[0]) // Si une touche d'un chiffre est cliquée (distance entre le centre du cercle et l'endroit cliqué inférieur au rayon) + events[PLAYPRESSED] = true; + if (!events[MUSICSTARTED] && sqrt(pow((recordButtonCoordinates[0]*windowSize[0] - (float)mouseX), 2) + pow((recordButtonCoordinates[1]*windowSize[1] - (float)mouseY), 2)) <= buttonRadius*windowSize[0]) // Si une touche d'un chiffre est cliquée (distance entre le centre du cercle et l'endroit cliqué inférieur au rayon) + { + if (events[RECORDINGSTARTED]) + events[RECORDINGSTOPPED] = true; + else if (events[RECORDINGSTOPPED]) + { + events[RECORDINGSTARTED] = true; + events[RECORDINGSTOPPED] = false; + score = -1; + } + else + events[RECORDINGSTARTED] = true; + } + } +} + +void mouseReleased() +{ + events[MOUSEPRESSED] = true; + + if (mouseY >= keyboardYCoordinate*windowSize[1]) // Si le clic est effectué au niveau du clavier + { + int activatedKey = blackKeys(); + + if (activatedKey == 0) + { + activatedKey = whiteKeys(); + if (activatedKey == 0) + return; + processNote(activatedKey, true, false, false); + } + else processNote(activatedKey, false, false, false); + } +} + +void keyPressed() { + events[KEYPRESSED] = true; + + if (keyCode < 523) + { + int activatedKey = touchesNoires[keyCode]; + + if (activatedKey == 0) + { + activatedKey = touchesBlanches[keyCode]; + if (activatedKey == 0) + return; + processNote(activatedKey, true, true, false); + } + else processNote(activatedKey, false, true, false); + } +} + +void keyReleased() +{ + events[KEYPRESSED] = true; + + if (keyCode < 523) + { + int activatedKey = touchesNoires[keyCode]; + + if (activatedKey == 0) + { + activatedKey = touchesBlanches[keyCode]; + if (activatedKey == 0) + return; + processNote(activatedKey, true, false, false); + } + else processNote(activatedKey, false, false, false); + } +} + -- cgit v1.2.3-54-g00ecf