package com.frinika.sequencer.gui.pianoroll; import javax.sound.midi.ShortMessage; import com.frinika.sequencer.model.ControllerEvent; import com.frinika.sequencer.model.MidiPart; import com.frinika.sequencer.model.MultiEvent; import com.frinika.sequencer.model.NoteEvent; import com.frinika.sequencer.model.PitchBendEvent; public class ControllerHandle { String name; private int contrl; int minVal=0; int maxVal=127; int cmd; //private int zeroValue=0; public ControllerHandle(String name,int min,int max,int cntrl,int cmd) { this.name=name; minVal=min; maxVal=max; contrl=cntrl; this.cmd=cmd; } /* public ControllerHandle(String string, int i, int j, int k, int l, int zeroVal) { this(string,i,j,k,l); zeroValue=zeroVal; // TODO Auto-generated constructor stub }*/ public String toString() { return name; } public String getName() { return name; } public boolean isVelocity() { return cmd == ShortMessage.NOTE_ON; } public MultiEvent createEvent(MidiPart part, long tick, int val) { assert(!isVelocity()); if (cmd == ShortMessage.CONTROL_CHANGE) return new ControllerEvent(part, tick, contrl, val); else if (cmd == ShortMessage.PITCH_BEND) return new PitchBendEvent(part, tick, val-minVal); try { throw new Exception(" Should never happen "); } catch (Exception e) { e.printStackTrace(); } return null; } public boolean isValid(MultiEvent ev) { switch(cmd) { case ShortMessage.NOTE_ON: return (ev instanceof NoteEvent) ; case ShortMessage.CONTROL_CHANGE: if (!(ev instanceof ControllerEvent)) return false; ControllerEvent ce=(ControllerEvent)ev; return contrl == ce.getControlNumber(); case ShortMessage.PITCH_BEND: return (ev instanceof PitchBendEvent) ; default: try { throw new Exception(" unknown event type " + ev); } catch (Exception e) { e.printStackTrace(); } return false; } } public int getController() { // Jens return contrl; } }