Club robotique de Sophia-Antipolis

Accueil > Projets, études > Etudes techniques > Son > Représenter les couleurs par un son

Représenter les couleurs par un son

vendredi 1er novembre 2013, par Jean B.

Après avoir utilisé une abaque de teinte pour visualiser la couleur détectée par notre capteur à filtres rouge, vert, bleu, un de nos brillants adhérents a émis l’idée de rendre audible cette combinaison de couleurs primaires pour laisser à notre cerveau la possibilité d’entendre une teinte. Après tout, on parle bien de "bruit blanc" ou de "bruit rose" !

Le code a été développé en Java sous Processing avec la bibliothèque Minim. Cela permet de combiner des signaux audio (carrés) et de les entendre avec la carte son et une paire d’enceintes.

Première tentative

On fait varier la fréquence de trois signaux carrés qui sont superposés.

Voici le code :

import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;


Minim minim;

AudioOutput out;
SquareWave square1;
SquareWave square2;
SquareWave square3;

int z = 440;

void setup()
{
  size(440, 440);

  minim = new Minim(this);

  out = minim.getLineOut();

  square1 = new SquareWave(440, 1, 44100);

  square2 = new SquareWave(730, 1, 44100);

  square3 = new SquareWave(900, 1, 44100);


  out.addSignal(square1);
  out.addSignal(square2);
  out.addSignal(square3);
}



void draw()
{
  square1.setFreq(220+mouseX);
  square2.setFreq(660+mouseY);
  square3.setFreq(800+z);
  
  if ( key == 'm' )
  {
    out.mute();
  }

  if (key == 'u') 
  {
    out.unmute();
  }
  
  if (key == '+') 
  {
    z+=10;
  }
  
  if (key == '-') 
  {
    z-=10;
  }
}



void stop()
{
  out.close();
  minim.stop();

  super.stop();
}

On utilise la souris et le clavier pour simuler les variations de fréquence du capteur sur trois axes correspondant aux couleurs primaires rouge, vert et bleu.

Voici le résultat :

Seconde tentative

On utilise cette fois-ci le volume de trois signaux carrés de fréquence fixe (grave, moyen et aigu) :

import ddf.minim.spi.*;
import ddf.minim.signals.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;
import ddf.minim.effects.*;


Minim minim;

AudioOutput out;
SquareWave square1;
SquareWave square2;
SquareWave square3;

int z = 250;

void setup()
{
  size(500, 500);

  minim = new Minim(this);

  out = minim.getLineOut();

  square1 = new SquareWave(220, 1, 44100);

  square2 = new SquareWave(440, 1, 44100);

  square3 = new SquareWave(880, 1, 44100);


  out.addSignal(square1);
  out.addSignal(square2);
  out.addSignal(square3);
}



void draw()
{
  square1.setAmp(mouseX/500.0);
  square2.setAmp(mouseY/500.0);
  square3.setAmp(z/500.0);
  
  if ( key == 'm' )
  {
    out.mute();
  }

  if (key == 'u') 
  {
    out.unmute();
  }
  
  if (key == '+') 
  {
    z+=10;
    println(z);    
  }
  
  if (key == '-') 
  {
    z-=10;
    println(z);
  }
  
  key=0;
}



void stop()
{
  out.close();
  minim.stop();

  super.stop();
}

Le résultat n’est pas probant, mais sera testable lors de nos ateliers.

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.