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.