/* Scales the volume of all incoming midi messages parameter a. * If a is 0.5 the Volume is not changed. * a = 1.0 scales the volume by 2 */ import org.jvaptools.scripteffect.*; org.jvaptools.VstPluginImpl plugin; public void init(org.jvaptools.VstPluginImpl owner) { this.plugin=owner; // Set Volume to 1 scale=1.0f; } public void close() {} float scale; public void onMidiEvent(javax.sound.midi.MidiMessage message, long timeStamp) { // If message of type ShortMessage if(message instanceof javax.sound.midi.ShortMessage ){ javax.sound.midi.ShortMessage sm=(javax.sound.midi.ShortMessage)message; int command=sm.getCommand(); int velocity=sm.getData2(); // Test if message is a Note on if((command==javax.sound.midi.ShortMessage.NOTE_ON)&&(velocity!=0)) { try{ // Set a new message volume velocity=(int)(velocity*scale*2); if(velocity>127) velocity=127; sm.setMessage(command,sm.getChannel(),sm.getData1(),velocity); } catch(javax.sound.midi.InvalidMidiDataException e){} } plugin.send(sm,timeStamp); } } public void processReplacing(vstmain plugin,float a,float b,float c,float d,float[][] inputs, float[][] outputs, int sampleFrames) { // Save parameter a as midi message volume scale=a; float[] out1 = outputs[0]; float[] out2 = outputs[1]; float[] in1 = inputs[0]; float[] in2 = inputs[1]; for (int i = 0; i < sampleFrames; i++) { out1[i] = in1[i]; out2[i] = in2[i]; } }