bonjour a tous
voila j'ai ce bout de code qui me donne une waveform et a la fin de la ligne d'onde il y a un ellipse
mon problème est que la hauteur est beaucoup trop haute pour la grosseur des ellipse j'ai donc besoin que la ligne commence a une hauteur basse et rendu un peu plus loin sur la ligne a pleine hauteur
dans le passer je transférais via un array sur OSC de pure data a processing les valeurs de la sorti du son
mais maintenant j'ai mis l'audio dans processing via la librarie bead moins de complication
javais une fonction dampen que javais trouver sur le site de processing et qui fonctionnais très bien mais vue que je n’utilise plus les arrays de son je ne sais pas comment l’implémenter dans mon code
je ne sais pas si j'ai été claire mais voici le code
vous comprendrez peut être mieux avec un essais
merci danny
import beads.*; import org.jaudiolibs.beads.*; AudioContext ac; Glide frequencyGlide; void setup() { size(600,600); declarationAudio(); } void draw() { background(0); ellipse(width/2,height/2,10,10); drawWaveForm(mouseX,mouseY,width/2, height/2); } void drawWaveForm(float xini, float yini, float xfin, float yfin){ stroke(255); float delta = atan2((yfin-yini),(xfin-xini)); float distance = dist(xini, yini, xfin, yfin); float scalefactorY = 100; int range; pushMatrix(); translate(xini,yini); fill(255); ellipse(0,0,10,10); rotate(delta); for(int i = 0; i < ac.getBufferSize() - 1; i++){ float x1 = map(i, 0, ac.getBufferSize(), 0, distance); float x2 = map(i+1, 0, ac.getBufferSize(), 0, distance); line(x1, ac.out.getValue(0,i)*scalefactorY, x2, ac.out.getValue(0,i+1)*scalefactorY); } popMatrix(); } void declarationAudio(){ ac = new AudioContext(); frequencyGlide = new Glide(ac, 0.0, 50); WavePlayer wp = new WavePlayer(ac, 1000, Buffer.SINE); Gain g = new Gain(ac, 1, 0.2); g.addInput(wp); ac.out.addInput(g); ac.start(); }
et voici le code dampen que j'utilisais
void dampen(int range) { for (int x=0; x<range; x++) { yvalues[x] *= (float) x/range; yvalues[yvalues.length-1-x] *= (float) x/range; } }
Hors ligne
Bonjour,
Tes explications ne sont pas claires du tout. Est-ce un truc comme cela que tu souhaites ?
import beads.*; import org.jaudiolibs.beads.*; AudioContext ac; Glide frequencyGlide; void setup() { size(600, 600); declarationAudio(); } void draw() { background(0); ellipse(width/2, height/2, 10, 10); drawWaveForm(mouseX, mouseY, width/2, height/2); } void drawWaveForm(float xini, float yini, float xfin, float yfin) { stroke(255); float delta = atan2((yfin-yini), (xfin-xini)); float distance = dist(xini, yini, xfin, yfin); pushMatrix(); translate(xini, yini); fill(255); ellipse(0, 0, 10, 10); rotate(delta); for (int i = 0; i < ac.getBufferSize() - 1; i++) { float x1 = map(i, 0, ac.getBufferSize(), 0, distance); float x2 = map(i+1, 0, ac.getBufferSize(), 0, distance); float amplitude = (ac.getBufferSize() - i) * 0.5; line(x1, ac.out.getValue(0, i) * amplitude, x2, ac.out.getValue(0, i+1) * amplitude); } popMatrix(); } void declarationAudio() { ac = new AudioContext(); frequencyGlide = new Glide(ac, 0.0, 50); WavePlayer wp = new WavePlayer(ac, 1000, Buffer.SINE); Gain g = new Gain(ac, 1, 0.2); g.addInput(wp); ac.out.addInput(g); ac.start(); }
Hors ligne
bonjour
je me doutais bien que ce serais mal compris je ne l'ai pas très bien expliquer d’ailleurs
ton code c'est presque ça il commence petit mais il fini gros alors qu'il faut qu'il commence petit et finisse petit
voila un site web qui explique le damping
http://clas.mq.edu.au/speech/acoustics/ … mping.html
j’espère avoir été un peu plus claire
merci
Danny
Hors ligne
Ce n'est toujours pas clair, il y a contradiction dans ce que tu veux. J'en déduis avec le lien que tu as posté ceci. Remplace la ligne qui définit l'amplitude par celle-ci :
float amplitude = i * 0.5;
Hors ligne
regarde ce code, comment l’onde fini a la position de la souris je veux la même chose des 2 coter de l'onde. soit les deux extrémité petit et le centre plus gros
import beads.*; import org.jaudiolibs.beads.*; AudioContext ac; Glide frequencyGlide; void setup() { size(600, 600); declarationAudio(); } void draw() { background(0); ellipse(width/2, height/2, 10, 10); drawWaveForm(mouseX, mouseY, width/2, height/2); } void drawWaveForm(float xini, float yini, float xfin, float yfin) { stroke(255); float delta = atan2((yfin-yini), (xfin-xini)); float distance = dist(xini, yini, xfin, yfin); pushMatrix(); translate(xini, yini); fill(255); ellipse(0, 0, 10, 10); rotate(delta); for (int i = 0; i < ac.getBufferSize() - 1; i++) { float x1 = map(i, 0, ac.getBufferSize(), 0, distance); float x2 = map(i+1, 0, ac.getBufferSize(), 0, distance); float amplitude = i * 0.5; line(x1, ac.out.getValue(0, i) * amplitude, x2, ac.out.getValue(0, i+1) * amplitude); } popMatrix(); } void declarationAudio() { ac = new AudioContext(); frequencyGlide = new Glide(ac, 0.0, 50); WavePlayer wp = new WavePlayer(ac, 440, Buffer.SINE); Gain g = new Gain(ac, 1, 0.2); g.addInput(wp); ac.out.addInput(g); ac.start(); }
Hors ligne
Tu avais tous les éléments pour le faire toi-même. Voici ma proposition :
float amplitude = (i <= ac.getBufferSize() / 2) ? i : ac.getBufferSize() - i;
Hors ligne
c'est effectivement ça
c'est la première fois que je vois cette syntaxe la ! après l'avoir étudier je comprend mieux
mais il y a t'il une différence entre utiliser les ? : versus les if else ?
ex: exécution plus rapide ou compréhension etc.
merci pour ton aide
Danny
Hors ligne
Bonsoir,
Je ne pense pas qu'il y ait une influence sur les temps d'exécution, mais cette écriture permet d'avoir un code plus compact.
Une fois que l'on a bien saisi la syntaxe, je trouve qu'elle apporte de la lisibilté car on voit vraiment que c'est une affectation en fonction d'un paramètre.
Cela est très subjectif néanmoins.
Hors ligne
et bien je te remercie
pour ton coup de pouce et tes explications
a+
Danny
Hors ligne