Bonjour,
Je travaille actuellement sur la relation entre architecture et musique. J'ai découvert à cette occasion Processing mais je n'ai encore jamais fait de programmation et je galère un peu…
J'ai trouvé un code qui retranscrit le volume du son du microphone en cercle. Plus le volume est élevé, plus le cercle a un diamètre important et plus son centre se décale du point précédent. Tout compris ? :p
J'aimerai garder ce codage et l'améliorer de façon à ce que le centre du cercle se décale sur l'axe des y selon la fréquence du son et que le centre du cercle sur x dépendent du temps et non du volume.
Voici mon scripte actuel :
import ddf.minim.*;
float x;
float y;
Minim minim;
AudioInput input;
void setup () {
// Sketch einstellen
size (1000, 450);
smooth();
stroke (255, 25);
noFill ();
// Startposition festlegen
x = 50;
y = 150;
// Audiotoolkit anlegen
minim = new Minim (this);
input = minim.getLineIn (Minim.STEREO, 512);
background (0);
}
void draw () {
// Kreisgröße Abhängig von Lautstärke
float dim = input.mix.level () * width;
// Kreis x-Position verschieben
x += input.mix.level () * 20;
// Kreis zeichnen
ellipse (x, y, dim, dim);
if (x > width) {
x = 50;
y += 150;
}
}
Auriez vous une idée ?
Hors ligne
bonjour
j'ai modifié ton programme,j'ai mis la valeur du son sur la variable Y ,regarde si sa te convient.
import ddf.minim.*; float x; float y; Minim minim; AudioInput input; void setup () { // Sketch einstellen size (1000, 450); smooth(); stroke (255, 25); noFill (); // Startposition festlegen x = 150; y = 150; // Audiotoolkit anlegen minim = new Minim (this); input = minim.getLineIn (Minim.STEREO, 512); background (0); } void draw () { // Kreisgröße Abhängig von Lautstärke float dim = input.mix.level () * width; // Kreis x-Position verschieben y+= input.mix.level () * 20; // Kreis zeichnen ellipse (x, y, dim, dim); if (x > width) { x = 50; y += 150; } }
Hors ligne
Bonjour,
Merci pour la réponse ! J'ai regardé le nouveau script mais je comprend pas ce qui a changé selon l'ancien à part que les cercles se dessinent le long de l'axe Y… Qu'est ce que tu as changé exactement comme variable ?
Ce que j'essaye de faire c'est que la position du centre du cercle sur Y dépendent de la fréquence (Hertz) du son et non du volume et que sa position en X dépende du temps. Le volume du son définirait alors uniquement le diamètre du cercle.
Merci d'avance !
Margot
Hors ligne
bonjour
dans ton programme j'ai changé la ligne y+= input.mix.level () * 20; je comprend ce que tu veux faire,mais ton programme n'as pas les données nécessaires pour faire ce que tu veux ;tu ne capte que la valeur du son ;je vais regarder comment l'on peut capter une fréquence .
Hors ligne
un exemple pour la frequence
/* frequencyModulation <p> A simple example for doing FM (frequency modulation) using two Oscils. Use the mouse to control the speed and range of the frequency modulation. <p> Author: Damien Di Fede */ // import everything necessary to make sound. import ddf.minim.*; import ddf.minim.ugens.*; // create all of the variables that will need to be accessed in // more than one methods (setup(), draw(), stop()). Minim minim; AudioOutput out; // the Oscil we use for modulating frequency. Oscil fm; // setup is run once at the beginning void setup() { // initialize the drawing window size( 512, 200, P3D ); // initialize the minim and out objects minim = new Minim( this ); out = minim.getLineOut(); // make the Oscil we will hear. // arguments are frequency, amplitude, and waveform Oscil wave = new Oscil( 200, 0.8, Waves.TRIANGLE ); // make the Oscil we will use to modulate the frequency of wave. // the frequency of this Oscil will determine how quickly the // frequency of wave changes and the amplitude determines how much. // since we are using the output of fm directly to set the frequency // of wave, you can think of the amplitude as being expressed in Hz. fm = new Oscil( 10, 2, Waves.SINE ); // set the offset of fm so that it generates values centered around 200 Hz fm.offset.setLastValue( 200 ); // patch it to the frequency of wave so it controls it fm.patch( wave.frequency ); // and patch wave to the output wave.patch( out ); } // draw is run many times void draw() { // erase the window to black background( 0 ); // draw using a white stroke stroke( 255 ); // draw the waveforms for( int i = 0; i < out.bufferSize() - 1; i++ ) { // find the x position of each buffer value float x1 = map( i, 0, out.bufferSize(), 0, width ); float x2 = map( i+1, 0, out.bufferSize(), 0, width ); // draw a line from one buffer position to the next for both channels line( x1, 50 + out.left.get(i)*50, x2, 50 + out.left.get(i+1)*50); } } // we can change the parameters of the frequency modulation Oscil // in real-time using the mouse. void mouseMoved() { float modulateAmount = map( mouseY, 0, height, 220, 1 ); float modulateFrequency = map( mouseX, 0, width, 0.1, 100 ); fm.frequency.setLastValue( modulateFrequency ); fm.amplitude.setLastValue( modulateAmount ); }
Hors ligne
Pages: 1