package vafusion.inst; import jm.audio.io.*; import jm.audio.Instrument; import jm.audio.synth.*; import jm.music.data.Note; import jm.audio.AudioObject; public final class SimpleSampleInst extends jm.audio.Instrument{ //---------------------------------------------- // Attributes //---------------------------------------------- /** the name of the sample file */ private String fileName; /** How many channels is the sound file we are using */ private int numOfChannels; /** the base frequency of the sample file to be read in */ private double baseFreq; /** should we play the wholeFile or just what we need for note duration */ private boolean wholeFile; /** The points for the break point envelope */ private double[] points; private SampleOut sout; //---------------------------------------------- // Constructor //---------------------------------------------- /** * Constructor */ public SimpleSampleInst(String fileName){ this(fileName, 440.00); } public SimpleSampleInst(String fileName, double baseFreq){ this(fileName, baseFreq, false); } public SimpleSampleInst(String fileName, double baseFreq, double[] points){ this(fileName, baseFreq, false, points); } public SimpleSampleInst(String fileName, double baseFreq, boolean wholeFile){ this(fileName, baseFreq, wholeFile, new double[] {0.0, 0.0, 0.01, 1.0, 0.99, 1.0, 1.0, 0.0}); } public SimpleSampleInst(String fileName, double baseFreq, boolean wholeFile, double[] points){ this.fileName = fileName; this.baseFreq = baseFreq; this.wholeFile = wholeFile; this.points = points; } //---------------------------------------------- // Methods //---------------------------------------------- /** * Create the Audio Chain for this Instrument * and assign the primary Audio Object(s). The * primary audio object(s) are the one or more * objects which head up the chain(s) */ @Override public void createChain(){ //define the chain SampleIn sin = new SampleIn(this, fileName); ReSample reSample = new ReSample(sin, this.baseFreq); Volume vol = new Volume(reSample); StereoPan span = new StereoPan(vol); if (wholeFile) { sin.setWholeFile(wholeFile); if(output == RENDER) sout = new SampleOut(span); } else { Envelope env = new Envelope(span, points); if(output == RENDER) sout = new SampleOut(env); } } }