St Lucophone

Le "St Lucophone" à été réalisé à ma sortie de StLuc. Initialement, c'est un instrument de musique qui utilise une tablette graph graphqiue pour moduler une onde (voir skecth Processing). Ensuite, j'ai décidé d'y ajouter des ventilateurs de manière à optimiser le contrôle du pendule.

Version 1

Une simple tablette graphique WACOM reliée sans fil à un ordinateur sur lequel tourne un sketch processing. Le sketch utilise les valeurs mouseX et mouseY pour moduler une onde sonore. L'instrument se tient par une poignée en haut et se joue en effectuant des mouvement qui vont faire bouger le stylet pendu.

Version 2

Dans la seconde version, les mouvements du stylet sont modifiés par trois ventilateurs d'ordinateur. Ces ventilateurs disposent d'un petit circuit imprimé avec un MOFSET qui permet de controler leur vitesse. Les ventilateurs sont alimentés en 12V par une alimentation de PC, chacun des trois ventilateurs sont reliés à des potentiomètres qui controlent leur vitesse.

Améliorations

  • Ajouter un quatrième ventilateur
  • Comment presenter ce travail ?
    • Performance live ?
    • Sequence transmise aux ventilos par un micro controleur ?
  • Support plus pratique à transporter, pliable ?
/* StLucophone - Software - V 0.2
 * - Simple oscillation generator.
 * - Mouse following particles 
 */

import ddf.minim.*;
import ddf.minim.ugens.*;
 
Minim       minim;
AudioOutput out;
Oscil       wave;
Delay accelerationDelay;

// nombres de particules
int num = 5000; 
Particle[] particle = new Particle[num];

void setup(){
  noCursor();
  
  // Plein ecran
  size(1248, 800, P3D);
  background(255);
  
  // Anti Aliasing
  smooth();
  noStroke();
  //fill particle array with new Particle objects
  for(int i=0; i 0.45f){
         dir.mult(1);
        }
        else{
          dir.mult(-2);
      }
    }
    applyForce(dir);
  }
   
  void applyForce(PVector force){
    force.div(mass);
    acceleration.add(force);
  }
   
  //method to update the location of the particle, and keep its velocity within a set limit
  void update(){
    velocity.add(acceleration);
    velocity.limit(velocityLimit);
    location.add(velocity);
    acceleration.mult(0);
  }
  
  // Reaparition des particules sur le bord opposé
  void bounds(){
    if(location.y > height){
      location.y = 0;
    }
    if(location.y < 0){
      location.y = height;
    }
    if(location.x > width){
      location.x = 0;
    }
    if(location.x < 0){
      location.x = width;
    }
  }
  
  // Combinaison des fonctions
  
  void run(float tx, float ty){
    forces(tx, ty);
    display();
    bounds();
    update();
  }
}