1
package org.herac.tuxguitar.player.impl.jsa.sequencer;
3
import javax.sound.midi.MidiMessage;
4
import javax.sound.midi.Receiver;
5
import javax.sound.midi.ShortMessage;
7
import org.herac.tuxguitar.player.base.MidiPlayerException;
8
import org.herac.tuxguitar.player.base.MidiSequencer;
10
public class MidiReceiverImpl implements Receiver{
12
private MidiSequencer sequencer;
14
public MidiReceiverImpl(MidiSequencer sequencer){
15
this.sequencer = sequencer;
18
public void send(MidiMessage message, long timeStamp) {
20
parseMessage(message.getMessage());
21
} catch (MidiPlayerException e) {
30
private void parseMessage(byte[] data) throws MidiPlayerException{
31
int length = data.length;
34
if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.NOTE_ON){
38
else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.NOTE_OFF){
42
else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.PROGRAM_CHANGE){
43
parseProgramChange(data);
46
else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.CONTROL_CHANGE){
47
parseControlChange(data);
50
else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.PITCH_BEND){
55
private void parseNoteOn(byte[] data) throws MidiPlayerException{
56
int length = data.length;
57
int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0;
58
int value = (length > 1)?(data[1] & 0xFF):0;
59
int velocity = (length > 2)?(data[2] & 0xFF):0;
64
this.sequencer.getMidiPort().out().sendNoteOn(channel,value,velocity);
68
private void parseNoteOff(byte[] data) throws MidiPlayerException{
69
int length = data.length;
71
int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0;
72
int value = (length > 1)?(data[1] & 0xFF):0;
73
int velocity = (length > 2)?(data[2] & 0xFF):0;
75
this.sequencer.getMidiPort().out().sendNoteOff(channel,value,velocity);
78
private void parseProgramChange(byte[] data) throws MidiPlayerException{
79
int length = data.length;
80
int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1;
81
int instrument = (length > 1)?(data[1] & 0xFF):-1;
82
if(channel != -1 && instrument != -1){
83
this.sequencer.getMidiPort().out().sendProgramChange(channel,instrument);
87
private void parseControlChange(byte[] data) throws MidiPlayerException{
88
int length = data.length;
89
int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1;
90
int control = (length > 1)?(data[1] & 0xFF):-1;
91
int value = (length > 2)?(data[2] & 0xFF):-1;
92
if(channel != -1 && control != -1 && value != -1){
93
this.sequencer.getMidiPort().out().sendControlChange(channel,control,value);
97
private void parsePitchBend(byte[] data) throws MidiPlayerException{
98
int length = data.length;
99
int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1;
100
int value = (length > 2)?(data[2] & 0xFF):-1;
101
if(channel != -1 && value != -1){
102
this.sequencer.getMidiPort().out().sendPitchBend(channel,value);