1
package org.herac.tuxguitar.player.impl;
3
import javax.sound.midi.InvalidMidiDataException;
4
import javax.sound.midi.MetaMessage;
5
import javax.sound.midi.MidiMessage;
6
import javax.sound.midi.ShortMessage;
8
import org.herac.tuxguitar.song.models.TimeSignature;
10
public class MidiMessageUtils {
12
public static final byte TICK_MOVE = 0x01;
14
private static int getValue(int value){
15
value = (value > 127)?127:value;
16
value = (value < 0)?0:value;
20
private static int getChannel(int channel){
21
channel = (channel > 15)?15:channel;
22
channel = (channel < 0)?0:channel;
26
public static MidiMessage noteOn(int channel,int note,int velocity){
28
ShortMessage message = new ShortMessage();
29
message.setMessage(ShortMessage.NOTE_ON, getChannel(channel), getValue(note), getValue(velocity));
31
} catch (InvalidMidiDataException e) {
37
public static MidiMessage noteOff(int channel,int note,int velocity){
39
ShortMessage message = new ShortMessage();
40
message.setMessage(ShortMessage.NOTE_OFF, getChannel(channel), getValue(note), getValue(velocity));
42
} catch (InvalidMidiDataException e) {
48
public static MidiMessage controlChange(int channel,int controller,int value){
50
ShortMessage message = new ShortMessage();
51
message.setMessage(ShortMessage.CONTROL_CHANGE,getChannel(channel),getValue(controller), getValue(value));
53
} catch (InvalidMidiDataException e) {
59
public static MidiMessage programChange(int channel,int instrument){
61
ShortMessage message = new ShortMessage();
62
message.setMessage(ShortMessage.PROGRAM_CHANGE, getChannel(channel), getValue(instrument), 0);
64
} catch (InvalidMidiDataException e) {
70
public static MidiMessage pitchBend(int channel,int value){
72
ShortMessage message = new ShortMessage();
73
message.setMessage(ShortMessage.PITCH_BEND, getChannel(channel), 0, getValue(value));
75
} catch (InvalidMidiDataException e) {
81
public static MidiMessage systemReset(){
83
ShortMessage message = new ShortMessage();
84
message.setMessage(ShortMessage.SYSTEM_RESET);
86
} catch (InvalidMidiDataException e) {
92
public static MidiMessage tempoInUSQ(int usq){
94
MetaMessage message = new MetaMessage();
95
message.setMessage(0x51, new byte[]{ (byte)((usq >> 16) & 0x00FF),(byte)((usq >> 8) & 0x00FF),(byte)((usq) & 0x00FF) }, 3);
97
} catch (InvalidMidiDataException e) {
103
public static MidiMessage timeSignature(TimeSignature ts){
105
MetaMessage message = new MetaMessage();
106
message.setMessage(0x58, new byte[]{ (byte)ts.getNumerator(),(byte)ts.getDenominator().log2(),(byte)(96 / ts.getDenominator().getValue()),8 }, 4);
108
} catch (InvalidMidiDataException e) {
114
public static MidiMessage tickMove(long move){
116
byte[] data = new byte[]{ (byte) (move & 0x00FF),
117
(byte) ((move >> 8) & 0x000000FF),
118
(byte) ((move >> 16) & 0x000000FF),
119
(byte) ((move >> 24) & 0x000000FF),
120
(byte) ((move >> 32) & 0x000000FF),
121
(byte) ((move >> 40) & 0x000000FF),
122
(byte) ((move >> 48) & 0x000000FF),
123
(byte) ((move >> 56) & 0x000000FF)
125
MetaMessage message = new MetaMessage();
126
message.setMessage(TICK_MOVE, data,data.length);
128
} catch (InvalidMidiDataException e) {
b'\\ No newline at end of file'