|
Minim |
|
|
Frequency Methods
asHz ( ) |
Frequency is a class that represents an audio frequency.
Audio frequencies are generally expressed in Hertz, but Frequency
allows you to think in terms of other representations, such as note name.
This class is generally used by an Oscil UGen, but
can also be used to convert different notations of frequencies
such as Hz, MIDI note number, and a pitch name (English or solfege).
Constructors Related Example /* frequencyExample<br/>
is an example of using the Frequency class to easily turn keyboard input
into the frequency of an Oscil. Simply type on the home row to change
the pitch of the tone.
<p>
For more information about Minim and additional features,
visit http://code.compartmental.net/minim/
*/
// import everything necessary to make sound.
import ddf.minim.*;
import ddf.minim.ugens.*;
// create all of the variables that will need to be accessed in
// more than one methods (setup(), draw(), stop()).
Minim minim;
AudioOutput out;
Oscil wave;
// keep track of the current Frequency so we can display it
Frequency currentFreq;
// setup is run once at the beginning
void setup()
{
// initialize the drawing window
size(512, 200);
// initialize the minim and out objects
minim = new Minim(this);
out = minim.getLineOut();
currentFreq = Frequency.ofPitch( "A4" );
wave = new Oscil( currentFreq, 0.6f, Waves.TRIANGLE );
wave.patch( out );
}
// draw is run many times
void draw()
{
// erase the window to brown
background( 64, 32, 0 );
// draw using a beige stroke
stroke( 255, 238, 192 );
text( "Current Frequency in Hertz: " + currentFreq.asHz(), 5, 15 );
text( "Current Frequency as MIDI note: " + currentFreq.asMidiNote(), 5, 30 );
// 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);
}
}
// change the midi note when pressing keys on the keyboard
// we set midiNoteIn directly with the setMidiNoteIn method
// but you could also use a Line to lerp to the next note
// by patching it to midiNoteIn.
void keyPressed()
{
if ( key == 'a' ) currentFreq = Frequency.ofPitch( "A4" );
if ( key == 's' ) currentFreq = Frequency.ofPitch( "B4" );
if ( key == 'd' ) currentFreq = Frequency.ofPitch( "C#5" );
if ( key == 'f' ) currentFreq = Frequency.ofPitch( "D5" );
if ( key == 'g' ) currentFreq = Frequency.ofPitch( "E5" );
if ( key == 'h' ) currentFreq = Frequency.ofPitch( "F#5" );
if ( key == 'j' ) currentFreq = Frequency.ofPitch( "G#5" );
if ( key == 'k' ) currentFreq = Frequency.ofPitch( "A5" );
if ( key == 'l' ) currentFreq = Frequency.ofPitch( "B5" );
if ( key == ';' ) currentFreq = Frequency.ofPitch( "C#6" );
if ( key == '\'') currentFreq = Frequency.ofPitch( "E6" );
// note that there are two other static methods for constructing Frequency objects
// currentFreq = Frequency.ofHertz( 440 );
// currentFreq = Frequency.ofMidiNote( 69 );
wave.setFrequency( currentFreq );
}
Usage Web & Application |