|
Minim |
|
|
smooth |
Description Smooth out the values in the table by using a moving average window.Signature void smooth(int windowLength) Parameters windowLength — int: how many samples large the window should beReturns None Related WavetableExample /**
* This sketch demonstrates many of the methods available for
* modifying Wavetables. The controls are as follows:
* <ul>
* <li>n: normalize the waveform</li>
* <li>s: smooth the waveform</li>
* <li>r: rectify the waveform</li>
* <li>z: add noise to the waveform</li>
* <li>q/a: scale the waveform up or down</li>
* <li>left click and drag: warp the waveform</li>
* <li>right click: flip the waveform around the y position of the mouse</li>
* </ul>
* The waveform shown in red is the Wavetable being used by the Oscil and
* the moving waveform in white is what the output looks like.
* <p>
* For more information about Minim and additional features,
* visit http://code.compartmental.net/minim/
*/
import ddf.minim.*;
import ddf.minim.ugens.*;
Minim minim;
AudioOutput out;
Oscil wave;
Wavetable table;
void setup()
{
size(512, 200, P3D);
minim = new Minim(this);
// use the getLineOut method of the Minim object to get an AudioOutput object
out = minim.getLineOut();
// create a reasonably complex waveform to start, will be slightly different every time
table = Waves.randomNHarms(16);
wave = new Oscil( 440, 0.5f, table );
// patch the Oscil to the output
wave.patch( out );
}
void draw()
{
background(0);
stroke(255, 64);
strokeWeight(1);
// draw the waveform of the output
for(int i = 0; i < out.bufferSize() - 1; i++)
{
line( i, 50 - out.left.get(i)*50, i+1, 50 - out.left.get(i+1)*50 );
line( i, 150 - out.right.get(i)*50, i+1, 150 - out.right.get(i+1)*50 );
}
// draw the waveform we are using in the oscillator
stroke( 200, 0, 0 );
strokeWeight(4);
for( int i = 0; i < width-1; ++i )
{
point( i, height/2 - (height*0.49) * table.value( (float)i / width ) );
}
}
void keyPressed()
{
switch( key )
{
case 'n':
// scale the table so that the largest value is -1/1.
table.normalize();
break;
case 's':
// smooth out the table, similar to applying a low pass filter
table.smooth( 64 );
break;
case 'r':
// change all negative values to positive values
table.rectify();
break;
case 'z':
// add some noise
table.addNoise( 0.1f );
break;
case 'q':
table.scale( 1.1f );
break;
case 'a':
table.scale( 0.9f );
break;
default: break;
}
}
void mousePressed()
{
if ( mouseButton == RIGHT )
{
float flipPoint = map( mouseY, 0, height, 1, -1 );
table.flip( flipPoint );
}
}
void mouseDragged()
{
if ( mouseButton == LEFT )
{
float warpPoint = constrain( (float)pmouseX / width, 0, 1 );
float warpTarget = constrain( (float)mouseX / width, 0, 1 );
table.warp( warpPoint, warpTarget );
}
}
Usage Web & Application |