Annonce

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


#1 2011-06-14 12:10:58 delay patché sur une sortie dans minim

cye_01
membre
Date d'inscription: 2011-04-15
Messages: 13

delay patché sur une sortie dans minim



Bonjour,
je suis un peu courte dans les délais et j'ai besoin justement de rajouter du délai à un signal qui est transmis à une sortie sonore. J'ai un problème de patch. Il me dit qu'il ne connait pas la méthode patch(delay) alors que cette méthode est reconnue dans le package Ugen.....
Quelqu'un pourrait m'aider SVP?
Merci d'avance, voici le code en dessous

import ddf.minim.*;
import ddf.minim.signals.*;
import ddf.minim.analysis.*;
import ddf.minim.ugens.*;

Minim minim;
AudioInput in;
AudioOutput out;
ASignal signal;
FFT fft;
Delay myDelay1;

int buffsize = 2048;
float fechant = 44100.0;
float fbandmax = 2160.0;
float fmin = 110.0;
float fmax = 860.0;
int ifbandmax = round( 2*fbandmax*buffsize/fechant );
int ifmin = round( 2*fmin*buffsize/fechant );
int ifmax = round( 2*fmax*buffsize/fechant );

void setup()
{
  size(512, 200, P2D);

  minim = new Minim(this);
  minim.debugOn();
 
  in = minim.getLineIn( Minim.MONO, buffsize, fechant, 8 );
  fft = new FFT( buffsize, fechant );
  out = minim.getLineOut( Minim.STEREO, buffsize, fechant, 8 );
  myDelay1 = new Delay( 0.0, 1000.0, true, false );
  // je ne trouve pas quels sont les arguments, j'ai juste trouvé un exeple
// que j'ai recopié, mais ça ne fonctionne pas évidemment car il me faut la doc

  signal = new ASignal();
  out.addSignal(signal);   
 
  frameRate( 512 );
}

void draw()
{
  background(0);
  stroke(255);
  text( frameRate, 10, 20 ); 

  out.disableSignal( signal );
   
  fft.forward( in.mix ); 

  float m = 0.0, s = 0.0;
  for ( int i = 1; i <= ifbandmax; i++ )
   {
    m += fft.getBand(i);   
    s += fft.getBand(i)*fft.getBand(i);
   }   
  m = m/ifbandmax;
  s = sqrt(s/ifbandmax-m*m);
 
  boolean go = false;
  for ( int i = ifmin; (i <= ifmax) && !go; i++ )
   if ( fft.getBand(i) > m+3.45*s) go = true;

  if ( go )
   {
    // delay(2000); cette méthode retourne aucun signal audio
    //j'ai m^me essayé avec addeffect mais cette fonction n'existe pas : addeffect(Delay)
    //la bonne méthode est apparemment initialiser une instance de delay (comme fait au départ)
    //puis de mettre dans le draw une méthode de modif du delay comme ci-dessous
    //mais le delay devrait ^tre déjà présent tel qu'initialisé au départ, et non!
    //myDelay1.setDelTime( avec 5 arguments mystères);
    s.patch(myDelay1);
    out.enableSignal( signal );
    for ( int i = ifmin; i <= ifmax; i++ )
     line(width/2+(i-(ifmin+ifmax)/2)*2, 150 - fft.getBand(i), width/2+(i+1-(ifmin+ifmax)/2)*2, 150 - fft.getBand(i+1));
   }
}

void stop()
{
  in.close();
  out.close();
  minim.stop();
  super.stop();
}

et voici le code du signal :
class ASignal implements AudioSignal
{
  float[] s;
 
  void generate(float[] samp)
   {     
    for ( int i = 0; i < min(s.length,samp.length); i++ ) samp[i] = s[i]*i/(i+1);
   }
 
  void generate(float[] left, float[] right)
   {
    s = in.mix.toArray();
    generate(left);
    generate(right);
   }
}

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024