package jass.generators; import jass.engine.*; import java.net.*; /** Loop through a buffer, loaded from an audio file or provided by caller. No speed or volume control is provided. @author Kees van den Doel (kvdoel@cs.ubc.ca) */ public class ConstantLoopBuffer extends Out { /** Buffer to loop */ protected float[] loopBuffer; /** Buffer length */ protected int loopBufferLength; /** Current integer position of pointer in buffer. */ protected int ix = 0; /** Sampling rate in Hertz of Out. */ public float srate; /** Construct loop force from named file. @param srate sampling rate in Hertz. @param bufferSize bufferSize of this Out @param fn Audio file name. */ public ConstantLoopBuffer(float srate,int bufferSize, String fn) { super(bufferSize); // this is the internal buffer size AudioFileBuffer afBuffer = new AudioFileBuffer(fn); loopBuffer = afBuffer.buf; loopBufferLength = loopBuffer.length; this.srate = srate; } /** Construct loop force from url. @param srate sampling rate in Hertz. @param bufferSize bufferSize of this Out @param url Audio file url. */ public ConstantLoopBuffer(float srate,int bufferSize, URL url) { super(bufferSize); // this is the internal buffer size AudioFileBuffer afBuffer = new AudioFileBuffer(url); loopBuffer = afBuffer.buf; loopBufferLength = loopBuffer.length; this.srate = srate; } /** Get loopBuffer @return loop buffer as float array */ public float[] getLoopBuffer() { return loopBuffer; } /** Get sampling rate @return sampling rate in Hertz */ public float getSamplingRate() { return srate; } /** Construct loop force and provide buffer @param srate sampling rate in Hertz. @param bufferSize bufferSize of this Out. @param loopBuffer looping buffer. */ public ConstantLoopBuffer(float srate,int bufferSize, float[] loopBuffer) { super(bufferSize); // this is the internal buffer size this.loopBuffer = loopBuffer; this.srate = srate; loopBufferLength = loopBuffer.length; } /** Compute the next buffer. */ public void computeBuffer() { int bufsz = getBufferSize(); for(int k=0;k<bufsz;k++) { buf[k] = loopBuffer[ix]; ix++; if(ix == loopBufferLength) { ix = 0; } } } }