accordeur avec processing

vendredi 27 avril 2012 | programmation, tutorials


Avec la librairie Minim de Processing, il est possible d’analyser le son en temps réel. Voici quelques lignes de code pour obtenir la fréquence « la plus présente » dans votre source sonore.
La méthode d’initialisation n’est pas simple à retenir, avec minim.getLineIn on peut régler le « input », le buffer et la qualité (un gros buffer donnera un résultat précis mais des performances moindres).

Pour résumer, ce script prend un échantillon du son et balaie toutes les fréquences de 0 à 20000 Hz pour mémoriser le pic. On pourrait réduire le spectre analysé ou tester que les fréquences « justes » avec getFreq pour un usage autre.

Les musiciens pourront se reporter à cette page pour avoir les fréquences des notes (avec le La3 à 440 hz).

Vous pouvez tester avec des fichiers mp3 via google ou ici.

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

Minim minim;
AudioInput in;
FFT fft;
float highestAmp=0;
int frequency;
float amplitude;

void setup(){
        size(512, 200);
        background(0);
        
        // initialize Minim and catching the output
        minim = new Minim(this);
        in = minim.getLineIn(Minim.MONO, 4096*8, 44100); // better result with *8
        fft = new FFT(in.left.size(), 44100);
}


void draw() {
      highestAmp=0;
      amplitude=0;
      frequency = 0;
      fft.forward(in.left);

      //searching from 0Hz to 20000Hz. getting the band, and from the band the frequency
     for(int i = 0; i < 20000; i++) {
            amplitude = fft.getFreq(i);
            if (amplitude > highestAmp){
                highestAmp = amplitude;
                frequency = i;
            }
          }
          //write the frequency on the screen
          fill(255);
          background(0);
          text(frequency,200,100);
}

base du code via processing Forum.


tags : , , , ,

Comments are closed.