package jass.generators; import jass.engine.*; /** Output sine wave. (Highly inefficient implementation.) @author Kees van den Doel (kvdoel@cs.ubc.ca) */ public class Sine extends Out { /** Sampling rate in Hertz of Out. */ public float srate; /** Amplitude or volume of sine */ protected float volume = 1; /** Current phase */ protected float phase = 0; /** Freq. in Hertz */ protected float freq = 440; private float oldFreq = freq; public static final float TWOPI = (float)(2*Math.PI); public Sine(float srate,int bufferSize) { super(bufferSize); this.srate = srate; } /** Set amplitude @param val Volume. */ public void setVolume(float val) { volume = val; } /** Set frequency @param f frequency. */ public void setFrequency(float f) { freq = f; } protected void computeBuffer() { int bufsz = getBufferSize(); float fact = (freq-oldFreq)/(bufsz-1); float f; for(int i=0;i<bufsz;i++) { f = oldFreq + fact*i; phase += (float)(TWOPI*f/srate); buf[i] = (float) (volume * Math.sin((double)phase)); } while(phase > TWOPI) { phase -= TWOPI; } oldFreq = freq; } }