Created
November 13, 2014 16:42
-
-
Save ollpu/08742c96e82d30f477ce to your computer and use it in GitHub Desktop.
Own waveform creation with minim
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * This sketch demonstrates how to create synthesized sound with Minim | |
| * using an AudioOutput and an Oscil. An Oscil is a UGen object, | |
| * one of many different types included with Minim. By using | |
| * the numbers 1 thru 5, you can change the waveform being used | |
| * by the Oscil to make sound. These basic waveforms are the | |
| * basis of much audio synthesis. | |
| * | |
| * For many more examples of UGens included with Minim, | |
| * have a look in the Synthesis folder of the Minim examples. | |
| * <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; | |
| 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 sine wave Oscil, set to 440 Hz, at 0.5 amplitude | |
| wave = new Oscil( 440, 0.5f, Waves.SINE ); | |
| // patch the Oscil to the output | |
| wave.patch( out ); | |
| createWaves(); | |
| } | |
| Wavetable sinXsinX10; | |
| void createWaves() { | |
| float[] sinL = new float[512]; | |
| for (int i = 0; i < sinL.length; i++) { | |
| sinL[i] = sin(map(i, 0, sinL.length - 1, 0, TWO_PI)) + (sin(map(i, 0, sinL.length - 1, 0, TWO_PI*2)) / 2); | |
| } | |
| sinXsinX10 = new Wavetable(sinL); | |
| } | |
| void draw() | |
| { | |
| background(0); | |
| stroke(255); | |
| 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( 128, 0, 0 ); | |
| strokeWeight(4); | |
| for( int i = 0; i < width-1; ++i ) | |
| { | |
| point( i, height/2 - (height*0.49) * wave.getWaveform().value( (float)i / width ) ); | |
| } | |
| } | |
| void mouseMoved() | |
| { | |
| // usually when setting the amplitude and frequency of an Oscil | |
| // you will want to patch something to the amplitude and frequency inputs | |
| // but this is a quick and easy way to turn the screen into | |
| // an x-y control for them. | |
| float amp = map( mouseY, 0, height, 1, 0 ); | |
| wave.setAmplitude( amp ); | |
| float freq = map( mouseX, 0, width, 110, 880 ); | |
| wave.setFrequency( freq ); | |
| } | |
| void keyPressed() | |
| { | |
| switch( key ) | |
| { | |
| case '1': | |
| wave.setWaveform( sinXsinX10 ); | |
| break; | |
| case '2': | |
| wave.setWaveform( Waves.TRIANGLE ); | |
| break; | |
| case '3': | |
| wave.setWaveform( Waves.SAW ); | |
| break; | |
| case '4': | |
| wave.setWaveform( Waves.SQUARE ); | |
| break; | |
| case '5': | |
| wave.setWaveform( Waves.QUARTERPULSE ); | |
| break; | |
| default: break; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment