topical media & game development

talk show tell print

graphic-processing-site-examples-Libraries-Minim--Sound--RecordLineIn-RecordLineIn.pde / pde



  
Record Line In by Damien Di Fede. This sketch demonstrates how to an <code>AudioRecorder</code> to record audio to disk. To use this sketch you need to have something plugged into the line-in on your computer. Press 'r' to toggle recording on and off and the press 's' to save to disk. The recorded file will be placed in the sketch folder of the sketch.

  
  
  import ddf.minim.*;
  
  Minim minim;
  AudioInput in;
  AudioRecorder recorder;
  
  void setup()
  {
    size(512, 200, P3D);
    textMode(SCREEN); 
    
    minim = new Minim(this);
  
    // get a stereo line-in: sample buffer length of 2048
    // default sample rate is 44100, default bit depth is 16
    in = minim.getLineIn(Minim.STEREO, 2048);
    // create a recorder that  will record from the input to the filename specified, using buffered recording
    // buffered recording means that all captured audio will be written into a sample buffer
    // then when save() is called, the contents of the buffer will actually be written to a file
    // the file will be located in the sketch's root folder.
    recorder = minim.createRecorder(in, "myrecording.wav", true);
    
    textFont(createFont("Arial", 12));
  }
  
  void draw()
  {
    background(0); 
    stroke(255);
    // draw the waveforms
    // the values returned by left.get() and right.get() will be between -1 and 1,
    // so we need to scale them up to see the waveform
    for(int i = 0; i < in.bufferSize() - 1; i++)
    {
      line(i, 50 + in.left.get(i)*50, i+1, 50 + in.left.get(i+1)*50);
      line(i, 150 + in.right.get(i)*50, i+1, 150 + in.right.get(i+1)*50);
    }
    
    if ( recorder.isRecording() )
    {
      text("Currently recording...", 5, 15);
    }
    else
    {
      text("Not recording.", 5, 15);
    }
  }
  
  void keyReleased()
  {
    if ( key == 'r' ) 
    {
      // to indicate that you want to start or stop capturing audio data, you must call
      // beginRecord() and endRecord() on the AudioRecorder object. You can start and stop
      // as many times as you like, the audio data will be appended to the end of the buffer 
      // (in the case of buffered recording) or to the end of the file (in the case of streamed recording). 
      if ( recorder.isRecording() ) 
      {
        recorder.endRecord();
      }
      else 
      {
        recorder.beginRecord();
      }
    }
    if ( key == 's' )
    {
      // we've filled the file out buffer, 
      // now write it to the file we specified in createRecorder
      // in the case of buffered recording, if the buffer is large, 
      // this will appear to freeze the sketch for sometime
      // in the case of streamed recording, 
      // it will not freeze as the data is already in the file and all that is being done
      // is closing the file.
      // the method returns the recorded audio as an AudioRecording, 
      // see the example  AudioRecorder >> RecordAndPlayback for more about that
      recorder.save();
      println("Done saving.");
    }
  }
  
  void stop()
  {
    // always close Minim audio classes when you are done with them
    in.close();
    minim.stop();
    
    super.stop();
  }
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.