Changing the color of audio waves_Minim
in
Core Library Questions
•
2 years ago
Hi everyone-
I'm sitting here with my processing book cracked open and have been scanning the forums for a few hours trying to sort this out. Ive taken the "recordlinein" minim example and have began hacking it up to suit my needs. Essentially what I would like to do is assign a color range to the lines that are drawn as a result of the audio input so that, for example, when there is little noise activity, lines are within the blue-green range, and when there is a lot of activity they are red, orange, etc. I'm pretty new to processing so any insight is greatly appreciated. Code is below.
Thanks,
Evan
Columbia GSAPP
- * 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(1000, 800, P2D);
- textMode(SCREEN);
- minim = new Minim(this);
- minim.debugOn();
- // 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, 1000);
- // 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, "01.wav", true);
- textFont(createFont("SanSerif", 12));
- }
- void draw()
- {
- background(0);
- stroke(255,0,0);
- // 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)*200);
- line(i, 150 + in.right.get(i)*50, i+1, 150 + in.left.get(i+1)*200);
- line(i, 250 + in.right.get(i)*50, i+1, 250 + in.left.get(i+1)*200);
- line(i, 350 + in.right.get(i)*50, i+1, 350 + in.left.get(i+1)*200);
- line(i, 450 + in.right.get(i)*50, i+1, 450 + in.left.get(i+1)*200);
- line(i, 550 + in.right.get(i)*50, i+1, 550 + in.left.get(i+1)*200);
- line(i, 650 + in.right.get(i)*50, i+1, 650 + in.left.get(i+1)*200);
- line(i, 750 + in.right.get(i)*50, i+1, 750 + in.left.get(i+1)*200);
- }
- 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();
- }
1