1
package org.herac.tuxguitar.player.impl.jsa.midiport;
3
import javax.sound.midi.MidiDevice;
4
import javax.sound.midi.Receiver;
6
import org.herac.tuxguitar.player.base.MidiControllers;
7
import org.herac.tuxguitar.player.base.MidiOut;
8
import org.herac.tuxguitar.player.base.MidiPlayerException;
9
import org.herac.tuxguitar.player.base.MidiPort;
10
import org.herac.tuxguitar.player.impl.jsa.utils.MidiMessageUtils;
11
import org.herac.tuxguitar.util.TGSynchronizer;
13
public class MidiPortOut extends MidiPort{
15
private MidiOutImpl out;
17
public MidiPortOut(MidiDevice device){
18
super(device.getDeviceInfo().getName(),device.getDeviceInfo().getName());
19
this.out = new MidiOutImpl(device);
27
this.out.getReceiver();
30
public void close() throws MidiPlayerException{
33
} catch (Throwable throwable) {
34
throw new MidiPlayerException(throwable.getMessage(),throwable);
38
public void check() throws MidiPlayerException{
41
} catch (Throwable throwable) {
42
throw new MidiPlayerException(throwable.getMessage(),throwable);
47
class MidiOutImpl implements MidiOut{
49
private MidiDevice device;
50
private Receiver receiver;
52
public MidiOutImpl(MidiDevice device){
56
protected synchronized void open() throws Throwable{
57
if(!this.device.isOpen()){
58
final MidiDevice device = this.device;
59
TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
60
public void run() throws Throwable {
65
if(this.receiver == null){
66
final MidiDevice device = this.device;
67
TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
68
public void run() throws Throwable {
69
setReceiver(device.getReceiver());
75
protected synchronized void close() throws Throwable{
76
if(this.receiver != null){
77
final Receiver receiver = this.receiver;
78
TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
79
public void run() throws Throwable {
85
if(this.device.isOpen()){
86
final MidiDevice device = this.device;
87
TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
88
public void run() throws Throwable {
95
protected void setReceiver(Receiver receiver){
96
this.receiver = receiver;
99
protected Receiver getReceiver(){
102
} catch (Throwable throwable) {
105
return this.receiver;
108
public void sendSystemReset(){
109
if(getReceiver() != null){
110
getReceiver().send(MidiMessageUtils.systemReset(),-1);
114
public void sendAllNotesOff(){
115
if(getReceiver() != null){
116
for(int channel = 0; channel < 16; channel ++){
117
getReceiver().send(MidiMessageUtils.controlChange(channel, MidiControllers.ALL_NOTES_OFF,0),-1);
122
public void sendNoteOn(int channel, int key, int velocity) {
123
if(getReceiver() != null){
124
getReceiver().send(MidiMessageUtils.noteOn(channel, key, velocity),-1);
128
public void sendNoteOff(int channel, int key, int velocity) {
129
if(getReceiver() != null){
130
getReceiver().send(MidiMessageUtils.noteOff(channel, key, velocity),-1);
134
public void sendControlChange(int channel, int controller, int value) {
135
if(getReceiver() != null){
136
getReceiver().send(MidiMessageUtils.controlChange(channel,controller, value),-1);
140
public void sendProgramChange(int channel, int value) {
141
if(getReceiver() != null){
142
getReceiver().send(MidiMessageUtils.programChange(channel, value),-1);
146
public void sendPitchBend(int channel, int value) {
147
if(getReceiver() != null){
148
getReceiver().send(MidiMessageUtils.pitchBend(channel, value),-1);
b'\\ No newline at end of file'