Minim |
|
loadFileIntoBuffer |
Description Loads the requested file into a MultiChannelBuffer. The buffer's channel count and buffer size will be adjusted to match the file.Signature float loadFileIntoBuffer(String filename, MultiChannelBuffer outBuffer) Parameters filename — the file to loadoutBuffer — the MultiChannelBuffer to fill with the file's audio samples Returns the sample rate of audio samples in outBuffer, or 0 if the load failed. Related MultiChannelBufferExample /** * This sketch demonstrates how to use the loadFileIntoBuffer method of the Minim class and is also a good * reference for some of the methods of the MultiChannelBuffer class. When the sketch begins it loads * a file from the data folder into a MultiChannelBuffer and then modifies that sample data before * using it to create a Sampler UGen. You can hear the result of this modification by hitting * the space bar. * <p> * For more information about Minim and additional features, * visit http://code.compartmental.net/minim/ */ import ddf.minim.*; import ddf.minim.ugens.*; Minim minim; MultiChannelBuffer sampleBuffer; AudioOutput output; Sampler sampler; void setup() { size(512, 200, P3D); // create Minim and an AudioOutput minim = new Minim(this); output = minim.getLineOut(); // construct a new MultiChannelBuffer with 2 channels and 1024 sample frames. // in our particular case, it doesn't really matter what we choose for these // two values because loadFileIntoBuffer will reconfigure the buffer // to match the channel count and length of the file. sampleBuffer = new MultiChannelBuffer( 1, 1024 ); // we pass the buffer to the method and Minim will reconfigure it to match // the file. if the file doesn't exist, or there is some other problen with // loading it, the function will return 0 as the sample rate. float sampleRate = minim.loadFileIntoBuffer( "SD.wav", sampleBuffer ); // make sure the file load worked if ( sampleRate > 0 ) { // double the size of the buffer to give ourselves some silence to play with int originalBufferSize = sampleBuffer.getBufferSize(); sampleBuffer.setBufferSize( originalBufferSize * 2 ); // go through first half of the buffer, which contains the original sample, // and add a delayed version of each sample at some random position. // we happen to know that the source file is only one channel // but in general you'd want to iterate over all channels when doing something like this for( int s = 0; s < originalBufferSize; ++s ) { int delayIndex = s + int( random( 0, originalBufferSize ) ); float sampleValue = sampleBuffer.getSample( 0, s ); float destValue = sampleBuffer.getSample( 0, delayIndex ); sampleBuffer.setSample( 0, // channel delayIndex, // sample frame to set sampleValue + destValue // the value to set ); } // create a sampler that will use our buffer to generate audio. // we must provide the sample rate of the audio and the number of voices. sampler = new Sampler( sampleBuffer, sampleRate, 1 ); // and finally, connect to the output so we can hear it sampler.patch( output ); } } void draw() { background(0); stroke(255); // use the mix buffer to draw the waveforms. for (int i = 0; i < output.bufferSize() - 1; i++) { float x1 = map(i, 0, output.bufferSize(), 0, width); float x2 = map(i+1, 0, output.bufferSize(), 0, width); line(x1, 50 - output.left.get(i)*50, x2, 50 - output.left.get(i+1)*50); line(x1, 150 - output.right.get(i)*50, x2, 150 - output.right.get(i+1)*50); } } void keyPressed() { if ( key == ' ' && sampler != null ) { sampler.trigger(); } } Usage Web & Application |