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