Annonce

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


#1 2015-04-14 17:24:59 Bug avec Processing FFT + PDF

matou9251
nouveau membre
Date d'inscription: 2015-04-14
Messages: 6

Bug avec Processing FFT + PDF



Bonjour à tous,

je fais des tests graphiques et visuels autour de la librairie FFT (fournier transformation). J'aimerais que la finalité soit un genre de poster qui présente une trame et que celle-ci diffère en fonction des musiques écoutées. Ainsi, chaque poster représente une chanson. La trame se génère au fur et a mesure du morceau et je l'enregistre en PDF en appuyant sur "B" puis sur "E" pour finir l'enregistrement du PDF. J'ai réussi à faire plus ou moins ce que je voulais mais voila, à chaque fois, la trame se créer et fini par faire planter java au bout d'environ 1 min. Je ne peux donc pas créer un poster qui corresponde a un morceau entier car tout plante. Je ne comprends pas pourquoi, quelqu'un saurait comprendre la raison de ce bug?  Je sais que mon code est un peu brouillon mais je suis débutante sur processing et j'ai utilisé pas mal de petits morceaux à droite et à gauche.

Bonne journée,

Voici mon code:


import ddf.minim.*;
import ddf.minim.analysis.*;
import processing.pdf.*;

Minim minim;
AudioInput in;
FFT fft;
PGraphicsPDF pdf; 

float amplitude;
int frequence;
float amplitude_max = 0;

int x;
int y;

float map_frequence;

int ecranx = 1240;
int ecrany =  2000;

void setup(){

 
  size(ecranx,ecrany);
  background(255);
  frameRate(60);
  color(0,0,0);

 
  minim = new Minim(this);
  in = minim.getLineIn(Minim.MONO, 4096*2, 44100);
  fft = new  FFT(in.left.size(),44100);
}

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+=frequence/18;
 
  if(x > width){
    x = 0;
    y = y +80;
  }
 
  map_frequence = round(map(frequence, 20, 20000, 0,360));
  fill(120,map_frequence*4,map_frequence*7);
  if(map_frequence>360){
    map_frequence = map_frequence - 200;
  }
  stroke(20,204,map_frequence*8,map_frequence*8);
  strokeWeight(2);
  for(int j = 0; j < in.bufferSize() - 1; j++){
    ellipse(x,y,40,40); 
  }
  map_frequence = round(map(frequence, 20, 20000, 0,360));
  fill(255,map_frequence*8,map_frequence*2,100);
  noStroke();
  if(map_frequence>360){
    map_frequence = map_frequence - 200;
  }
  for(int j = 0; j < in.bufferSize() - 1; j++){
    ellipse(x,y,30,30);
  }

map_frequence = round(map(frequence, 20, 20000, 0,360));
  fill(map_frequence*8,170,map_frequence*2,80);
  noStroke();
  if(map_frequence>360){
    map_frequence = map_frequence - 200;
  }
  for(int j = 0; j < in.bufferSize() - 1; j++){
    ellipse(x,y,20,20);
  }
  map_frequence = round(map(frequence, 20, 20000, 0,360));
  fill(0,160,map_frequence*6,map_frequence*10);
  noStroke();
  if(map_frequence>360){
    map_frequence = map_frequence - 200;
  }
  for(int j = 0; j < in.bufferSize() - 1; j++){
    ellipse(x,y,10,10);
  }

}

void keyPressed() {
  if (key == 'B' || key == 'b') {       
    beginRecord(PDF, "letsdance.pdf");     
    background(255);                     
  } else if (key == 'E' || key == 'e') { 
    endRecord();                         
    exit();                             
  }
}

Hors ligne

 

#2 2015-04-15 11:03:25 Re : Bug avec Processing FFT + PDF

jojolaglaise
membre
Lieu: Basse Normandie
Date d'inscription: 2014-04-20
Messages: 137
Site web

Re: Bug avec Processing FFT + PDF



Effectivement, je reconnais quelques petits morceaux de ton code :-)

Avec le mode PDF, toutes tes formes sont vectorielles, ton ordinateur pourrait avoir du mal à supporter toutes tes formes générées... C'est un peu le cas pour moi aussi (mon ordinateur n'est plus tout jeune non plus):

Pour ma part, j'arrive à exporter un .pdf sans problème depuis Processing avec un

beginRecord(PDF,"son.pdf");

dans le setup() et une condition à la fin de draw():

if(y>=ecrany){//si on atteint le bas, sauvegarde
    print("stop");
    endRecord();
    exit();
  }

En revanche, difficile d'ouvrir le .pdf avec Aperçu, ou sur Illustrator. Je pense que le problème ne se situe pas spécifiquement au niveau de java, mais du fichier peut-être un peu lourdaud...

Dernière modification par jojolaglaise (2015-04-15 11:12:49)

Hors ligne

 

#3 2015-04-15 11:58:18 Re : Bug avec Processing FFT + PDF

matou9251
nouveau membre
Date d'inscription: 2015-04-14
Messages: 6

Re: Bug avec Processing FFT + PDF



Merci beaucoup! Je pense aussi que mon ordi a du mal a supporter smile.

Hors ligne

 

#4 2015-04-15 16:19:54 Re : Bug avec Processing FFT + PDF

jojolaglaise
membre
Lieu: Basse Normandie
Date d'inscription: 2014-04-20
Messages: 137
Site web

Re: Bug avec Processing FFT + PDF



Sinon pour imprimer ton poster, on pourrait aussi sauvegarder ce qui a été généré en image matricielle en bonne définition, donc sans passer par du vectoriel... On peut faire cela avec PGraphics()...

https://processing.org/tutorials/print/

Dernière modification par jojolaglaise (2015-04-15 16:28:04)

Hors ligne

 

#5 2015-04-15 17:12:15 Re : Bug avec Processing FFT + PDF

matou9251
nouveau membre
Date d'inscription: 2015-04-14
Messages: 6

Re: Bug avec Processing FFT + PDF



Super! c'est trop cool parce que en effet j'arrive à l'imprimer en pdf mais j'ai vraiment du mal à l'ouvrir.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024