[Microphone] Typography in motion

edited June 2014 in How To...

Hey there,

I'm trying to create a relation between voice, typography and processing. I woul'd like an image or typography can move or more precisely vibrate depending on the sound of my voice.

Than, I succeed in encode it thanks to the minim library, among others, but only for simple shapes, I mean line or circle for example (see the screenshot below). However, I still don't know how to do it on a letter or word, how to have an influence on it and create this vibration related to my voice...

If you have any ideas to help, let me know guys !

sound-0906

(sorry my "not so good" english ahah)

Answers

  • Anyone ?

    Currently, this is my code :

    import ddf.minim.*;
    
    Minim minim;
    AudioInput in;
    color white;
    
    void setup()
    {
      size(1000, 500, P2D);
      white = color(255);
      colorMode(HSB,100);
      minim = new Minim(this);
      minim.debugOn();
    
      // get a line in from Minim, default bit depth is 16
      in = minim.getLineIn(Minim.STEREO, 512);
      background(0);
    }
    
    void draw()
    {
      background(0);
      // draw the waveforms
      for(int i = 0; i < in.bufferSize() - 1; i++)
      {
        stroke((1+in.left.get(i))*50,100,100);
        line(i, 50 + in.left.get(i)*50, i+1, 50 + in.left.get(i+1)*50);
            }
    }
    
    
    void stop()
    {
      // always close Minim audio classes when you are done with them
      in.close();
      minim.stop();
      super.stop();
          }
    
      // impression écran, ici touche "espace"
      void keyPressed( ){
      saveFrame("sound-####.jpg");
    }
    
  • I dont know anything about the specifics of Minim, but looking at your code it seems you can just use the same methods on the AudioInput object to get a values for the current sample and supply them as parameters to the method to draw text.

    For example, add this line after your for loop in draw() to get text that vibrates vertically: text("hello", 100, 100+100*in.left.get(int(in.bufferSize()/2)));

Sign In or Register to comment.