Annonce

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


#1 2015-04-21 18:22:39 Help!! fft+class+pdf

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

Help!! fft+class+pdf



Salut tout le monde!

Voila, je galère pour mon projet de diplôme, que je fais avec processing. Il s'agit d'une "fabrique de posters". Je m'explique: L'écoute d'une musique, génère une trame sur processing (analyse FFt). Cette trame est par la suite exportée en pdf et imprimée. Ainsi, sur un poster il y a une trame et chaque poster représente une musique:

http://codelab.fr/up/shema.jpg

J'ai plein de problèmes. D'une part, j'aimerais que cette trame soit constituée de formes diverses et variées, superposées entre elle en fonction des différentes analyses FFT:

http://codelab.fr/up/formes.gif

Or je n'arrive pas a dessiner les formes que je veux, elles ne partent pas toujours du bon point. Deuxièmement, j'aimerais faire appelle à ces formes avec des class mais lorsque je fais ça, je ne sais pas trop ou placer l'analyse FFT, du coup elle ne fonctionne qu'a moitié. Enfin, J'ai un gros problème avec le PDF, il pèse une tonne, du coup je ne peux pas "enregistrer" un morceau en entier, et même quand j'arrive à exporter en PDF, je ne peux pas l'ouvrir tellement il est lourd. Comment rendre tout ça moins lourd? Bref, je suis débutante et pour le moment je travaille avec des bouts de code trouvés à droite à gauche pour représenter ce que je veux faire mais maintenant j'aimerais vraiment réussir à faire ce que j'ai prévu, les vraies formes graphiques et tout. Je commence à être en retard pour mon diplôme et j'ai vraiment besoin d'aide!!

Merci d'avance! À bientôt!

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 = 900;
int ecrany =  1200;

void setup(){
  size(ecranx,ecrany);
  background(255);
  frameRate(60);
  color(0,0,0);
   beginRecord(PDF, "poster.pdf");
 
  minim = new Minim(this);
  in = minim.getLineIn(Minim.MONO, 4096*2, 44100);
  fft = new  FFT(in.left.size(),44100);
  rectMode(CENTER);
}

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+=40;
 
  if(x > width){
    x = 0;
    y = y + 60;
  }
 
  map_frequence = round(map(frequence, 20, 20000, 0,360));
  fill(map_frequence*9,255,120);
  if(map_frequence>360){
    map_frequence = map_frequence - 200;
  }
  stroke(map_frequence*9, 10);
  strokeWeight(2);
  for(int j = 0; j < in.bufferSize() - 1; j++){
    ellipse(x,y,in.left.get(j)*90,in.left.get(j)*90); 
  }
  map_frequence = round(map(frequence, 20, 20000, 0,360));
  fill(map_frequence*9,100,255);
  noStroke();
  if(map_frequence>360){
    map_frequence = map_frequence - 200;
  }
  for(int j = 0; j < in.bufferSize() - 1; j++){
    rect(x,y,in.left.get(j)*30,in.left.get(j)*30); 
  }

}

void keyPressed() {
  if (key == 'q') {
    endRecord();
    exit();
  }
}

voici mon test avec intégration de class:

Minim minim;
AudioInput in;
FFT fft;
Circle myCircle;

int x;
int y;


void setup()
{
size (900,1200);
background(255);
frameRate(60);
color(0,0,0);
   
myCircle = new Circle(x,y);
}

void draw()
{
myCircle.run();
}

---------------------------------------------------------------------------------------

import ddf.minim.*;
import ddf.minim.analysis.*;

class Circle
{float x=0;
float y=0;

float amplitude;
int frequence;
float amplitude_max = 0;

float frequency;

Circle(float _x, float _y)
{  x = _x;
   y = _y;
   
minim = new Minim(this);
in = minim.getLineIn(Minim.MONO, 4096*2, 44100);
fft = new  FFT(in.left.size(),44100);

  }
 
  void run()
{
display();
ecart();
}

void ecart()
{x+=40;
 
  if(x > width){
    x = 0;
    y = y + 60;}
  }

void display()
{for(int i = 0; i<20000; i++){
    amplitude = fft.getFreq(i);
   
    if (amplitude > amplitude_max){
      amplitude_max = amplitude;
      frequence = i;}}
 
  frequency = round(map(frequence, 20, 20000, 0,360));
  if(frequency>360){
  frequency = frequency - 200;}
  for(int j = 0; j < in.bufferSize() - 1; j++){
  fill(frequency*9,255,255);
  ellipse(x,y,in.left.get(j)*80,in.left.get(j)*80);
  noStroke();}
  }
}

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025