1
package org.herac.tuxguitar.io.midi;
3
import org.herac.tuxguitar.io.midi.base.MidiMessage;
4
import org.herac.tuxguitar.song.models.TGTimeSignature;
6
public class MidiMessageUtils {
8
public static final byte TICK_MOVE = 0x01;
10
private static int fixValue(int value){
11
int fixedValue = value;
12
fixedValue = Math.min(fixedValue,127);
13
fixedValue = Math.max(fixedValue,0);
17
private static int fixChannel(int channel){
18
int fixedChannel = channel;
19
fixedChannel = Math.min(fixedChannel,15);
20
fixedChannel = Math.max(fixedChannel,0);
24
public static MidiMessage noteOn(int channel,int note,int velocity){
25
return MidiMessage.shortMessage(MidiMessage.NOTE_ON, fixChannel(channel), fixValue(note), fixValue(velocity));
28
public static MidiMessage noteOff(int channel,int note,int velocity){
29
return MidiMessage.shortMessage(MidiMessage.NOTE_OFF, fixChannel(channel), fixValue(note), fixValue(velocity));
32
public static MidiMessage controlChange(int channel,int controller,int value){
33
return MidiMessage.shortMessage(MidiMessage.CONTROL_CHANGE, fixChannel(channel), fixValue(controller), fixValue(value));
36
public static MidiMessage programChange(int channel,int instrument){
37
return MidiMessage.shortMessage(MidiMessage.PROGRAM_CHANGE, fixChannel(channel), fixValue(instrument));
40
public static MidiMessage pitchBend(int channel,int value){
41
return MidiMessage.shortMessage(MidiMessage.PITCH_BEND, fixChannel(channel), 0, fixValue(value));
44
public static MidiMessage systemReset(){
45
return MidiMessage.shortMessage(MidiMessage.SYSTEM_RESET);
48
public static MidiMessage tempoInUSQ(int usq){
49
MidiMessage message = new MidiMessage(MidiMessage.TYPE_META, MidiMessage.TEMPO_CHANGE);
50
message.setData(new byte[]{(byte)((usq >> 16) & 0xff),(byte)((usq >> 8) & 0xff),(byte)((usq) & 0xff) });
51
//message.setData(new byte[]{(byte)((usq >> 16) & 0x00FF),(byte)((usq >> 8) & 0x00FF),(byte)((usq) & 0x00FF) });
55
public static MidiMessage timeSignature(TGTimeSignature ts){
56
MidiMessage message = new MidiMessage(MidiMessage.TYPE_META, MidiMessage.TIME_SIGNATURE_CHANGE);
57
message.setData(new byte[]{ (byte)ts.getNumerator(),(byte)ts.getDenominator().getIndex(),(byte)(96 / ts.getDenominator().getValue()),8 });
61
public static MidiMessage endOfTrack(){
62
return MidiMessage.metaMessage(47,new byte[]{});
b'\\ No newline at end of file'