package org.herac.tuxguitar.player.impl.sequencer;
public class MidiEvent {
public static final int ALL_TRACKS = -1;
public static final int MIDI_SYSTEM_EVENT = 1;
public static final int MIDI_EVENT_NOTEON = 2;
public static final int MIDI_EVENT_NOTEOFF = 3;
public static final int MIDI_EVENT_PROGRAM_CHANGE = 4;
public static final int MIDI_EVENT_CONTROL_CHANGE = 5;
public static final int MIDI_EVENT_PITCH_BEND = 6;
private long tick;
private int type;
private int track;
private byte[] data;
public MidiEvent(long tick,int type,byte[] data){
this(tick,type,ALL_TRACKS,data);
}
public MidiEvent(long tick,int type,int track,byte[] data){
this.tick = tick;
this.type = type;
this.track = track;
this.data = data;
}
public long getTick() {
return this.tick;
}
public int getType() {
return this.type;
}
public int getTrack() {
return this.track;
}
public byte[] getData() {
return this.data;
}
public static MidiEvent systemReset(final long tick){
return new MidiEvent(tick,MIDI_SYSTEM_EVENT,ALL_TRACKS,null);
}
public static MidiEvent noteOn(final long tick,final int track,final int channel,final int key,final int velocity){
return new MidiEvent(tick,MIDI_EVENT_NOTEON,track,new byte[]{(byte)channel,(byte)key,(byte)velocity});
}
public static MidiEvent noteOff(final long tick,final int track,final int channel,final int key,final int velocity){
return new MidiEvent(tick,MIDI_EVENT_NOTEOFF,track,new byte[]{(byte)channel,(byte)key,(byte)velocity});
}
public static MidiEvent controlChange(final long tick,final int track,final int channel,final int controller,final int value){
return new MidiEvent(tick,MIDI_EVENT_CONTROL_CHANGE,track,new byte[]{(byte)channel,(byte)controller,(byte)value});
}
public static MidiEvent programChange(final long tick,final int track,final int channel,final int value){
return new MidiEvent(tick,MIDI_EVENT_PROGRAM_CHANGE,track,new byte[]{(byte)channel,(byte)value});
}
public static MidiEvent pitchBend(final long tick,final int track,final int channel,final int value){
return new MidiEvent(tick,MIDI_EVENT_PITCH_BEND,track,new byte[]{(byte)channel,(byte)value});
}
public static MidiEvent tempoInUSQ(final long tick,final int usq){
return new MidiEvent(tick,MIDI_SYSTEM_EVENT,new byte[]{0x51,(byte) (usq & 0xff),(byte) ((usq >> 8) & 0xff),(byte) ((usq >> 16) & 0xff)});
}
}