package vafusion.inst; import jm.audio.Instrument; import jm.audio.io.*; import jm.audio.synth.*; import jm.music.data.Note; import jm.audio.AudioObject; /** * A basic square wave instrument implementation * which implements envelope , pan, and volume control * @author Andrew Brown and Andrew Sorensen */ public final class SquareInst extends Instrument{ //---------------------------------------------- // Attributes //---------------------------------------------- /** The points to use in the construction of Envelopes */ private double[] envArray = {0.0, 0.0, 0.02, 1.0, 0.15, 0.6, 0.95, 0.4, 1.0, 0.0}; private int sampleRate; private int channels; private SampleOut sout; //---------------------------------------------- // Constructor //---------------------------------------------- /** * Basic default constructor using default settings. */ public SquareInst() { this(44100); } /** * Basic default constructor to set an initial * sampling rate. * @param sampleRate */ public SquareInst(int sampleRate){ this(sampleRate, 2); } /** * Basic default constructor to set an initial * sampling rate and number of channels. * @param sampleRate The audio quality. * @param channels The number of channels. */ public SquareInst(int sampleRate, int channels){ this.sampleRate = sampleRate; this.channels = channels; } /** * Basic default constructor to set an initial * sampling rate, number of channels, and amplitude envelope. * @param sampleRate The audio quality. * @param channels The number of channels. * @param double[] An array of envelope break points. */ public SquareInst(int sampleRate, int channels, double[] envArray){ this.sampleRate = sampleRate; this.channels = channels; this.envArray = envArray; } //---------------------------------------------- // Methods //---------------------------------------------- /** * Initialisation method used to build the objects that * this instrument will use */ @Override public void createChain(){ Oscillator wt = new Oscillator(this, Oscillator.SQUARE_WAVE, this.sampleRate, channels); Envelope env = new Envelope(wt, envArray); Volume vol = new Volume(env); StereoPan span = new StereoPan(vol); if (output == RENDER) sout = new SampleOut(span); } }