Wiki

Reso-nance numérique | Arts et cultures libres

Outils du site


projets:light-synth:accueil

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
projets:light-synth:accueil [2017/07/20 12:27]
resonance [Boite a rythme a led]
projets:light-synth:accueil [2018/06/09 11:33] (Version actuelle)
resonance [Boite a rythme a led]
Ligne 4: Ligne 4:
   * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]   * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]]
   * Description : synthé qui marche avec la lumiere   * Description : synthé qui marche avec la lumiere
-  * Fichiers sources : //mettre un lien//+  * Fichiers sources : voir plus bas pour les codes , design : {{ :projets:light-synth:lightsynthdesign.ai |}}
   * Lien : //mettre un lien//   * Lien : //mettre un lien//
  
Ligne 11: Ligne 11:
 ===== Note d'intention ===== ===== Note d'intention =====
 Synthé qui marche avec la lumiere : Synthé qui marche avec la lumiere :
-Plusieurs pistes sont possible, notamment en changeant les frequences des pwm avec library tone...+Plusieurs pistes sont possible, notamment en changeant les fréquences des pwm avec library Tone et Mozzi
  
 {{projets:light-synth:accueil:instrument_lumiere_minuscule.jpg?800|light-synth}} {{projets:light-synth:accueil:instrument_lumiere_minuscule.jpg?800|light-synth}}
  
-===== Notes techniques ===== +===== Codes ===== 
-Guide pas à pas et conseil pour la réalisation du projet.+Voici quelques codes pas mal... Certains utilisent les libraries Tone et Mozzi pour transformer l'arduino en petit synthé !
  
 +On capte le son emis en lumiere par des leds, via un panneau solaire.
 +Ca donne ceci :
  
-==== Code pour communiquer avec PureData COMPORT (2 led branché en 9 et 10): ==== +{{youtube>nbi2d_UTToQ?large}} 
-On controle ainsi deux pins avec tone depuis Pure Data... +//Le troisieme synth de la video est l'exemple de la librarie mozzi  : Sensor/lighttemperature...//
  
