Minim
core ugens analysis |
|||||||||||||||||||||||||||||||||||||
Name | Sampler | ||||||||||||||||||||||||||||||||||||
Description | Sampler is the UGen version of AudioSample and is
the preferred method of triggering short audio files.
You will also find Sampler much more flexible,
since it provides ways to trigger only part of a sample, and
to trigger a sample at different playback rates. Also, unlike AudioSample,
a Sampler lets you specify how many voices (i.e. simultaneous
playbacks of the sample) should have.
Sampler provides several inputs that allow you to control the properties
of a triggered sample. When you call the trigger method, the values of these
inputs are "snapshotted" and used to configure the new voice that will play
the sample. So, changing the values does not effect already playing voices,
except for |
||||||||||||||||||||||||||||||||||||
Examples | import processing.opengl.*; /** * This sketch is a more involved use of AudioSamples to create a simple drum machine. * Click on the buttons to toggle them on and off. The buttons that are on will trigger * samples when the beat marker passes over their column. You can change the tempo by * clicking in the BPM box and dragging the mouse up and down. * <p> * We achieve the timing by using AudioOutput's playNote method and a cleverly written Instrument. * <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; Sampler kick; Sampler snare; Sampler hat; boolean[] hatRow = new boolean[16]; boolean[] snrRow = new boolean[16]; boolean[] kikRow = new boolean[16]; ArrayList<Rect> buttons = new ArrayList<Rect>(); int bpm = 120; int beat; // which beat we're on // here's an Instrument implementation that we use // to trigger Samplers every sixteenth note. // Notice how we get away with using only one instance // of this class to have endless beat making by // having the class schedule itself to be played // at the end of its noteOff method. class Tick implements Instrument { void noteOn( float dur ) { if ( hatRow[beat] ) hat.trigger(); if ( snrRow[beat] ) snare.trigger(); if ( kikRow[beat] ) kick.trigger(); } void noteOff() { // next beat beat = (beat+1)%16; // set the new tempo out.setTempo( bpm ); // play this again right now, with a sixteenth note duration out.playNote( 0, 0.25f, this ); } } // simple class for drawing the gui class Rect { int x, y, w, h; boolean[] steps; int stepId; public Rect(int _x, int _y, boolean[] _steps, int _id) { x = _x; y = _y; w = 14; h = 30; steps = _steps; stepId = _id; } public void draw() { if ( steps[stepId] ) { fill(0,255,0); } else { fill(255,0,0); } rect(x,y,w,h); } public void mousePressed() { if ( mouseX >= x && mouseX <= x+w && mouseY >= y && mouseY <= y+h ) { steps[stepId] = !steps[stepId]; } } } void setup() { size(395, 200); minim = new Minim(this); out = minim.getLineOut(); // load all of our samples, using 4 voices for each. // this will help ensure we have enough voices to handle even // very fast tempos. kick = new Sampler( "BD.wav", 4, minim ); snare = new Sampler( "SD.wav", 4, minim ); hat = new Sampler( "CHH.wav", 4, minim ); // patch samplers to the output kick.patch( out ); snare.patch( out ); hat.patch( out ); for (int i = 0; i < 16; i++) { buttons.add( new Rect(10+i*24, 50, hatRow, i ) ); buttons.add( new Rect(10+i*24, 100, snrRow, i ) ); buttons.add( new Rect(10+i*24, 150, kikRow, i ) ); } beat = 0; // start the sequencer out.setTempo( bpm ); out.playNote( 0, 0.25f, new Tick() ); } void draw() { background(0); fill(255); //text(frameRate, width - 60, 20); for(int i = 0; i < buttons.size(); ++i) { buttons.get(i).draw(); } stroke(128); if ( beat % 4 == 0 ) { fill(200, 0, 0); } else { fill(0, 200, 0); } // beat marker rect(10+beat*24, 35, 14, 9); } void mousePressed() { for(int i = 0; i < buttons.size(); ++i) { buttons.get(i).mousePressed(); } } |
||||||||||||||||||||||||||||||||||||
Constructors | Sampler(filename, maxVoices, system); Sampler(sampleData, sampleRate, maxVoices); |
||||||||||||||||||||||||||||||||||||
Parameters |
|
||||||||||||||||||||||||||||||||||||
Fields |
|
||||||||||||||||||||||||||||||||||||
Methods |
|
||||||||||||||||||||||||||||||||||||
Usage | Web & Application | ||||||||||||||||||||||||||||||||||||
Related | AudioSample UGen |