You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.4 KiB
73 lines
2.4 KiB
/* liveInputExample<br/>
|
|
is an example of using a Vocoder UGen on a LiveInput UGen.
|
|
This should let you hear the input from your microphone turned into a robot voice.
|
|
<p>
|
|
For more information about Minim and additional features,
|
|
visit http://code.compartmental.net/minim/
|
|
<p>
|
|
author: Damien Di Fede
|
|
*/
|
|
|
|
import ddf.minim.*;
|
|
import ddf.minim.ugens.*;
|
|
import ddf.minim.spi.*; // for AudioStream
|
|
|
|
Minim minim;
|
|
AudioOutput out;
|
|
LiveInput in;
|
|
|
|
void setup()
|
|
{
|
|
// initialize the drawing window
|
|
size(512, 200);
|
|
|
|
// initialize the minim and out objects
|
|
minim = new Minim(this);
|
|
out = minim.getLineOut();
|
|
|
|
// construct a LiveInput by giving it an InputStream from minim.
|
|
// we ask for an input with the same audio properties as the output.
|
|
AudioStream inputStream = minim.getInputStream( Minim.MONO,
|
|
out.bufferSize(),
|
|
out.sampleRate(),
|
|
out.getFormat().getSampleSizeInBits()
|
|
);
|
|
in = new LiveInput( inputStream );
|
|
|
|
// create the vocoder with a 1024 sample frame FFT and 3 overlapping windows
|
|
Vocoder vocode = new Vocoder( 1024, 8 );
|
|
|
|
// patch the input into the vocoder modulator
|
|
// we want to modulate the synth sound with the mic input, to create that "robot" effect
|
|
in.patch( vocode.modulator );
|
|
|
|
// create a synth with two notes an octave apart
|
|
Oscil wave1 = new Oscil( 110, 0.8, Waves.SAW );
|
|
Oscil wave2 = new Oscil( 220, 0.4, Waves.SAW );
|
|
|
|
Summer synth = new Summer();
|
|
wave1.patch( synth );
|
|
wave2.patch( synth );
|
|
|
|
// patch it to the input on the vocoder and on to the output
|
|
synth.patch( vocode ).patch( out );
|
|
}
|
|
|
|
// draw is run many times
|
|
void draw()
|
|
{
|
|
// erase the window to black
|
|
background( 0 );
|
|
// draw using a white stroke
|
|
stroke( 255 );
|
|
// draw the waveforms
|
|
for( int i = 0; i < out.bufferSize() - 1; i++ )
|
|
{
|
|
// find the x position of each buffer value
|
|
float x1 = map( i, 0, out.bufferSize(), 0, width );
|
|
float x2 = map( i+1, 0, out.bufferSize(), 0, width );
|
|
// draw a line from one buffer position to the next for both channels
|
|
line( x1, 50 - out.left.get(i)*50, x2, 50 - out.left.get(i+1)*50);
|
|
line( x1, 150 - out.right.get(i)*50, x2, 150 - out.right.get(i+1)*50);
|
|
}
|
|
}
|