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
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
Merci beaucoup! Je pense aussi que mon ordi a du mal a supporter .
Hors ligne
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
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