Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2015-12-04 21:39:59 Waveform dampen

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Waveform dampen



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

 

#2 2015-12-05 11:22:36 Re : Waveform dampen

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Waveform dampen



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

 

#3 2015-12-05 19:13:38 Re : Waveform dampen

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: Waveform dampen



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

 

#4 2015-12-05 19:46:00 Re : Waveform dampen

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Waveform dampen



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

 

#5 2015-12-05 21:04:40 Re : Waveform dampen

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: Waveform dampen



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

 

#6 2015-12-06 09:27:39 Re : Waveform dampen

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Waveform dampen



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

 

#7 2015-12-07 16:26:16 Re : Waveform dampen

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: Waveform dampen



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

 

#8 2015-12-07 22:38:41 Re : Waveform dampen

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Waveform dampen



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

 

#9 2015-12-08 14:35:40 Re : Waveform dampen

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Re: Waveform dampen



et bien je te remercie
pour ton coup de pouce et tes explications

a+
Danny

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025