Bonjour,
voila je travaille un peu sur procession et j'ai des petites questions,
je cherche a créer un motif qui change de couleur en fonction de l'intensité du son, et de la frequence, par exemple la couleur de base serait le rouge, la valeur de vert changerai en fonction du volume et la valeur de bleu changerai en fonction de la fréquence. Pourriez vous m'aider un peu svp
Tout en sachant que j'ai déjà fait des recherche sur la librairie minim et j'arrive a peu près a un début de résultat mais c'est pas encore sa.
Dernière modification par AdrienB (2015-01-24 14:10:48)
Hors ligne
Tu devrais aller regarder du côté de la libraire Beads.
Elle posssède une fonction qui retourne la hauteur du son :
http://www.beadsproject.net/
Il y a un pdf sur ce site qui explique ce dont tu as besoin.
Hors ligne
Merci beaucoup
Hors ligne
Ce lien (http://jaiunblog.com/3760/accordeur-avec-processing/) pourra peut-être t'aider, il s'agit d'un "accordeur" codé sous Processing;
Avec la librairie Minim on peut récupérer les fréquences en Hz d'une entrée micro.
Ensuite, pourquoi pas par exemple mapper les fréquences reçues sur les teintes du cercle chromatique (en mode HSB)?
Un petit exemple:
//on importe minim import ddf.minim.*; import ddf.minim.analysis.*; Minim minim;//declare objet minim AudioInput in;//declare objet minim entree FFT fft;//objet analysis //nos variables float amplitude; int frequence; float amplitude_max = 0; int x;//deplacement Hztl int y;//deplacement Vtcl float map_frequence; int ecranx = 1240; int ecrany = 1754; void setup(){ size(ecranx,ecrany); background(255); frameRate(60); colorMode(HSB, 360,100,100); minim = new Minim(this);//initialisation in = minim.getLineIn(Minim.MONO, 4096*2, 44100);//ou 4096 *8 fft = new FFT(in.left.size(),44100);//initialisation } void draw(){ amplitude_max = 0; amplitude = 0; frequence = 0; fft.forward(in.left); for(int i = 0; i<20000; i++){ amplitude = fft.getFreq(i); if (amplitude > amplitude_max){ amplitude_max = amplitude; frequence = i; } } println(frequence); x+=4; if(x > width){ x = 0; y = y + 50; } map_frequence = round(map(frequence, 20, 20000, 0,360)); fill(map_frequence*9,100,100); //println(map_frequence*9); if(map_frequence>360){ map_frequence = map_frequence - 200; } noStroke(); for(int j = 0; j < in.bufferSize() - 1; j++){ ellipse(x,y,in.left.get(j)*80,in.left.get(j)*80); } }
Dernière modification par jojolaglaise (2016-02-20 11:21:46)
Hors ligne
Pages: 1