package vafusion.inst; import jm.audio.io.*; import jm.audio.synth.*; import jm.music.data.Note; import jm.audio.AudioObject; public final class PluckInst extends jm.audio.Instrument{ /** The number of channels */ private int channels; /** the sample rate passed to the instrument */ private int sampleRate; /** The amount of sustein in the pluck algorithm */ private double feedback; /** A constructor to set an initial sampling rate */ public PluckInst(int sampleRate){ this(sampleRate, 2); } /** A constructor to set an initial sampling rate andchannels*/ public PluckInst(int sampleRate, int channels){ this(sampleRate,channels, RENDER); } /** A constructor to set a sampling rate, channels, and real-time/render output*/ public PluckInst(int sampleRate, int channels, int output){ this(sampleRate,channels, output, 0.5); } /** A constructor to set sampling rate, channels, real-time/render output and feedback.*/ public PluckInst(int sampleRate, int channels,int output, double feedback){ this.sampleRate = sampleRate; this.channels = channels; this.output = output; this.feedback = feedback; } /** * Initialisation method used to build the objects that this instrument uses. */ @Override public void createChain(){ Pluck plk = new Pluck(this, this.sampleRate, this.channels, this.feedback); Volume vol = new Volume(plk); StereoPan span = new StereoPan(vol); Envelope env = new Envelope(span, new double[] {0.0, 1.0, 0.9, 1.0, 1.0, 0.0}); SampleOut sout; if(output == RENDER) sout = new SampleOut(env); } public void actionEvent(Object obj, int intValue) { // add real time changes here as required } }