|
From: <ge...@us...> - 2003-04-10 20:37:14
|
Update of /cvsroot/jsynthlib/JSynthLib/core
In directory sc8-pr-cvs1:/tmp/cvs-serv32625
Modified Files:
PatchEdit.java PrefsDialog.java
Added Files:
JavasoundMidiWrapper.java
Log Message:
Added MidiWrapper for the SUN JavaSound API. Minimum requirement is JDK1.4.2beta!!!!!
--- NEW FILE: JavasoundMidiWrapper.java ---
// This is a MidiWrapper for the generic Javasound API
// Danger, to use it you need JDK1.4.2beta at least.....
/**
*
* @author Gerrit Gehnen
* @version $Id: JavasoundMidiWrapper.java,v 1.1 2003/04/10 20:37:08 gehnen Exp $
*/
package core;
import javax.sound.midi.*;
import java.util.*;
public class JavasoundMidiWrapper extends MidiWrapper implements Receiver {
int currentOutport;
int currentInport;
int faderPort;
MidiDevice.Info[] mdi;
Vector sourceInfoVector;
Vector destinationInfoVector;
MidiDevice sourceDevice;
MidiDevice destinationDevice;
Transmitter input=null;
Transmitter fader=null;
Receiver output=null;
MidiDevice md;
List list = Collections.synchronizedList(new LinkedList());
public JavasoundMidiWrapper(int inport, int outport) throws Exception {
currentInport=inport;
currentOutport=outport;
faderPort=PatchEdit.appConfig.getFaderPort();
sourceInfoVector=new Vector();
destinationInfoVector=new Vector();
mdi=MidiSystem.getMidiDeviceInfo();
for (int i=0;i<mdi.length;i++) {
try {
md=MidiSystem.getMidiDevice(mdi[i]);
md.open(); // This can really throw an MidiUnavailableException on my System
if (md.getMaxReceivers()!=0) {
//System.out.println("is possible Destination");
destinationInfoVector.add(mdi[i]);
}
if (md.getMaxTransmitters()!=0) {
//System.out.println("is possible Source");
sourceInfoVector.add(mdi[i]);
}
}
catch (MidiUnavailableException e) {} // Ignore, can happen.....
catch (Exception e) {
e.printStackTrace();
}
}
MidiDevice destDevice=MidiSystem.getMidiDevice((MidiDevice.Info)destinationInfoVector.get(outport));
//destDevice.open();
output=destDevice.getReceiver();
MidiDevice sourceDevice=MidiSystem.getMidiDevice((MidiDevice.Info)sourceInfoVector.get(inport));
//sourceDevice.open();
input=sourceDevice.getTransmitter();
input.setReceiver(this);
if (faderPort!=inport) {
sourceDevice=MidiSystem.getMidiDevice((MidiDevice.Info)sourceInfoVector.get(faderPort));
fader=sourceDevice.getTransmitter();
fader.setReceiver(this);
}
}
public JavasoundMidiWrapper() throws Exception {
this(0,0);
}
//this gets called whenever a midimessage arrives at input
public void send(MidiMessage msg,long l) {
int dummy;
dummy=msg.getStatus();
if (msg instanceof ShortMessage) {
//System.out.println("Status: "+((ShortMessage)msg).getStatus());
// Filter out Active Sensing
if (((ShortMessage)msg).getStatus()==ShortMessage.ACTIVE_SENSING)
return;
}
//System.out.println("JavasoundMidiWrapper:Got Message length "+msg.getLength()+" Status "+dummy);
if (msg instanceof SysexMessage) {
System.out.println("SYSEX: Status: "+msg.getStatus()+" Last Byte "+msg.getMessage()[msg.getMessage().length-1]);
}
list.add(msg);
}
public void close() {
if (input!=null) {input.setReceiver(null); /*input.close();*/}
if (fader!=null) {fader.setReceiver(null);/* fader.close();*/}
/* if (output!=null) { output.close();}*/
for (int i=0;i<mdi.length;i++) {
md.close();
}
}
public void finalize() {
close();
}
protected void setInputDeviceNum(int port)throws Exception {
try {
if ((port==PatchEdit.appConfig.getFaderPort()) && (fader!=null)) {
MidiDevice srcDevice=MidiSystem.getMidiDevice((MidiDevice.Info)sourceInfoVector.get(port));
fader=srcDevice.getTransmitter();
return;
};
if (currentInport!=port) {
input.setReceiver(null);
// input.close ();
MidiDevice srcDevice=MidiSystem.getMidiDevice((MidiDevice.Info)sourceInfoVector.get(port));
// srcDevice.open();
input=srcDevice.getTransmitter();
input.setReceiver(this);
}
currentInport=port;
}
catch (Exception e) {
e.printStackTrace();
ErrorMsg.reportError("Error","Wire MIDI is flipping out.",e);}
}
protected void setOutputDeviceNum(int port)throws Exception {
if (currentOutport!=port) {
//output.close ();
MidiDevice destDevice=MidiSystem.getMidiDevice((MidiDevice.Info)destinationInfoVector.get(port));
output=destDevice.getReceiver();
if (destDevice.isOpen())
destDevice.open();
System.out.println("Outport: "+destDevice.getDeviceInfo().getName()+" is Open: "+destDevice.isOpen());
}
currentOutport=port;
}
public void writeLongMessage(int port,byte []sysex)throws Exception {
writeLongMessage(port,sysex,sysex.length);
}
public void writeLongMessage(int port,byte []sysex,int size)throws Exception {
//System.out.println("JavaSoundMapper:Writing to port "+port);
setOutputDeviceNum(port);
byte [] tmpArray=new byte[255];
if (size==2) {
writeShortMessage(port,sysex[0],sysex[1]);
return;
}
if (size==3) {
writeShortMessage(port,sysex[0],sysex[1],sysex[2]);
return;
}
SysexMessage msg = new SysexMessage();
//msg.setMessage(sysex,size);
for (int i=0 ;i<sysex.length;i+=250) {
if (i==0) {
if (((i+250))<sysex.length) {
System.arraycopy(sysex,i,tmpArray,0,250);
}
else {
System.arraycopy(sysex,i,tmpArray,0,(sysex.length%250));
}
if (((i+250))<sysex.length)
msg.setMessage(tmpArray,250);
else
msg.setMessage(tmpArray,sysex.length%250);
}
else {
if (((i+250))<sysex.length) {
tmpArray[0]=(byte)0xF7;System.arraycopy(sysex,i,tmpArray,1,250);
}
else {
tmpArray[0]=(byte)0xF7;System.arraycopy(sysex,i,tmpArray,1,sysex.length%250);
}
if (((i+250))<sysex.length)
msg.setMessage(tmpArray,251);
else
msg.setMessage(tmpArray,(sysex.length%250)+1);
}
logMidi(port,false,sysex,size);
output.send(msg,-1);
}
}
public void writeShortMessage(int port, byte b1, byte b2)throws Exception {
writeShortMessage(port,b1,b2,(byte)0);
}
public void writeShortMessage(int port,byte b1, byte b2,byte b3)throws Exception {
setOutputDeviceNum(port);
ShortMessage msg=new ShortMessage();
msg.setMessage((int)b1,(int)b2,(int)b3);
output.send(msg,-1);
}
public int getNumInputDevices()throws Exception {
return sourceInfoVector.size();
}
public int getNumOutputDevices()throws Exception {
return destinationInfoVector.size();
}
public String getInputDeviceName(int port)throws Exception {
return ((MidiDevice.Info)(sourceInfoVector.get(port))).getName();
}
public String getOutputDeviceName(int port)throws Exception {
return ((MidiDevice.Info)(destinationInfoVector.get(port))).getName();
}
public int messagesWaiting(int port)throws Exception {
setInputDeviceNum(port);
return list.size();
}
public int readMessage(int port,byte []sysex,int maxSize)throws Exception {
setInputDeviceNum(port);
MidiMessage msg = (MidiMessage) list.get(0);
list.remove(0);
//System.out.println("MidiMessagelength:"+msg.getLength());
//System.out.println("MidiMessage: "+msg.getMessage()[0]);
if (msg.getMessage()[0]==-9) {
System.arraycopy(msg.getMessage(),1,sysex,0,msg.getLength()-1);
logMidi(port,true,sysex,msg.getLength()-1);
return msg.getLength()-1;
}
System.arraycopy(msg.getMessage(),0,sysex,0,msg.getLength());
logMidi(port,true,sysex,msg.getLength());
return msg.getLength();
}
}
Index: PatchEdit.java
===================================================================
RCS file: /cvsroot/jsynthlib/JSynthLib/core/PatchEdit.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** PatchEdit.java 27 Mar 2003 20:45:53 -0000 1.14
--- PatchEdit.java 10 Apr 2003 20:37:09 -0000 1.15
***************
*** 538,541 ****
--- 538,542 ----
case 3: MidiOut=new LinuxMidiWrapper (appConfig.getInitPortIn(),appConfig.getInitPortOut()); break;
case 4: MidiOut=new MacOSXMidiWrapper (appConfig.getInitPortIn(),appConfig.getInitPortOut()); break;
+ case 5: MidiOut=new JavasoundMidiWrapper (appConfig.getInitPortIn(),appConfig.getInitPortOut()); break;
}
MidiIn=MidiOut;
Index: PrefsDialog.java
===================================================================
RCS file: /cvsroot/jsynthlib/JSynthLib/core/PrefsDialog.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** PrefsDialog.java 6 Oct 2002 22:18:05 -0000 1.7
--- PrefsDialog.java 10 Apr 2003 20:37:09 -0000 1.8
***************
*** 1,2 ****
--- 1,5 ----
+ /**
+ * @version $Id$
+ */
package core;
import jmidi.*;
***************
*** 199,202 ****
--- 202,206 ----
cbPlatform.addItem ("GNU/Linux (/dev/*)");
cbPlatform.addItem ("MacOS X");
+ cbPlatform.addItem ("JavaSound (for JDK1.4.2)");
cbPlatform.addItemListener (new ItemListener ()
{
|