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.
		
		
		
		
			
				
					
					
						
							100 lines
						
					
					
						
							2.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							100 lines
						
					
					
						
							2.5 KiB
						
					
					
				| /** | |
|   * 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 ); | |
| } | |
| 
 | |
| 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( Waves.SINE ); | |
|       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;  | |
|   } | |
| }
 |