-**Patch PureData :** voir fichier 4 dans la page ressource [[http://reso-nance.org/wiki/logiciels/serial/accueil?s[]=puredata&s[]=serial]] 
  
-++++ Le code    
-<code c+> 
-String inputString = "";   // chaine de caractères pour contenir les données 
-boolean stringComplete = false;  // pour savoir si la chaine est complète 
-String fct =""; 
-String arg=""; 
-int index; 
- 
-#include <Tone.h> 
-Tone freq1; 
-Tone freq2; 
- 
-void setup() { 
-  Serial.begin(9600);     // port série 
-  freq1.begin(9); 
-  freq2.begin(10); 
-} 
- 
-void loop() { 
-  if (stringComplete) { 
-    //Serial.println(inputString);  
-    index = inputString.indexOf(' '); // on récupère la position du séparateur (l'espace " ") 
-    fct = inputString.substring(0,index); // on coupe la chaine en deux : la fonction et l'argument 
-    arg = inputString.substring(index,inputString.length()); 
-     
-    if (fct == "LED10") { 
-      freq2.play(arg.toInt(),300); 
-    } 
-    else if (fct == "LED9") { 
-      freq1.play(arg.toInt(),300);    
-    } 
- 
-    inputString = "";            // vide la chaine 
-    stringComplete = false; 
-  } 
-} 
- 
-/* 
-  SerialEvent est déclenché quand de nouvelles données sont reçues.  
-  Cett routine tourne entre chaque loop(), donc utiliser un delay la fait aussi attendre 
- */ 
-void serialEvent() { 
-  while (Serial.available()) { 
-    char inChar = (char)Serial.read(); // Récupérer le prochain octet (byte ou char) 
-    inputString += inChar; // concaténation des octets 
-    if (inChar == '\n') {  // caractère de fin pour notre chaine 
-      stringComplete = true; 
-    } 
-  } 
-} 
- 
- 
-</code> 
-++++  
  
 ==== Boite a rythme a led ==== ==== Boite a rythme a led ====
Ligne 87: Ligne 34:
  
 <code c+> <code c+>
-// 3 led au pin 11/12/13 jouant a la noire, croche et triolet+// 3 led jouant a la noire, croche et triolet
 // un potentiometre 10k en A0 : controle le tempo général... // un potentiometre 10k en A0 : controle le tempo général...
 // une photo resistance en A1 : controle un effet de delay // une photo resistance en A1 : controle un effet de delay
  
-#define led1 11   // +#define led1 5 
-#define led2 12  //pin for each led +#define led2   
-#define led3 13  //pin for each led +#define led3 10   
-#define factor 6  //pin for each led+#define factor 6  //factor for pwm tone !
  
 unsigned long previousMillis[3]; //[x] = number of leds unsigned long previousMillis[3]; //[x] = number of leds
Ligne 194: Ligne 141:
 ++++ ++++
  
-==== Synth fm avec 5 potentiomètres ====+==== Synth fm avec 5 potentiomètres avec MOZZI ====
 On controle un synthe fm avec 5 potards, On controle un synthe fm avec 5 potards,
  le son passe par la led en pin 9...  le son passe par la led en pin 9...
Ligne 340: Ligne 287:
 ++++ ++++
  
 +==== Code pour communiquer avec PureData COMPORT (2 led branché en 9 et 10): ====
 +On controle ainsi deux pins avec tone depuis Pure Data... 
  
 +**Patch PureData :** voir fichier 4 dans la page ressource [[http://reso-nance.org/wiki/logiciels/serial/accueil?s[]=puredata&s[]=serial]]
  
 +++++ Le code   
 +<code c+>
 +String inputString = "";   // chaine de caractères pour contenir les données
 +boolean stringComplete = false;  // pour savoir si la chaine est complète
 +String fct ="";
 +String arg="";
 +int index;
 +
 +#include <Tone.h>
 +Tone freq1;
 +Tone freq2;
 +
 +void setup() {
 +  Serial.begin(9600);     // port série
 +  freq1.begin(9);
 +  freq2.begin(10);
 +}
 +
 +void loop() {
 +  if (stringComplete) {
 +    //Serial.println(inputString); 
 +    index = inputString.indexOf(' '); // on récupère la position du séparateur (l'espace " ")
 +    fct = inputString.substring(0,index); // on coupe la chaine en deux : la fonction et l'argument
 +    arg = inputString.substring(index,inputString.length());
 +    
 +    if (fct == "LED10") {
 +      freq2.play(arg.toInt(),300);
 +    }
 +    else if (fct == "LED9") {
 +      freq1.play(arg.toInt(),300);   
 +    }
 +
 +    inputString = "";            // vide la chaine
 +    stringComplete = false;
 +  }
 +}
 +
 +/*
 +  SerialEvent est déclenché quand de nouvelles données sont reçues. 
 +  Cett routine tourne entre chaque loop(), donc utiliser un delay la fait aussi attendre
 + */
 +void serialEvent() {
 +  while (Serial.available()) {
 +    char inChar = (char)Serial.read(); // Récupérer le prochain octet (byte ou char)
 +    inputString += inChar; // concaténation des octets
 +    if (inChar == '\n') {  // caractère de fin pour notre chaine
 +      stringComplete = true;
 +    }
 +  }
 +}
 +
 +
 +</code>
 +++++ 
 +
 +==== Code sympa fluctuant Mozzi ====
 +2 pot volume et pitch
 +
 +++++ Le code   
 +<code c+>
 +#include <MozziGuts.h>
 +#include <Oscil.h> // oscillator template
 +#include <tables/sin2048_int8.h> // sine table for oscillator
 +
 +const char KNOB_PIN = 0; // set the input for the knob to analog pin 0
 +const char LDR_PIN = 1; // set the input for the LDR to analog pin 1
 +
 +// use: Oscil <table_size, update_rate> oscilName (wavetable), look in .h file of table #included above
 +Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA);
 +
 +byte volume;
 +
 +void setup(){
 +  startMozzi(); // :))
 +}
 +
 +
 +void updateControl(){
 +  // read the potentiometer
 +  int knob_value = mozziAnalogRead(KNOB_PIN); // value is 0-1023
 +  
 +  // map it to an 8 bit volume range for efficient calculations in updateAudio
 +  volume = knob_value >> 2;  // 10 bits (0->1023) shifted right by 2 bits to give 8 bits (0->255)
 +  
 +  // read the light dependent resistor
 +  int light_level = mozziAnalogRead(LDR_PIN); // value is 0-1023
 +
 +  light_level = map(light_level,0,1023,0,12);
 +  light_level = light_level*100 + 200;
 +
 +  // set the frequency
 +  aSin.setFreq( light_level);
 +  
 +}
 +
 +
 +int updateAudio(){
 +  // cast char output from aSin.next() to int to make room for multiplication
 +  return ((int)aSin.next() * volume) >> 8; // shift back into range after multiplying by 8 bit value
 +
 +}
 +
 +void loop(){
 +  audioHook(); // required here
 +  delay(100);
 +}
 +</code>
 +++++ 
 +
 +==== Theremin fluctuant Mozzi ====
 +2 pot (selecteur si pot ou ldr pour controler le pitch, pitch ) un ldr (pitch)....
 +
 +++++ Le code   
 +<code c+>
 +/*  
 +*/
 +
 +#include <MozziGuts.h>
 +#include <Oscil.h> // oscillator template
 +#include <tables/sin2048_int8.h> // sine table for oscillator
 +#include <RollingAverage.h>
 +#include <ControlDelay.h>
 +
 +#define INPUT_PIN 0 // analog control input
 +#define INPUT_PINA 2 // analog control input
 +#define MIX_PIN 3 // analog control input
 +
 +unsigned int echo_cells_1 = 32;
 +unsigned int echo_cells_2 = 60;
 +unsigned int echo_cells_3 = 127;
 +    int bumpy_input = 12;
 +
 +#define CONTROL_RATE 64
 +ControlDelay <128, int> kDelay; // 2seconds
 +
 +// oscils to compare bumpy to averaged control input
 +Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin0(SIN2048_DATA);
 +Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin1(SIN2048_DATA);
 +Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin2(SIN2048_DATA);
 +Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin3(SIN2048_DATA);
 +
 +// use: RollingAverage <number_type, how_many_to_average> myThing
 +RollingAverage <int, 32> kAverage; // how_many_to_average has to be power of 2
 +int averaged;
 +
 +void setup(){
 +  kDelay.set(echo_cells_1);
 +  startMozzi();
 +}
 +
 +
 +void updateControl(){
 +  int mix =  mozziAnalogRead(MIX_PIN);
 +  int pot = mozziAnalogRead(INPUT_PINA) ;
 +  int ldr = mozziAnalogRead(INPUT_PIN) ;
 +
 +if (mix > 500)
 +{
 +  bumpy_input = ldr;
 +}
 +else
 +{
 +  bumpy_input = pot;
 +}
 +
 +  
 +  averaged = kAverage.next(bumpy_input);
 +  aSin0.setFreq(averaged);
 +  aSin1.setFreq(kDelay.next(averaged));
 +  aSin2.setFreq(kDelay.read(echo_cells_2));
 +  aSin3.setFreq(kDelay.read(echo_cells_3));
 +}
 +
 +
 +int updateAudio(){
 +  return 3*((int)aSin0.next()+aSin1.next()+(aSin2.next()>>1)
 +    +(aSin3.next()>>2)) >>3;
 +}
 +
 +
 +void loop(){
 +  audioHook();
 +}
 +
 +</code>
 +++++ 
  
 ===== Matériaux et outils ===== ===== Matériaux et outils =====
/home/resonancg/www/wiki/data/attic/projets/light-synth/accueil.1500546434.txt.gz · Dernière modification: 2017/07/20 12:27 de resonance