Aller au contenu
TONER KEBAB WIKI
Outils pour utilisateurs
S'identifier
Outils du site
Rechercher
Outils
Afficher la page
Anciennes révisions
Exportation ODT
Liens de retour
Derniers changements
Gestionnaire Multimédia
Plan du site
S'identifier
>
Derniers changements
Gestionnaire Multimédia
Plan du site
Piste:
•
chronometre
wiki:projets:desordre:desordre
====== Désordre musigraphique ====== * Porteur du projet : Agathe Pastel * Date : 11/01/2015 * Contexte : Macro projet DSAA ====== Description ====== Désordre Musigraphique est une installation visuelle et sonore qui propose une expérience de l'ordre et du désordre en musique et en graphisme. ====== Matériel ====== * Vidéoprojecteur * enceintes * processing * arduino * 2capteurs de flexions (ou 2 potentiomètres) * 2 résistances 22Ω ====== Code ====== __Arduino (Exemple : SerialCallResponse)__ <code> int firstSensor = 0; // first analog sensor int secondSensor = 0; // second analog sensor int thirdSensor = 0; // digital sensor int inByte = 0; // incoming serial byte void setup() { // start serial port at 9600 bps: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } pinMode(2, INPUT); // digital sensor is on digital pin 2 establishContact(); // send a byte to establish contact until receiver responds } void loop() { // if we get a valid byte, read analog ins: if (Serial.available() > 0) { // get incoming byte: inByte = Serial.read(); // read first analog input, divide by 4 to make the range 0-255: firstSensor = analogRead(A0)/4; // delay 10ms to let the ADC recover: delay(10); // read second analog input, divide by 4 to make the range 0-255: secondSensor = analogRead(1)/4; // read switch, map it to 0 or 255L thirdSensor = map(digitalRead(2), 0, 1, 0, 255); // send sensor values: Serial.write(firstSensor); Serial.write(secondSensor); Serial.write(thirdSensor); } } void establishContact() { while (Serial.available() <= 0) { Serial.print('A'); // send a capital A delay(300); } } </code> __Processing__ <code> //importer librairie import processing.serial.*; import arb.soundcipher.*; //créer des instance de l'objet SoundCipher SoundCipher sc = new SoundCipher(this); SoundCipher sc2 = new SoundCipher(this); SoundCipher sc3 = new SoundCipher(this); //_______initialisation des variables boolean crasse = false ; boolean modu = false ; //créer une liste qui correspond à une série de hauteur de note MIDI float[] pitchSet = {57, 60, 60, 60, 62, 64, 67, 67, 69, 72, 72, 72, 74, 76, 79}; float setSize = pitchSet.length; float keyRoot = 0; float density = 0.8; int bgcolor; // Background color int fgcolor; // Fill color Serial myPort; // serial port int[] serialInArray = new int[3]; // cases dans lequelle on met ce qui est reçu int serialCount = 0; // compte du nombre de byte reçu int xpos, ypos; //coordonée de départ boolean firstContact = false; // Whether we've heard from the microcontroller //definition des variables float x; float y; float a=0; //angle de départ float b=0; //angle de départ float l=10; //largeur elipse de départ float h=10; //hauteur elipse depart void setup() { //fond size(1080, 700); background(250, 250, 250); colorMode(HSB); // mode couleur TSL (teinte,saturation,brillance) smooth(); noStroke(); //sans contour frameRate(8); sc.instrument(11); // l'objet sc doit jouer l'instrument 11 (vibraphone) sc2.instrument(88);// l'objet sc1 doit jouer l'instrument 88 (fantasia) sc3.instrument(98);//l'objet sc2 doit jouer l'instrument 98 (crystal) // Print a list of the serial ports, for debugging purposes: printArray(Serial.list()); // I know that the first port in the serial list on my mac // is always my FTDI adaptor, so I open Serial.list()[0]. // On Windows machines, this generally opens COM1. // Open whatever port is the one you're using. String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600); } void draw() { if (keyPressed == true){ //si touche clavier pressé crasse = true; //alors booléen crasse est vrai } if (mousePressed == true) { //si touche souris pressé sc3.playNote(xpos/2, random(90)+30, random(20)/10 + 0.2);//alors sc3 joue des notes indépendentes du pitchSet translate(width/2,height/2); //alors le centre du quadrilataire exécute rotate(b); //une rotation qui augmente de 0.4 à chaque nouveau frame de draw float r=ypos*5; //définir une variable r incluant le potentiomètreY fill(r,random(210),255); //colorer le quadrilataire en gérant la teinte grâce à r(potentiomètreY) float f= random(xpos/10); //définir une variable r incluant le potentiomètreX quad(10,35,f,10*f,75,80,30*f,65);//forme du quadrilataire à 4 sommets dont certaine coordonnée son gérée par potentiomètreX b+=0.4; // incrémentation de l'angle de rotation } //___________haronie________________ else { if ((random(1) < density) && (crasse==true)) { // si le booléen crasse et en position vraie float[] pitches = {pitchSet[(int)ypos/100]+keyRoot-12, pitchSet[(int)random(setSize)]-12}; //définition d'une liste faisant varier la hauteur de note //sc joue un ensemble de note dont la hauteur est définie par la liste pitchSet et la valeur du potentiomètreX sc.playNote(pitchSet[(int)xpos/100]+keyRoot, random(90)+30, random(20)/10 + 0.2); // la fonction playnote(double pitch, double dynamic, double duration) sc2.playChord(pitches, random(50)+30, 4.0); // sc2 joue des accord en fonction de la liste pitches qui est dépendante de la liste pitchSet } //frameRate(50);//cadence du draw if(crasse == true) { //si le booleen crasse est en position vraie translate(width/2,height/2);//alors effectuer une traslation du centre du cercle rotate(a);//effectuer une rotation don l'angle s'incrémentera de 0.1 à chaque rafraîchissement du draw float r=ypos; if (r<30){ //taille supèrieure limite r = 50; } fill(r,random(210),random(200)); //colorer le cercle en fonction du potentiomètre ypos float taille = xpos ; //définir une variable taille qui est commandé par le potentionmètre X /*if (taille > 350){ //taille supèrieure limite taille = 350; } if (taille < 50){ //taille infèrieure limite taille = 50; }*/ ellipse(300, 0, taille, taille);// définir la taille et la position du cercle //incrémentation angle de rotation a+=0.1; } } } void serialEvent(Serial myPort) { // read a byte from the serial port: int inByte = myPort.read(); // if this is the first byte received, and it's an A, // clear the serial buffer and note that you've // had first contact from the microcontroller. // Otherwise, add the incoming byte to the array: if (firstContact == false) { if (inByte == 'A') { myPort.clear(); // clear the serial port buffer firstContact = true; // you've had first contact from the microcontroller myPort.write('A'); // ask for more } } else { // Add the latest byte from the serial port to array: serialInArray[serialCount] = inByte; serialCount++; // If we have 3 bytes: if (serialCount > 2 ) { xpos = serialInArray[0]; ypos = serialInArray[1]; fgcolor = serialInArray[2]; // print the values (for debugging purposes only): println(xpos + "\t" + ypos + "\t" + fgcolor); // Send a capital A to request new sensor readings: myPort.write('A'); // Reset serialCount: serialCount = 0; } } } </code> ====== présentation visuelle du code ====== {{:wiki:projets:desordre:presen_arduino2.pdf|slide présentation}} ====== problèmes rencontrés ====== * **librairie musicale** : réussir à comprendre la librairie SoundCipher * - faire jouer 2 gammes à un moment différents : mettre en place un système de booléens * - **capteurs flexions** : problème de communication entre la carte arduino et processing ====== Photos ====== (bientôt) ====== Schémas ====== {{:wiki:projets:desordre:untitled_sketch_bb.jpg?direct&300|montage arduino potentiomètres}} {{:wiki:projets:desordre:untitled_sketch_bbdddd.jpg?direct&300|montage arduino capteurs flexions}} ====== Intention ====== {{:wiki:memoires:diy:plan_7.jpeg?direct&300|}} **Recherches** {{:wiki:projets:desordre:rempl2.jpeg?direct&300|}} **Liens/Références** http://www.nathangauthier.com/projets-typography/ornithologie {{youtube>n1eQ6EwOMWc?medium}} {{youtube>AjHW_2EXs28?medium}} ---- TR: des images, des images...
wiki/projets/desordre/desordre.txt
· Dernière modification: 2015/02/04 20:53 (modification externe)
Outils de la page
Afficher la page
Anciennes révisions
Liens de retour
Exportation ODT
Haut de page