You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
(11) |
Apr
(1) |
May
|
Jun
|
Jul
(5) |
Aug
(55) |
Sep
(27) |
Oct
(11) |
Nov
(19) |
Dec
(42) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(201) |
Feb
(38) |
Mar
(154) |
Apr
(91) |
May
(157) |
Jun
(42) |
Jul
(149) |
Aug
(179) |
Sep
(212) |
Oct
(92) |
Nov
(7) |
Dec
(22) |
2005 |
Jan
(144) |
Feb
(109) |
Mar
(125) |
Apr
(10) |
May
(18) |
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(12) |
Nov
|
Dec
|
2006 |
Jan
(3) |
Feb
(17) |
Mar
(19) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
(1) |
2007 |
Jan
|
Feb
(6) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(25) |
Oct
(18) |
Nov
|
Dec
(2) |
2008 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
(4) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(3) |
Aug
|
Sep
(70) |
Oct
(10) |
Nov
(7) |
Dec
(16) |
2012 |
Jan
(12) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
(2) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(5) |
Nov
(2) |
Dec
|
2014 |
Jan
(50) |
Feb
(34) |
Mar
(29) |
Apr
(11) |
May
(10) |
Jun
(6) |
Jul
(1) |
Aug
(2) |
Sep
(8) |
Oct
(39) |
Nov
(1) |
Dec
|
2019 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2021 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ge...@us...> - 2003-08-18 19:56:09
|
Update of /cvsroot/jsynthlib/CVSROOT In directory sc8-pr-cvs1:/tmp/cvs-serv4605 Modified Files: loginfo Log Message: Test with the loginfo mailinglist Index: loginfo =================================================================== RCS file: /cvsroot/jsynthlib/CVSROOT/loginfo,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** loginfo 13 Mar 2003 17:04:26 -0000 1.16 --- loginfo 18 Aug 2003 19:56:05 -0000 1.17 *************** *** 27,32 **** # Send commit mail for JSynthLib commits ! #DEFAULT perl $CVSROOT/CVSROOT/logmail.pl -s -m jsy...@ov... -f /dev/null -u $USER %s ! DEFAULT /cvsroot/sitedocs/CVSROOT/cvstools/syncmail -q %{sVv} jsy...@li... --- 27,32 ---- # Send commit mail for JSynthLib commits ! DEFAULT perl $CVSROOT/CVSROOT/logmail.pl -s -m jsy...@ov... -f /dev/null -u $USER %s ! #DEFAULT /cvsroot/sitedocs/CVSROOT/cvstools/syncmail -q %{sVv} jsy...@li... |
From: <ge...@us...> - 2003-08-18 17:20:44
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv1821 Modified Files: DoNothingMidiWrapper.java Log Message: Forgot to include the isSupported method to the DoNothingMidiWrapper Index: DoNothingMidiWrapper.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/DoNothingMidiWrapper.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** DoNothingMidiWrapper.java 9 May 2002 00:49:17 -0000 1.3 --- DoNothingMidiWrapper.java 18 Aug 2003 17:05:24 -0000 1.4 *************** *** 17,19 **** --- 17,33 ---- public int messagesWaiting(int port)throws Exception{return 0;} public int readMessage(int port,byte []sysex,int maxSize)throws Exception{return 0;} + + /** This method should return true, if this wrapper is + * supported on the actual platform (a wrapper for + * MacOSX should return true only on Mac's with OSX + * etc.) + * @return true, if wrapper is supported, false if wrapper is not supported at this + * platform. + * + */ + public boolean isSupported() throws Exception { + // Yep, that's the real implementation..... + return true; + } + } |
From: <ge...@us...> - 2003-08-18 17:09:39
|
Update of /cvsroot/jsynthlib/JSynthLib In directory sc8-pr-cvs1:/tmp/cvs-serv1565 Modified Files: documentation.html Log Message: Fixed html-tags (Hiroo Hayashi), added FS1R section (Denis) Index: documentation.html =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/documentation.html,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** documentation.html 15 Aug 2003 20:47:04 -0000 1.7 --- documentation.html 18 Aug 2003 17:04:15 -0000 1.8 *************** *** 11,15 **** <font face="Verdana,arial,helvetica" size="-1"> ! <h2><a name="toc">JSynthLib Documentation</h2> <ol type="I"> --- 11,15 ---- <font face="Verdana,arial,helvetica" size="-1"> ! <h1><a name="toc">JSynthLib Documentation</h1> [...2324 lines suppressed...] ! something that shouldn't be. Better yet, use ErrorMsg.reportError("ErrorMsg goes here") instead. This way the message is only printed if JSynthLib is run in debugging mode (aka ! <samp>java -jar JSynthLib.jar 2</samp>) ! <p>2) Use a MIDI cable to connect your computer's MIDI out to MIDI ! in. Get a program from the Internet to printout all incoming MIDI messages. now you can see what messages your editor/driver is sending ! and you can check them for correctness. ! <p>3) When you are working on a driver and it doesn't seem to be doing what the code looks like it should do, one common problem is that if you make a change to the Constructor, you need to go into JSynthLib and remove the driver from the SynthConfig Dialog box and then add it again. Otherwise the newly Changed constructor isn't getting ! called. ! <p>Good Luck. </body> </html> |
From: <ge...@us...> - 2003-08-15 20:59:37
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv2930 Modified Files: JavaMidiWrapper.java JavasoundMidiWrapper.java LinuxMidiWrapper.java MacOSXMidiWrapper.java MidiWrapper.java PatchEdit.java VertScrollBarWidget.java WireMidiWrapper.java Log Message: Various changes including isSupported for Wrappers Index: JavaMidiWrapper.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/JavaMidiWrapper.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** JavaMidiWrapper.java 6 Oct 2002 22:18:05 -0000 1.4 --- JavaMidiWrapper.java 15 Aug 2003 20:48:17 -0000 1.5 *************** *** 88,91 **** --- 88,103 ---- } + /** This method should return true, if this wrapper is + * supported on the actual platform (a wrapper for + * MacOSX should return true only on Mac's with OSX + * etc.) + * @return true, if wrapper is supported, false if wrapper is not supported at this + * platform. + * + */ + public boolean isSupported() throws Exception { + // TODO: Implement real functionality here + return true; + } Index: JavasoundMidiWrapper.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/JavasoundMidiWrapper.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** JavasoundMidiWrapper.java 10 Apr 2003 20:37:08 -0000 1.1 --- JavasoundMidiWrapper.java 15 Aug 2003 20:48:17 -0000 1.2 *************** *** 240,242 **** --- 240,256 ---- return msg.getLength(); } + + /** This method should return true, if this wrapper is + * supported on the actual platform (a wrapper for + * MacOSX should return true only on Mac's with OSX + * etc.) + * @return true, if wrapper is supported, false if wrapper is not supported at this + * platform. + * + */ + public boolean isSupported() { + // TODO: Implement real functionality here + return true; + } + } Index: LinuxMidiWrapper.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/LinuxMidiWrapper.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** LinuxMidiWrapper.java 9 May 2002 00:49:17 -0000 1.3 --- LinuxMidiWrapper.java 15 Aug 2003 20:48:17 -0000 1.4 *************** *** 223,226 **** --- 223,239 ---- {writeLongMessage (port,sysex,sysex.length);} + /** This method should return true, if this wrapper is + * supported on the actual platform (a wrapper for + * MacOSX should return true only on Mac's with OSX + * etc.) + * @return true, if wrapper is supported, false if wrapper is not supported at this + * platform. + * + */ + public boolean isSupported() throws Exception { + // TODO: Implement real functionality here + return true; + } + private class InputThread implements Runnable { Index: MacOSXMidiWrapper.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/MacOSXMidiWrapper.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** MacOSXMidiWrapper.java 25 Jul 2003 18:30:30 -0000 1.3 --- MacOSXMidiWrapper.java 15 Aug 2003 20:48:17 -0000 1.4 *************** *** 1,340 **** ! ! package core; ! ! import java.io.*; ! import javax.swing.*; ! import java.util.*; ! ! import com.apple.component.*; ! import com.apple.audio.midi.*; ! import com.apple.audio.hardware.*; ! import com.apple.audio.toolbox.*; ! import com.apple.audio.units.*; ! import com.apple.audio.util.*; ! import com.apple.audio.*; ! ! ! ! /** ! * Midi wrapper for MacOS X.2 ! * This version is not X.1 compatible. Get the older version. ! * @author Denis Queffeulou mailto:dqu...@fr... ! */ ! public class MacOSXMidiWrapper extends MidiWrapper ! implements MIDICompletionProc ! { ! private static List mInputNames = new ArrayList(); ! private static List mOutputNames = new ArrayList(); ! ! private static int mNumInputs; ! private static int mNumOutputs; ! ! private MIDIClient mClient; ! ! /** device output */ ! private MIDIOutputPort mOutput; ! ! /** all inputs */ ! private MIDIInputPort mInputs[]; ! ! /** contains List of MIDIData by port (MIDIInputPort) */ ! private Map mReceivedDataMap = new Hashtable(); ! ! /** when init done... */ ! private boolean mInitDone = false; ! ! private static boolean mLoadDone = false; ! ! /** MIDI paquet for channel messages , it seems important for ! handling the controller device data smoothy to create only one and reuse it ! because allocate takes too much time ! */ ! private MIDIPacketList mShortMessagePaquetList; ! ! ! ! public MacOSXMidiWrapper(int inport, int outport) throws Exception ! { ! mClient = new MIDIClient(new CAFString("JSynthLib"), null); ! if (!mLoadDone) ! { ! loadDevicesNames(); ! mLoadDone = true; ! } ! mInputs = new MIDIInputPort[mNumInputs]; ! ! // device input ! mInputs[inport] = mClient.inputPortCreate(new CAFString(getInputDeviceName(inport)), new ReadProcImpl()); ! MIDIEndpoint oIn = MIDISetup.getSource(inport); ! mInputs[inport].connectSource(oIn); ! ! // device output ! mOutput = mClient.outputPortCreate(new CAFString(getInputDeviceName(outport))); ! ! mInitDone = true; ! } ! ! public MacOSXMidiWrapper() throws Exception { ! this(0,0); ! } ! ! ! /** ! Init for input read proc. Puts MIDIInputPort in mInputs. ! */ ! void inputInit(int inport) throws Exception ! { ! // controller device ! mInputs[inport] = mClient.inputPortCreate(new CAFString(getInputDeviceName(inport)), new ReadProcImpl()); ! MIDIEndpoint oInContr = MIDISetup.getSource(inport); ! mInputs[inport].connectSource(oInContr); ! } ! ! ! public void setInputDeviceNum (int port) throws Exception ! { ! // System.out.println("setInputDeviceNum port = "+port); ! } ! ! protected void setOutputDeviceNum (int port) throws Exception ! { ! // System.out.println("setOutputDeviceNum port = "+port); ! } ! ! /** ! Send a sysex but can be called with note data !!? ! so it wraps writeShortMessage. ! */ ! public void writeLongMessage (int port,byte []sysex,int length) throws Exception ! { ! // System.out.println("writeLongMessage port = "+port+" len = "+length); ! if (length == 2) ! { ! writeShortMessage (port, sysex[0], sysex[1]); ! } ! else ! if (length == 3) ! { ! writeShortMessage (port, sysex[0], sysex[1], sysex[2]); ! } ! else ! { ! // send sysex ! MIDIEndpoint oOut = MIDISetup.getDestination(port); ! // MIDIData oData = MIDIData.newMIDIPacketData(length); ! MIDIData oData = MIDIData.newMIDIRawData(length); ! ! /* la fonction a l'air de marcher mais l'objet cree ne doit pas etre correct ! oData.copyFromArray(4, mSysex, 0, mLength); ! */ ! int oTab[] = new int[length]; ! for (int i = 0; i < length; i++) ! { ! oTab[i] = (int)sysex[i]; ! } ! oData.addRawData(oTab); ! MIDISysexSendRequest oSysex = new MIDISysexSendRequest(oOut, oData); ! oSysex.send(MacOSXMidiWrapper.this); ! } ! } ! ! ! public void writeLongMessage (int port,byte []sysex)throws Exception ! { ! writeLongMessage(port, sysex, sysex.length); ! } ! ! ! 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 ! { ! // System.out.println("writeShortMessage port = "+port+" b1="+b1+" b2="+b2+" b3= "+b3); ! if (mShortMessagePaquetList == null) ! { ! mShortMessagePaquetList = new MIDIPacketList(); ! } ! else ! { // reuse the paquet ! mShortMessagePaquetList.init(); ! } ! MIDIData oData = MIDIData.newMIDIChannelMessage(b1, b2, b3); ! mShortMessagePaquetList.add(0, oData); ! MIDIEndpoint oOut = MIDISetup.getDestination(port); ! mOutput.send(oOut, mShortMessagePaquetList); ! } ! ! ! public int getNumInputDevices () throws Exception ! { ! if (!mInitDone) ! { ! mNumInputs = MIDISetup.getNumberOfSources(); ! } ! return mNumInputs; ! } ! ! public int getNumOutputDevices ()throws Exception ! { ! if (!mInitDone) ! { ! mNumInputs = MIDISetup.getNumberOfDestinations(); ! } ! return mNumOutputs; ! } ! ! public String getInputDeviceName (int port)throws Exception ! { ! String oS2 = (String)mInputNames.get(port); ! return oS2; ! } ! ! public String getOutputDeviceName (int port)throws Exception ! { ! String oS2 = (String)mOutputNames.get(port); ! return oS2; ! } ! ! /** ! * Called periodically to see if controller has sent a note or ! * device has sent sysex. ! */ ! public int messagesWaiting (int port) throws Exception ! { ! if (mInputs[port] == null) ! { ! // creates new input ! inputInit(port); ! } ! else ! { ! List oList = (List)mReceivedDataMap.get(mInputs[port]); ! if (oList != null) ! { ! if (oList.size() > 0) ! { ! // System.out.println("messagesWaiting port = "+port+" len = "+oList.size()); ! return oList.size(); ! } ! } ! } ! return 0; ! } ! ! /** get the older data packet received */ ! public int readMessage (int port,byte []sysex,int maxSize) throws Exception ! { ! // List oList = (List)mReceivedDataMap.get(getInputDeviceName(port)); ! List oList = (List)mReceivedDataMap.get(mInputs[port]); ! if (oList != null) ! { ! if (oList.size() > 0) ! { ! // get the older packet ! byte[] oData = (byte[])oList.remove(0); ! // System.out.println("readMessage port="+port+" len = "+oData.length); ! System.arraycopy(oData, 0, sysex, 0, oData.length); ! return oData.length; ! } ! } ! return 0; ! } ! ! public void close() ! { ! // System.out.println("close"); ! } ! ! /** ! Load devices names into static variables ! */ ! private static void loadDevicesNames() throws Exception ! { ! int oEntNum = 0; ! mNumInputs = 0; ! mNumOutputs = 0; ! for (int k = 0; k < MIDIDevice.getNumberOfDevices(); k++) ! { ! MIDIDevice oDev = MIDIDevice.getDevice(k); ! // String oS2 = oDev.getStringProperty(MIDIConstants.kMIDIPropertyName).asString(); ! // System.out.println("device = "+oS2); ! for (int entity = 0; entity < oDev.getNumberOfEntities(); entity++) ! { ! MIDIEntity oEnt = oDev.getEntity(entity); ! String oSEntity = oDev.getStringProperty(MIDIConstants.kMIDIPropertyName).asString(); ! // System.out.println("entity = "+oSEntity); ! mNumInputs += oEnt.getNumberOfSources(); ! mNumOutputs += oEnt.getNumberOfDestinations(); ! for (int i = 0; i < oEnt.getNumberOfSources(); i++) ! { ! MIDIEndpoint oIn = oEnt.getSource(i); ! String oSIn = oIn.getStringProperty(MIDIConstants.kMIDIPropertyName).asString(); ! // System.out.println("input = "+oSIn); ! mInputNames.add(oSEntity+" "+oSIn); ! } ! for (int i = 0; i < oEnt.getNumberOfDestinations(); i++) ! { ! MIDIEndpoint oIn = oEnt.getDestination(i); ! String oSOut = oIn.getStringProperty(MIDIConstants.kMIDIPropertyName).asString(); ! // System.out.println("output = "+oSOut); ! mOutputNames.add(oSEntity+" "+oSOut); ! } ! } ! } ! } ! ! // ************** interface MIDICompletionProc ***************************** ! ! /** ! * Called on end of sysex sending ! */ ! public void execute(MIDISysexSendRequest request) ! { ! // System.out.println("SYSEX sent IN"); ! // System.out.println("SYSEX sent OUT"); ! } ! ! // ************** interface MIDIReadProc ***************************** ! ! /** ! * Read method ! */ ! class ReadProcImpl implements MIDIReadProc ! { ! /** ! Sysex are received in several parts. I put them in a list ! read by readMessage. ! */ ! public void execute(MIDIInputPort port, MIDIEndpoint srcEndPoint, MIDIPacketList list) ! { ! try ! { ! List oList = (List)mReceivedDataMap.get(port); ! if (oList == null) ! { ! // Vector for sync need ! oList = new Vector(); ! mReceivedDataMap.put(port, oList); ! } ! int oNumPackets = list.numPackets(); ! for (int i = 0; i < oNumPackets; i++) ! { ! MIDIPacket oPkt = list.getPacket(i); ! MIDIData oData = oPkt.getData(); ! byte[] oArray = new byte[oData.getMIDIDataLength()]; ! oData.copyToArray(0,oArray, 0, oData.getMIDIDataLength()); ! oList.add(oArray); ! } ! } ! catch(Exception cae) ! { ! cae.printStackTrace(); ! } ! } ! } ! ! } ! --- 1,364 ---- ! ! package core; ! ! import java.io.*; ! import javax.swing.*; ! import java.util.*; ! ! import com.apple.component.*; ! import com.apple.audio.midi.*; ! import com.apple.audio.hardware.*; ! import com.apple.audio.toolbox.*; ! import com.apple.audio.units.*; ! import com.apple.audio.util.*; ! import com.apple.audio.*; ! ! ! ! /** ! * Midi wrapper for MacOS X.2 ! * This version is not X.1 compatible. Get the older version. ! * @author Denis Queffeulou mailto:dqu...@fr... ! * @version $Id$ ! */ ! public class MacOSXMidiWrapper extends MidiWrapper ! implements MIDICompletionProc ! { ! private static List mInputNames = new ArrayList(); ! private static List mOutputNames = new ArrayList(); ! ! private static int mNumInputs; ! private static int mNumOutputs; ! ! private MIDIClient mClient; ! ! /** device output */ ! private MIDIOutputPort mOutput; ! ! /** all inputs */ ! private MIDIInputPort mInputs[]; ! ! /** contains List of MIDIData by port (MIDIInputPort) */ ! private Map mReceivedDataMap = new Hashtable(); ! ! /** when init done... */ ! private boolean mInitDone = false; ! ! private static boolean mLoadDone = false; ! ! /** MIDI paquet for channel messages , it seems important for ! handling the controller device data smoothy to create only one and reuse it ! because allocate takes too much time ! */ ! private MIDIPacketList mShortMessagePaquetList; ! ! ! ! public MacOSXMidiWrapper(int inport, int outport) throws Exception ! { ! mClient = new MIDIClient(new CAFString("JSynthLib"), null); ! if (!mLoadDone) ! { ! loadDevicesNames(); ! mLoadDone = true; ! } ! mInputs = new MIDIInputPort[mNumInputs]; ! ! // device input ! mInputs[inport] = mClient.inputPortCreate(new CAFString(getInputDeviceName(inport)), new ReadProcImpl()); ! MIDIEndpoint oIn = MIDISetup.getSource(inport); ! mInputs[inport].connectSource(oIn); ! ! // device output ! mOutput = mClient.outputPortCreate(new CAFString(getInputDeviceName(outport))); ! ! mInitDone = true; ! } ! ! public MacOSXMidiWrapper() throws Exception { ! this(0,0); ! } ! ! ! /** ! Init for input read proc. Puts MIDIInputPort in mInputs. ! */ ! void inputInit(int inport) throws Exception ! { ! // controller device ! mInputs[inport] = mClient.inputPortCreate(new CAFString(getInputDeviceName(inport)), new ReadProcImpl()); ! MIDIEndpoint oInContr = MIDISetup.getSource(inport); ! mInputs[inport].connectSource(oInContr); ! } ! ! ! public void setInputDeviceNum (int port) throws Exception ! { ! // System.out.println("setInputDeviceNum port = "+port); ! } ! ! protected void setOutputDeviceNum (int port) throws Exception ! { ! // System.out.println("setOutputDeviceNum port = "+port); ! } ! ! /** ! Send a sysex but can be called with note data !!? ! so it wraps writeShortMessage. ! */ ! public void writeLongMessage (int port,byte []sysex,int length) throws Exception ! { ! // System.out.println("writeLongMessage port = "+port+" len = "+length); ! if (length == 2) ! { ! writeShortMessage (port, sysex[0], sysex[1]); ! } ! else ! if (length == 3) ! { ! writeShortMessage (port, sysex[0], sysex[1], sysex[2]); ! } ! else ! { ! // send sysex ! MIDIEndpoint oOut = MIDISetup.getDestination(port); ! // MIDIData oData = MIDIData.newMIDIPacketData(length); ! MIDIData oData = MIDIData.newMIDIRawData(length); ! ! /* la fonction a l'air de marcher mais l'objet cree ne doit pas etre correct ! oData.copyFromArray(4, mSysex, 0, mLength); ! */ ! int oTab[] = new int[length]; ! for (int i = 0; i < length; i++) ! { ! oTab[i] = (int)sysex[i]; ! } ! oData.addRawData(oTab); ! MIDISysexSendRequest oSysex = new MIDISysexSendRequest(oOut, oData); ! oSysex.send(MacOSXMidiWrapper.this); ! } ! } ! ! ! public void writeLongMessage (int port,byte []sysex)throws Exception ! { ! writeLongMessage(port, sysex, sysex.length); ! } ! ! ! 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 ! { ! // System.out.println("writeShortMessage port = "+port+" b1="+b1+" b2="+b2+" b3= "+b3); ! if (mShortMessagePaquetList == null) ! { ! mShortMessagePaquetList = new MIDIPacketList(); ! } ! else ! { // reuse the paquet ! mShortMessagePaquetList.init(); ! } ! MIDIData oData = MIDIData.newMIDIChannelMessage(b1, b2, b3); ! mShortMessagePaquetList.add(0, oData); ! MIDIEndpoint oOut = MIDISetup.getDestination(port); ! mOutput.send(oOut, mShortMessagePaquetList); ! } ! ! ! public int getNumInputDevices () throws Exception ! { ! if (!mInitDone) ! { ! mNumInputs = MIDISetup.getNumberOfSources(); ! } ! return mNumInputs; ! } ! ! public int getNumOutputDevices ()throws Exception ! { ! if (!mInitDone) ! { ! mNumInputs = MIDISetup.getNumberOfDestinations(); ! } ! return mNumOutputs; ! } ! ! public String getInputDeviceName (int port)throws Exception ! { ! String oS2 = (String)mInputNames.get(port); ! return oS2; ! } ! ! public String getOutputDeviceName (int port)throws Exception ! { ! String oS2 = (String)mOutputNames.get(port); ! return oS2; ! } ! ! /** ! * Called periodically to see if controller has sent a note or ! * device has sent sysex. ! */ ! public int messagesWaiting (int port) throws Exception ! { ! if (mInputs[port] == null) ! { ! // creates new input ! inputInit(port); ! } ! else ! { ! List oList = (List)mReceivedDataMap.get(mInputs[port]); ! if (oList != null) ! { ! if (oList.size() > 0) ! { ! // System.out.println("messagesWaiting port = "+port+" len = "+oList.size()); ! return oList.size(); ! } ! } ! } ! return 0; ! } ! ! /** get the older data packet received */ ! public int readMessage (int port,byte []sysex,int maxSize) throws Exception ! { ! // List oList = (List)mReceivedDataMap.get(getInputDeviceName(port)); ! List oList = (List)mReceivedDataMap.get(mInputs[port]); ! if (oList != null) ! { ! if (oList.size() > 0) ! { ! // get the older packet ! byte[] oData = (byte[])oList.remove(0); ! // System.out.println("readMessage port="+port+" len = "+oData.length); ! System.arraycopy(oData, 0, sysex, 0, oData.length); ! return oData.length; ! } ! } ! return 0; ! } ! ! public void close() ! { ! // System.out.println("close"); ! } ! ! /** ! Load devices names into static variables ! */ ! private static void loadDevicesNames() throws Exception ! { ! int oEntNum = 0; ! mNumInputs = 0; ! mNumOutputs = 0; ! for (int k = 0; k < MIDIDevice.getNumberOfDevices(); k++) ! { ! MIDIDevice oDev = MIDIDevice.getDevice(k); ! // String oS2 = oDev.getStringProperty(MIDIConstants.kMIDIPropertyName).asString(); ! // System.out.println("device = "+oS2); ! for (int entity = 0; entity < oDev.getNumberOfEntities(); entity++) ! { ! MIDIEntity oEnt = oDev.getEntity(entity); ! String oSEntity = oDev.getStringProperty(MIDIConstants.kMIDIPropertyName).asString(); ! // System.out.println("entity = "+oSEntity); ! mNumInputs += oEnt.getNumberOfSources(); ! mNumOutputs += oEnt.getNumberOfDestinations(); ! for (int i = 0; i < oEnt.getNumberOfSources(); i++) ! { ! MIDIEndpoint oIn = oEnt.getSource(i); ! String oSIn = oIn.getStringProperty(MIDIConstants.kMIDIPropertyName).asString(); ! // System.out.println("input = "+oSIn); ! mInputNames.add(oSEntity+" "+oSIn); ! } ! for (int i = 0; i < oEnt.getNumberOfDestinations(); i++) ! { ! MIDIEndpoint oIn = oEnt.getDestination(i); ! String oSOut = oIn.getStringProperty(MIDIConstants.kMIDIPropertyName).asString(); ! // System.out.println("output = "+oSOut); ! mOutputNames.add(oSEntity+" "+oSOut); ! } ! } ! } ! } ! ! // ************** interface MIDICompletionProc ***************************** ! ! /** ! * Called on end of sysex sending ! */ ! public void execute(MIDISysexSendRequest request) ! { ! // System.out.println("SYSEX sent IN"); ! // System.out.println("SYSEX sent OUT"); ! } ! ! /** This method should return true, if this wrapper is ! * supported on the actual platform (a wrapper for ! * MacOSX should return true only on Mac's with OSX ! * etc.) ! * @return true, if wrapper is supported, false if wrapper is not supported at this ! * platform. ! * ! */ ! public boolean isSupported() throws Exception { ! // TODO: Implement real functionality here ! return true; ! } ! ! // ************** interface MIDIReadProc ***************************** ! ! /** ! * Read method ! */ ! class ReadProcImpl implements MIDIReadProc ! { ! /** ! Sysex are received in several parts. I put them in a list ! read by readMessage. ! */ ! public void execute(MIDIInputPort port, MIDIEndpoint srcEndPoint, MIDIPacketList list) ! { ! try ! { ! List oList = (List)mReceivedDataMap.get(port); ! if (oList == null) ! { ! // Vector for sync need ! oList = new Vector(); ! mReceivedDataMap.put(port, oList); ! } ! int oNumPackets = list.numPackets(); ! for (int i = 0; i < oNumPackets; i++) ! { ! MIDIPacket oPkt = list.getPacket(i); ! MIDIData oData = oPkt.getData(); ! byte[] oArray = new byte[oData.getMIDIDataLength()]; ! oData.copyToArray(0,oArray, 0, oData.getMIDIDataLength()); ! // Rib Rdb (ri...@ya...) ! // Filter out realtime messages ! ByteArrayOutputStream os = ! new ByteArrayOutputStream(256); ! for (int q=0; q<oArray.length; q++) ! if ( (oArray[q] & 0x80) != 0x80 || ! (oArray[q] & 0x7F) < 0x78 ) ! os.write(oArray[q]); ! oArray = os.toByteArray(); ! // End ri...@ya... ! oList.add(oArray); ! } ! } ! catch(Exception cae) ! { ! cae.printStackTrace(); ! } ! } ! } ! ! } ! Index: MidiWrapper.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/MidiWrapper.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** MidiWrapper.java 9 May 2002 00:49:17 -0000 1.3 --- MidiWrapper.java 15 Aug 2003 20:48:17 -0000 1.4 *************** *** 1,4 **** --- 1,7 ---- // Create a subclass of this in order to support a new platform. These are the functions you must implement. package core; + /** + * @version $Id$ + */ abstract public class MidiWrapper { *************** *** 22,25 **** --- 25,36 ---- PatchEdit.midiMonitor.log(port,in,sysex,length); } + /** This method should return true, if this wrapper is + * supported on the actual platform (a wrapper for + * MacOSX should return true only on Mac's with OSX + * etc.) + * @return true, if wrapper is supported, false if wrapper is not supported at this + * platform. + */ + public abstract boolean isSupported() throws Exception; public void close() {} Index: PatchEdit.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/PatchEdit.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** PatchEdit.java 11 Aug 2003 10:06:45 -0000 1.16 --- PatchEdit.java 15 Aug 2003 20:48:17 -0000 1.17 *************** *** 768,779 **** setEnabled (false); } ! public void actionPerformed (ActionEvent e) ! { ! try ! { JInternalFrame frm= ((PatchBasket)desktop.getSelectedFrame ()).EditSelectedPatch (); ! if (frm!=null) ! { frm.setVisible (true); desktop.add (frm); --- 768,782 ---- setEnabled (false); } ! public void actionPerformed (ActionEvent e){ ! Worker w = new Worker(); ! w.setDaemon(true); ! w.start(); ! } ! class Worker extends Thread { ! public void run () { ! try { JInternalFrame frm= ((PatchBasket)desktop.getSelectedFrame ()).EditSelectedPatch (); ! if (frm!=null) { frm.setVisible (true); desktop.add (frm); *************** *** 791,797 **** {} } ! } catch (Exception ex) ! {ErrorMsg.reportError ("Error", "Library holding Patch to Edit must be the focused Window.",ex);}; ! } } --- 794,804 ---- {} } ! ! } ! catch (Exception ex){ ! ErrorMsg.reportError ("Error", "Library holding Patch to Edit must be the focused Window.",ex); ! }; ! } ! } } *************** *** 1280,1285 **** if ((desktop.getSelectedFrame () instanceof PatchBasket)&&(!(desktop.getSelectedFrame () instanceof PatchEditorFrame))) { ! if ((desktop.getSelectedFrame () instanceof LibraryFrame ) & ! ((LibraryFrame)((desktop.getSelectedFrame ()))).table.getSelectedRowCount ()==0) break; ((PatchBasket)desktop.getSelectedFrame ()).CopySelectedPatch (); --- 1287,1292 ---- if ((desktop.getSelectedFrame () instanceof PatchBasket)&&(!(desktop.getSelectedFrame () instanceof PatchEditorFrame))) { ! if ((desktop.getSelectedFrame () instanceof LibraryFrame )) ! if (((LibraryFrame)((desktop.getSelectedFrame ()))).table.getSelectedRowCount ()==0) break; ((PatchBasket)desktop.getSelectedFrame ()).CopySelectedPatch (); Index: VertScrollBarWidget.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/VertScrollBarWidget.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** VertScrollBarWidget.java 9 May 2002 00:49:17 -0000 1.3 --- VertScrollBarWidget.java 15 Aug 2003 20:48:17 -0000 1.4 *************** *** 4,12 **** import java.awt.event.*; import javax.swing.event.*; public class VertScrollBarWidget extends ScrollBarWidget { int base; JTextField text; ! JSlider slider; public VertScrollBarWidget(String l,Patch p,int min, int max,int b,ParamModel ofs,SysexSender s) --- 4,15 ---- import java.awt.event.*; import javax.swing.event.*; + /** + * @version $Id$ + */ public class VertScrollBarWidget extends ScrollBarWidget { int base; JTextField text; ! public JSlider slider; public VertScrollBarWidget(String l,Patch p,int min, int max,int b,ParamModel ofs,SysexSender s) Index: WireMidiWrapper.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/WireMidiWrapper.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** WireMidiWrapper.java 14 Feb 2003 22:05:02 -0000 1.5 --- WireMidiWrapper.java 15 Aug 2003 20:48:17 -0000 1.6 *************** *** 4,7 **** --- 4,10 ---- import java.util.*; + /** + * @version $Id$ + */ public class WireMidiWrapper extends MidiWrapper implements Receiver { *************** *** 207,209 **** --- 210,219 ---- return msg.getLength (); } + + public boolean isSupported() { + // TODO: Implement real functionality here + return true; + } + + } |
From: <ge...@us...> - 2003-08-15 20:50:55
|
Update of /cvsroot/jsynthlib/JSynthLib/synthdrivers/YamahaMotif In directory sc8-pr-cvs1:/tmp/cvs-serv1974/YamahaMotif Log Message: Directory /cvsroot/jsynthlib/JSynthLib/synthdrivers/YamahaMotif added to the repository |
From: <ge...@us...> - 2003-08-15 20:48:31
|
Update of /cvsroot/jsynthlib/JSynthLib In directory sc8-pr-cvs1:/tmp/cvs-serv2738 Modified Files: documentation.html synthdrivers.properties Log Message: Updated documentation (line breaks) and synthdrivers.properties file (new devices) Index: documentation.html =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/documentation.html,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** documentation.html 14 Aug 2003 19:36:59 -0000 1.6 --- documentation.html 15 Aug 2003 20:47:04 -0000 1.7 *************** *** 6,419 **** </head> ! <body bgcolor="#E5ED9D" text="Black" link="#3D75B4" vlink="#315480" alink="Red" leftmargin=40 topmargin=40> <font face="Verdana,arial,helvetica" size="-1"> <h2><a name="toc">JSynthLib Documentation</h2> ! <ol type="I"> ! <li><a href="#overview">JSynthLib Overview</a> ! <ol type="A"> ! <li><a href="#purpose">Purpose</a> [...2345 lines suppressed...] ! code. Get a good idea of what values are what when and look for ! something that shouldnt be. Better yet, use ! ErrorMsg.reportError("ErrorMsg goes here") instead. This way the ! message is only printed if JSynthLib is run in debugging mode (aka ! java -jar JSynthLib.jar 2) <br> ! ! 2) Use a midi cable to connect your computer's midi out to midi ! in. Get a program from the internet to printout all incomming midi ! messages. now you can see what messages your editor/driver is sending ! and you can check them for correctness.<br> ! ! 3) When you are working on a driver and it doesn't seem to be doing ! what the code looks like it should do, one common problem is that if ! you make a change to the Constructor, you need to go into JSynthLib ! and remove the driver from the SynthConfig Dialog box and then add it ! again. Otherwise the newly Changed constructor isn't getting ! called.<br> ! Good Luck. <br> </body> Index: synthdrivers.properties =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/synthdrivers.properties,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** synthdrivers.properties 7 Aug 2003 22:28:25 -0000 1.7 --- synthdrivers.properties 15 Aug 2003 20:47:04 -0000 1.8 *************** *** 1,4 **** #Generated devicesfile ! #Fri Aug 08 00:27:13 CEST 2003 deviceClass.PeaveyPC1600=synthdrivers.PeaveyPC1600.PeaveyPC1600Device inquriyID.YamahaTX81z=NONE --- 1,4 ---- #Generated devicesfile ! #Fri Aug 15 18:35:16 CEST 2003 deviceClass.PeaveyPC1600=synthdrivers.PeaveyPC1600.PeaveyPC1600Device inquriyID.YamahaTX81z=NONE *************** *** 7,12 **** --- 7,14 ---- deviceClass.RolandXV5080=synthdrivers.RolandXV5080.RolandXV5080Device inquriyID.NovationNova1=F07E**06020020290100210020000000F7 + deviceClass.KorgX3=synthdrivers.KorgX3.KorgX3Device inquriyID.KorgWavestation=F07E**06024228000100********F7 deviceClass.NovationNova1=synthdrivers.NovationNova1.NovationNova1Device + inquriyID.YamahaMotif=F07E7F06024300417*040000007FF7 manufacturer.KorgWavestation=Korg inquriyID.AlesisQS=F07E7F060200000E0E000*00********f7 *************** *** 35,38 **** --- 37,42 ---- inquriyID.YamahaTX7=NONE manufacturer.EnsoniqESQ1=Ensoniq + deviceClass.MIDIboxSID=synthdrivers.MIDIboxSID.MIDIboxSIDDevice + deviceClass.YamahaMotif=synthdrivers.YamahaMotif.YamahaMotifDevice deviceClass.Generic=synthdrivers.Generic.GenericDevice inquriyID.SCIProphet600=NONE *************** *** 45,56 **** --- 49,64 ---- inquriyID.KawaiK4=F07E**0602400000040000000000f7 manufacturer.YamahaTX81z=Yamaha + deviceName.MIDIboxSID=MIDIbox SID Driver inquriyID.YamahaFS1R=NONE deviceClass.KorgWavestation=synthdrivers.KorgWavestation.KorgWavestationDevice deviceName.KawaiK5000=Kawai K5000 Driver + manufacturer.KorgX3=Korg deviceName.YamahaTX81z=Yamaha TX81z Driver + manufacturer.YamahaMotif=Yamaha deviceClass.YamahaTG33=synthdrivers.YamahaTG33.YamahaTG33Device inquriyID.YamahaDX7II=NONE deviceName.OberheimMatrix1000=Oberheim Matrix 1000 Driver inquriyID.RolandMKS50=NONE + deviceName.YamahaMotif=Yamaha Motif Driver inquriyID.NordLead=NONE inquriyID.EmuProteus=F07E**06021804040800********F7 *************** *** 58,65 **** deviceName.KorgWavestation=Korg Wavestation Driver deviceName.YamahaTG33=Yamaha TG33/SY22 Driver - manufacturer.OberheimMatrix1000=Oberheim manufacturer.PeaveyPC1600=Peavey manufacturer.AlesisQS=Alesis deviceClass.OberheimMatrix6=synthdrivers.OberheimMatrix.OberheimMatrix6Device manufacturer.RolandXV5080=Roland manufacturer.NovationNova1=Novation --- 66,74 ---- deviceName.KorgWavestation=Korg Wavestation Driver deviceName.YamahaTG33=Yamaha TG33/SY22 Driver manufacturer.PeaveyPC1600=Peavey + manufacturer.OberheimMatrix1000=Oberheim manufacturer.AlesisQS=Alesis deviceClass.OberheimMatrix6=synthdrivers.OberheimMatrix.OberheimMatrix6Device + deviceName.KorgX3=Korg X3 Driver manufacturer.RolandXV5080=Roland manufacturer.NovationNova1=Novation *************** *** 72,75 **** --- 81,85 ---- deviceName.YamahaDX7s=Yamaha DX7s Driver deviceName.RolandXV5080=Roland XV5080 Driver + inquriyID.KorgX3=F07E**0602423500**00**00**00F7 inquriyID.YamahaTX802=NONE deviceName.AlesisQS=Alesis QS7/QS8/QSR Driver *************** *** 91,94 **** --- 101,105 ---- inquriyID.AccessVirus=NONE deviceClass.YamahaTX802=synthdrivers.YamahaTX802.YamahaTX802Device + manufacturer.MIDIboxSID=MIDIbox inquriyID.YamahaDX100=NONE deviceName.YamahaDX7II=Yamaha DX7-II Driver *************** *** 100,103 **** --- 111,115 ---- inquriyID.AlesisA6=NONE deviceClass.KorgER1=synthdrivers.KorgER1.KorgER1Device + inquriyID.MIDIboxSID=F000007E46000FF7 manufacturer.NordLead=Nord inquriyID.OberheimMatrix1000=F07E**06021006000200********F7 *************** *** 108,113 **** deviceName.YamahaFS1R=Yamaha FS1R Driver manufacturer.YamahaTG33=Yamaha - manufacturer.KawaiK4=Kawai inquriyID.PeaveyPC1600=NONE deviceClass.EmuProteus=synthdrivers.EmuProteusMPS.EmuProteusDevice deviceName.CasioCZ1000=Casio CZ1000 Driver --- 120,125 ---- deviceName.YamahaFS1R=Yamaha FS1R Driver manufacturer.YamahaTG33=Yamaha inquriyID.PeaveyPC1600=NONE + manufacturer.KawaiK4=Kawai deviceClass.EmuProteus=synthdrivers.EmuProteusMPS.EmuProteusDevice deviceName.CasioCZ1000=Casio CZ1000 Driver |
From: <ge...@us...> - 2003-08-14 23:53:44
|
Update of /cvsroot/jsynthlib/JSynthLib/synthdrivers/MIDIboxSID In directory sc8-pr-cvs1:/tmp/cvs-serv30744/MIDIboxSID Log Message: Directory /cvsroot/jsynthlib/JSynthLib/synthdrivers/MIDIboxSID added to the repository |
From: <ge...@us...> - 2003-08-14 23:44:57
|
Update of /cvsroot/jsynthlib/JSynthLib In directory sc8-pr-cvs1:/tmp/cvs-serv26415 Modified Files: documentation.html Log Message: Further corrections in the documentation. Index: documentation.html =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/documentation.html,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** documentation.html 12 Aug 2003 21:21:56 -0000 1.5 --- documentation.html 14 Aug 2003 19:36:59 -0000 1.6 *************** *** 1,4 **** <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ! <html> <head> --- 1,4 ---- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> ! <! $Id$ > <html> <head> *************** *** 335,339 **** associated with that synthesizer will be installed. There is also a button to remove, or uninstall a synthesizer driver, for example if you no longer own a particular synth. The third button closes the Synth dialog.</p> ! <p>As of version 0.15, there is an additional button called "Auto-Scan". Currently this feature only works when you are running JSynthLib under Windows and using the WireProvider MIDI drivers. When you chose this option, JSynthLib will attempt to scan your MIDI ports for supported Synthesizers and correctly add and configure them for you. It is not able to detect certain synths (such as Yamaha and Roland) and you should doublecheck the settings it determines for accuracy, but it can still be more conventient then having to add and configure them all by hand.</p> <p><b>Preferences</b>-- This dialog is used to configure various settings that determine how JSynthLib functions. --- 335,344 ---- associated with that synthesizer will be installed. There is also a button to remove, or uninstall a synthesizer driver, for example if you no longer own a particular synth. The third button closes the Synth dialog.</p> ! <p>As of version 0.15, there is an additional button called "Auto-Scan". ! Currently this feature does not work with the JavaMidi-drivers. ! When you chose this option, JSynthLib will attempt to scan your MIDI ports for supported ! Synthesizers and correctly add and configure them for you. It is not able to detect certain synths ! (such as Yamaha and Roland) and you should doublecheck the settings it determines for accuracy, ! but it can still be more conventient then having to add and configure them all by hand.</p> <p><b>Preferences</b>-- This dialog is used to configure various settings that determine how JSynthLib functions. *************** *** 345,349 **** It seems to work well and can transfer large sysex messages. The JavaMIDI option is included in case WireProvider does not work on your set up. If this is the case, you should e-mail in a bug report, and use JavaMIDI for now. <p>In the directorys tab, you can set the default directory from which JSynthLib will attempt to load and save files. The library path determines where the .patchlib files are loaded and saved. The sysex path is used by the import and export commands. ! <p>The second tab holds MIDI settings. The parameter called "Run Initialization on midi ports" only needs to be played with if JSynthLib tells you to on startup or if you want to free the ports for another program. Basically, it needs to grab a couple of midi ports on your system when it starts up to initialize itself. Normally it just grabs the first ones it sees and thats fine. On some systems though, the first MIDI ports will be in use by some other program, or you'll want them left alone for some other program to use. Most MIDI port drivers allow more than one program to use the port, but not all. These parameters just give you the most control possible. <p>The master controller port determines which MIDI port JSynthlib will watch for Notes being played. If notes are played (for example from a midi keyboard) on this port, JSynthLib will echo them to whatever Synthesizer you are currently working with. (Either by having an editor open in the foreground or having a library open in the foreground and having a patch selected). This allows you more controlling auditioning patches than just using the "play" command. If you have no master controller or don't want to use one, just set this to the same value as your "Run Initialization on" MIDI IN port. <p>The fader tab allows you to configure your fader box if you want to use one. A fader box can be useful when editing patches, see the section of this documentation on editing patches for details of what they do. If you want to enable faders, you just check the enable box and set the fader port to the port on which you want to receive faders. Note that due to a bug in the MIDI routines used, JSynthLib will also receive faders on the master controller port. --- 350,356 ---- It seems to work well and can transfer large sysex messages. The JavaMIDI option is included in case WireProvider does not work on your set up. If this is the case, you should e-mail in a bug report, and use JavaMIDI for now. <p>In the directorys tab, you can set the default directory from which JSynthLib will attempt to load and save files. The library path determines where the .patchlib files are loaded and saved. The sysex path is used by the import and export commands. ! <p>The second tab holds MIDI settings. ! The parameter called "Run Initialization on midi ports" only needs to be played with if JSynthLib ! tells you to on startup or if you want to free the ports for another program. Basically, it needs to grab a couple of midi ports on your system when it starts up to initialize itself. Normally it just grabs the first ones it sees and thats fine. On some systems though, the first MIDI ports will be in use by some other program, or you'll want them left alone for some other program to use. Most MIDI port drivers allow more than one program to use the port, but not all. These parameters just give you the most control possible. <p>The master controller port determines which MIDI port JSynthlib will watch for Notes being played. If notes are played (for example from a midi keyboard) on this port, JSynthLib will echo them to whatever Synthesizer you are currently working with. (Either by having an editor open in the foreground or having a library open in the foreground and having a patch selected). This allows you more controlling auditioning patches than just using the "play" command. If you have no master controller or don't want to use one, just set this to the same value as your "Run Initialization on" MIDI IN port. <p>The fader tab allows you to configure your fader box if you want to use one. A fader box can be useful when editing patches, see the section of this documentation on editing patches for details of what they do. If you want to enable faders, you just check the enable box and set the fader port to the port on which you want to receive faders. Note that due to a bug in the MIDI routines used, JSynthLib will also receive faders on the master controller port. *************** *** 438,442 **** 2. You probably also need the synthesizer you wish to add support for (for testing). While it might be possible to do it without the synthesizer, it would be pretty tough.<br> ! 3. You'll need a copy of the Java 1.3 (or higher) JDK. This is availible for free from java.sun.com This contains the various tools used to compile JSynthLib<br> 4. You'll need a text editor in order to edit code. Anything will work. I wrote a significant --- 445,449 ---- 2. You probably also need the synthesizer you wish to add support for (for testing). While it might be possible to do it without the synthesizer, it would be pretty tough.<br> ! 3. You'll need a copy of the Java 1.3 (or higher) JDK. This is availiable for free from java.sun.com This contains the various tools used to compile JSynthLib<br> 4. You'll need a text editor in order to edit code. Anything will work. I wrote a significant *************** *** 462,466 **** doing work on JSynthLib. If you have a different way of setting up your working environment, feel free to use it, but this works for me.<br> ! First, decompress JSynthLib.zip to the directory you are going to work in (such as C:\JSynthLib) Next, open up a DOS prompt set to 50 row display and set it to that directory. This is used to run JSynthLib for testing (the 50 row display helps keep error messages from scolling off the screen too fast). Make sure that the java.exe and javac.exe executables are in your path for easy access. Next, open up your trusty editor to the correct directory.<br> --- 469,474 ---- doing work on JSynthLib. If you have a different way of setting up your working environment, feel free to use it, but this works for me.<br> ! First, decompress JSynthLib.zip to the directory you are going to work in (such as ! C:\JSynthLib). Next, open up a DOS prompt set to 50 row display and set it to that directory. This is used to run JSynthLib for testing (the 50 row display helps keep error messages from scolling off the screen too fast). Make sure that the java.exe and javac.exe executables are in your path for easy access. Next, open up your trusty editor to the correct directory.<br> *************** *** 469,475 **** <b>Section 3: The Layout of JSynthLib<br></b> <br> ! If you look at the JSynthLib directory, you'll see a number of files and directories. Since you are only adding support for a synthesizer, and not working on the core program, you don't have to worry about most of these. For you, the most important areas are the SynthDrivers directory where code pertaining to various synthesizers are kept, and the JSynthLib.jar file, which holds most of the code.<br> <br> ! Though 99% of your work will go in the SynthDrivers directory, you need to tell the core JSynthLib program about the existance of your new code. To do so, you must make a small change to the core program itself. All of the core code is kept bundled up inside the JSynthLib.jar file. To extract it, run<br> jar -xvf JSynthLib.jar<br> <br> --- 477,491 ---- <b>Section 3: The Layout of JSynthLib<br></b> <br> ! If you look at the JSynthLib directory, you'll see a number of files and directories. ! Since you are only adding support for a synthesizer, and not working on the core program, ! you don't have to worry about most of these. For you, the most important areas are the ! SynthDrivers directory where code pertaining to various synthesizers are kept, and the JSynthLib.jar file, which holds most of the code.<br> <br> ! Though 99% of your work will go in the SynthDrivers directory, ! you need to tell the core JSynthLib program about the existance of your new code. ! To do so, you must only make entries into the file "syntdrivers.properties", located ! in the main directory. ! <br> ! All of the core code is kept bundled up inside the JSynthLib.jar file. To extract it, run<br> jar -xvf JSynthLib.jar<br> <br> *************** *** 515,525 **** <i> Step 2: Tell the core program about your driver.<br></i> <br> ! Edit the file called \synthdrivers.properties. This is the only file in the core JSynthLib program that you will have to edit. Add an entry with your synthesizer's name and class to the properties file ! Just write it exactly like the ones for the other drivers. The entry will look like this:<br> <pre> deviceName.OberheimMatrix1000=Oberheim Matrix 1000 Driver deviceClass.OberheimMatrix1000=synthdrivers.OberheimMatrix.OberheimMatrix1000Device </pre> ! Save this file. If all goes well, JSynthLib now knows<br> about your driver. Now you just have to write it :)<br> <br> --- 531,551 ---- <i> Step 2: Tell the core program about your driver.<br></i> <br> ! Edit the file called \synthdrivers.properties. This is the only file in the core ! JSynthLib program that you will have to edit. Add an entry with your synthesizer's ! name and class to the properties file. Just write it exactly like the ones for ! the other drivers. ! You need three or four entries for each supported device: ! The manufacturer, the plain text name of the device, the class including the ! entire path for the device-class and optionally the string for the response to ! the universal inquiry message, if your device supports it and you want, that the ! device is recognized by the autoscanner. <BR> ! The entry will look like this:<br> <pre> + manufacturer.OberheimMatrix1000=Oberheim deviceName.OberheimMatrix1000=Oberheim Matrix 1000 Driver deviceClass.OberheimMatrix1000=synthdrivers.OberheimMatrix.OberheimMatrix1000Device + inquriyID.OberheimMatrix1000=F07E**06021006000200********F7 </pre> ! Save this file. If all goes well, JSynthLib now knows about your driver. Now you just have to write it :)<br> <br> *************** *** 533,541 **** to override some of the functions in driver.java to perform for your synth. <br> <br> ! Looking at your driver code (which you stole from the KawaiK4 code like I told you to) You'll see that we had to implement functions to Store and Send patches to the synth. This is common, since usually, slightly different sysex messages are used to send a patch to the editing buffer (and not overwrite a patch) or to a specific patch (and overwrite). Change these functions to match your synth. If your synth has no edit buffer, you'll need to write the send method to treat a specific patch location on the synth as the edit buffer and overwrite it (see the EmuProteusMPS Driver for an example of this).<br> <br> ! You'll also see that for the KawaiK4, I had to override the computeChecksum method in drivers.java because the K4 uses a different algorithem than the default. You'll find that the checksum computation is the most common method which needs to be overriden, either because of multiple checksums or because your synth uses a different method to compute its checksum (by default JSynthLib adds all of the data bytes, takes the lowest 7 bits, xors them with 127 and adds one to get the checksum). All of this is in core\drivers.java. Take a look. Computing the checksum properly is the hardest part of <br> ! writing the driver. Trial and error. If your synth uses the default checksum method, you can erase this method from your source file. Otherwise implement it. Note that in the K4 version, two lines are commented out. This is bad programming, I should have erased them. Sorry.<br> <br> There are two functions that will always need to be overridden if you wish to provide that functionality becuase there is no default version in core\driver.java. T%hese are both easy to implement. One of these is the function which returns a new (blank) patch. The other opens an editing window for the patch and must be included if you plan to write a Single Editor for your synth. You should be able to figure out how to write these by looking at the code for the K4.<br> --- 559,577 ---- to override some of the functions in driver.java to perform for your synth. <br> <br> ! Looking at your driver code (which you stole from the KawaiK4 code like I told you ! to). You'll see that we had to implement functions to Store and Send patches to the synth. This is common, since usually, slightly different sysex messages are used to send a patch to the editing buffer (and not overwrite a patch) or to a specific patch (and overwrite). Change these functions to match your synth. If your synth has no edit buffer, you'll need to write the send method to treat a specific patch location on the synth as the edit buffer and overwrite it (see the EmuProteusMPS Driver for an example of this).<br> <br> ! You'll also see that for the KawaiK4, I had to override the computeChecksum ! method in drivers.java because the K4 uses a different algorithem than the default. ! You'll find that the checksum computation is the most common method which needs ! to be overriden, either because of multiple checksums or because your synth uses ! a different method to compute its checksum (by default JSynthLib adds all of the ! data bytes, takes the lowest 7 bits, xors them with 127 and adds one to get the checksum). ! All of this is in core\drivers.java. Take a look. Computing the checksum properly ! is the hardest part of writing the driver. Trial and error. ! If your synth uses the default checksum method, you can erase this method from your source file. ! Otherwise implement it. Note that in the K4 version, two lines are commented out. ! This is bad programming, I should have erased them. Sorry.<br> <br> There are two functions that will always need to be overridden if you wish to provide that functionality becuase there is no default version in core\driver.java. T%hese are both easy to implement. One of these is the function which returns a new (blank) patch. The other opens an editing window for the patch and must be included if you plan to write a Single Editor for your synth. You should be able to figure out how to write these by looking at the code for the K4.<br> *************** *** 547,551 **** <b>Section 6: Writing a Bank Driver for your Synthesizer<br></b> <br> ! If you've decided to write a bank driver for your synth, make sure you told JSynthLib that back in Section 5 Step 2 of this document. Basically, write this the same way you did the single driver. Copy the BankDriver from the KawaiK4 or one of the other synths and edit it to fit your needs. Change all the data in the constructor to fit you synth. The bank driver subclasses core\BankDriver.java. I recommend you look at that file (its commented nicely) and figure out which functions you need to override.<br> <br> <b>Section 7: Writing a Single Editor for your Synthesizer.<br></b> --- 583,589 ---- <b>Section 6: Writing a Bank Driver for your Synthesizer<br></b> <br> ! If you've decided to write a bank driver for your synth, make sure you told ! JSynthLib that back in Section 5 Step 2 of this document. ! Basically, write this the same way you did the single driver. Copy the BankDriver from the KawaiK4 or one of the other synths and edit it to fit your needs. Change all the data in the constructor to fit you synth. The bank driver subclasses core\BankDriver.java. I recommend you look at that file (its commented nicely) and figure out which functions you need to override.<br> <br> <b>Section 7: Writing a Single Editor for your Synthesizer.<br></b> *************** *** 776,780 **** <p>Note: I never write an editor but here are some suggestions: ! <p>- Usually, modifications done in the editor are sent in real-time to your synth. However, the editor must also make the same modification in the single patch that is edited. To test that it works correctly, you should made some modification in the editor and save the patch (do not send that patch to the edit buffer of your synth). Now, on your synth, the same patch should be in the edit buffer since all single edit will have send sysex for every parameter changed. Do a dump from your synth to PC and compare it to the patch JSynthLib just created. They should be identical. Normally, you should try each fader or knob in the editor to be sure they are controlling the correct parameter. Just move each one at random when creating the patch. If you do that some time (random edit, saving and comparing the file), chance are the editor behave correctly. Note: I suggest to move each fader at random because putting all of them to 0 or max is not a good idea since your editor may send knob info to the wrong place and you will not be able to detect it by comparing the .syx file! --- 814,831 ---- <p>Note: I never write an editor but here are some suggestions: ! <p>- Usually, modifications done in the editor are sent in real-time to your synth. ! However, the editor must also make the same modification in the single patch that ! is edited. To test that it works correctly, you should made some modification in ! the editor and save the patch (do not send that patch to the edit buffer of your synth). ! Now, on your synth, the same patch should be in the edit buffer since all single ! edit will have send sysex for every parameter changed. ! Do a dump from your synth to PC and compare it to the patch JSynthLib just created. ! They should be identical. Normally, you should try each fader or knob in the editor ! to be sure they are controlling the correct parameter. Just move each one at random ! when creating the patch. If you do that some time (random edit, saving and comparing ! the file), chance are the editor behave correctly. Note: I suggest to move each ! fader at random because putting all of them to 0 or max is not a good idea since ! your editor may send knob info to the wrong place and you will not be able to ! detect it by comparing the .syx file! |
From: <ge...@us...> - 2003-08-12 21:08:35
|
Update of /cvsroot/jsynthlib/JSynthLib/synthdrivers/NordLead In directory sc8-pr-cvs1:/tmp/cvs-serv18405 Added Files: NL2PerfBankDriver.java NL2PerfSingleDriver.java Log Message: Added finally the missing two NL2-drivers --- NEW FILE: NL2PerfBankDriver.java --- // written by Kenneth L. Martinez // $Id: NL2PerfBankDriver.java,v 1.1 2003/08/12 20:56:01 gehnen Exp $ package synthdrivers.NordLead; import core.*; import javax.swing.*; public class NL2PerfBankDriver extends BankDriver { static final int BANK_NUM_OFFSET = 4; static final int PATCH_NUM_OFFSET = 5; static final int NUM_IN_BANK = 100; NordLeadConfig nlConfig; public NL2PerfBankDriver(NordLeadConfig nlc) { nlConfig = nlc; authors = "Kenneth L. Martinez"; manufacturer = "Nord"; model = "Lead2"; patchType = "Perf Bank"; id = "Lead2"; sysexID = "F033**04**"; sysexRequestDump = new SysexHandler("F0 33 @@ 04 *bankNum* *patchNum* F7"); singleSysexID = "F033**04**"; singleSize = 715; patchSize = singleSize * NUM_IN_BANK; patchNameStart = -1; patchNameSize = 0; deviceIDoffset = 2; bankNumbers = NLPerfSingleDriver.BANK_LIST; patchNumbers = NLPerfSingleDriver.PATCH_LIST; numPatches = patchNumbers.length; numColumns = 5; } public void calculateChecksum(Patch p) { // doesn't use checksum } public void calculateChecksum(Patch p, int start, int end, int ofs) { // doesn't use checksum } public void storePatch (Patch p, int bankNum, int patchNum) { if (bankNum == 0) { JOptionPane.showMessageDialog(PatchEdit.instance, "Cannot send to ROM bank", "Store Patch", JOptionPane.WARNING_MESSAGE ); } else { setBankNum(bankNum); // must set bank - sysex patch dump always stored in current bank setPatchNum(patchNum); // must send program change to make bank change take effect sendPatchWorker(p, bankNum); } } public void putPatch(Patch bank, Patch p, int patchNum) { if (!canHoldPatch(p)) { ErrorMsg.reportError("Error", "This type of patch does not fit in to this type of bank."); return; } System.arraycopy(p.sysex, 0, bank.sysex, patchNum * singleSize, singleSize); bank.sysex[patchNum * singleSize + PATCH_NUM_OFFSET] = (byte)patchNum; // set program # } public Patch getPatch(Patch bank, int patchNum) { byte sysex[] = new byte[singleSize]; System.arraycopy(bank.sysex, patchNum * singleSize, sysex, 0, singleSize); Patch p = new Patch(sysex); return p; } public String getPatchName(Patch p, int patchNum) { return "-"; } public void setPatchName(Patch p,int patchNum, String name) {} protected void sendPatchWorker (Patch p) { sendPatchWorker(p, 0); } protected void sendPatchWorker (Patch p, int bankNum) { byte tmp[] = new byte[singleSize]; // send in 100 single-performance messages try { PatchEdit.waitDialog.show(); for (int i = 0; i < NUM_IN_BANK; i++) { System.arraycopy(p.sysex, i * singleSize, tmp, 0, singleSize); tmp[deviceIDoffset] = (byte)(nlConfig.getGlobalChannel() - 1); tmp[BANK_NUM_OFFSET] = (byte)31; tmp[PATCH_NUM_OFFSET] = (byte)i; // performance # PatchEdit.MidiOut.writeLongMessage(port, tmp); Thread.sleep(50); } PatchEdit.waitDialog.hide(); } catch (Exception e) { ErrorMsg.reportStatus (e); ErrorMsg.reportError("Error", "Unable to send Patch"); } } public Patch createNewPatch() { byte tmp[] = new byte[singleSize]; byte sysex[] = new byte[patchSize]; System.arraycopy(NLPerfSingleDriver.NEW_PATCH, 0, tmp, 0, singleSize); for (int i = 0; i < NUM_IN_BANK; i++) { tmp[PATCH_NUM_OFFSET] = (byte)i; // program # System.arraycopy(tmp, 0, sysex, i * singleSize, singleSize); } Patch p = new Patch(sysex); p.ChooseDriver(); return p; } public void requestPatchDump(int bankNum, int patchNum) { for (int i = 0; i < NUM_IN_BANK; i++) { sysexRequestDump.send(port, (byte)(nlConfig.getGlobalChannel()), new NameValue("bankNum", 41), new NameValue("patchNum", i) ); try { Thread.sleep(250); // it takes some time for each performance to be sent } catch (Exception e) { ErrorMsg.reportStatus (e); ErrorMsg.reportError("Error", "Unable to request Patch " + i); } } } } --- NEW FILE: NL2PerfSingleDriver.java --- // written by Kenneth L. Martinez // $Id: NL2PerfSingleDriver.java,v 1.1 2003/08/12 20:56:01 gehnen Exp $ package synthdrivers.NordLead; import core.*; import javax.swing.*; public class NL2PerfSingleDriver extends Driver { static final String BANK_LIST[] = new String[] { "PCMCIA" }; static final String PATCH_LIST[] = new String[] { "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "B0", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "C8", "C9", "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "D8", "D9", "E0", "E1", "E2", "E3", "E4", "E5", "E6", "E7", "E8", "E9", "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "G0", "G1", "G2", "G3", "G4", "G5", "G6", "G7", "G8", "G9", "H0", "H1", "H2", "H3", "H4", "H5", "H6", "H7", "H8", "H9", "J0", "J1", "J2", "J3", "J4", "J5", "J6", "J7", "J8", "J9", "L0", "L1", "L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9" }; static final int BANK_NUM_OFFSET = 4; static final int PATCH_NUM_OFFSET = 5; static final byte NEW_PATCH[] = { (byte)0xF0, (byte)0x33, (byte)0x00, (byte)0x04, (byte)0x1F, (byte)0x00, (byte)0x07, (byte)0x06, (byte)0x0A, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x0D, (byte)0x01, (byte)0x03, (byte)0x02, (byte)0x09, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x0B, (byte)0x06, (byte)0x00, (byte)0x00, (byte)0x0E, (byte)0x05, (byte)0x00, (byte)0x00, (byte)0x0A, (byte)0x06, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x05, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x04, (byte)0x00, (byte)0x00, (byte)0x0B, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x01, (byte)0x01, (byte)0x04, (byte)0x08, (byte)0x04, (byte)0x0E, (byte)0x03, (byte)0x0B, (byte)0x02, (byte)0x0E, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x0D, (byte)0x0E, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x04, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x01, (byte)0x0F, (byte)0x02, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x0A, (byte)0x04, (byte)0x0B, (byte)0x03, (byte)0x06, (byte)0x03, (byte)0x03, (byte)0x01, (byte)0x0E, (byte)0x04, (byte)0x07, (byte)0x03, (byte)0x08, (byte)0x04, (byte)0x00, (byte)0x00, (byte)0x0E, (byte)0x04, (byte)0x0C, (byte)0x02, (byte)0x08, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x08, (byte)0x05, (byte)0x02, (byte)0x06, (byte)0x06, (byte)0x01, (byte)0x03, (byte)0x02, (byte)0x03, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x0D, (byte)0x00, (byte)0x03, (byte)0x06, (byte)0x03, (byte)0x02, (byte)0x00, (byte)0x06, (byte)0x0C, (byte)0x04, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x0A, (byte)0x05, (byte)0x00, (byte)0x04, (byte)0x0D, (byte)0x03, (byte)0x03, (byte)0x05, (byte)0x07, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x04, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x06, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x01, (byte)0x08, (byte)0x01, (byte)0x0E, (byte)0x03, (byte)0x0E, (byte)0x02, (byte)0x03, (byte)0x06, (byte)0x08, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x0B, (byte)0x02, (byte)0x0C, (byte)0x01, (byte)0x02, (byte)0x02, (byte)0x0E, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x04, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x04, (byte)0x00, (byte)0x04, (byte)0x00, (byte)0x0A, (byte)0x05, (byte)0x00, (byte)0x04, (byte)0x0D, (byte)0x03, (byte)0x03, (byte)0x05, (byte)0x07, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x04, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x06, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x01, (byte)0x08, (byte)0x01, (byte)0x0E, (byte)0x03, (byte)0x0E, (byte)0x02, (byte)0x03, (byte)0x06, (byte)0x08, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x0B, (byte)0x02, (byte)0x0C, (byte)0x01, (byte)0x02, (byte)0x02, (byte)0x0E, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x04, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x04, (byte)0x00, (byte)0x04, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x02, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x07, (byte)0x01, (byte)0x07, (byte)0x01, (byte)0x07, (byte)0x01, (byte)0x07, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x07, (byte)0x01, (byte)0x07, (byte)0x01, (byte)0x07, (byte)0x01, (byte)0x07, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x08, (byte)0x00, (byte)0x07, (byte)0x01, (byte)0x07, (byte)0x01, (byte)0x07, (byte)0x01, (byte)0x07, (byte)0x01, (byte)0x03, (byte)0x00, (byte)0x03, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x0F, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x0F, (byte)0x0F, (byte)0x00, (byte)0x00, (byte)0x03, (byte)0x01, (byte)0x01, (byte)0x00, (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x04, (byte)0x04, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xF7 }; NordLeadConfig nlConfig; public NL2PerfSingleDriver(NordLeadConfig nlc) { nlConfig = nlc; authors = "Kenneth L. Martinez"; manufacturer = "Nord"; model = "Lead2"; patchType = "Perf Single"; id = "Lead2"; sysexID = "F033**04**"; sysexRequestDump = new SysexHandler("F0 33 @@ 04 *bankNum* *patchNum* F7"); patchSize = 715; patchNameStart = -1; patchNameSize = 0; deviceIDoffset = 2; bankNumbers = BANK_LIST; patchNumbers = PATCH_LIST; } public void calculateChecksum(Patch p) { // doesn't use checksum } public void calculateChecksum(Patch p, int start, int end, int ofs) { // doesn't use checksum } public String getPatchName(Patch p) { return "perf" + (p.sysex[PATCH_NUM_OFFSET] + 1); } public void setPatchName(Patch p, String name) {} public void sendPatch(Patch p) { sendPatch(p, 30, 0); // using edit buffer } public void sendPatch(Patch p, int bankNum, int patchNum) { Patch p2 = new Patch(p.sysex); p2.sysex[BANK_NUM_OFFSET] = (byte)bankNum; p2.sysex[PATCH_NUM_OFFSET] = (byte)patchNum; sendPatchWorker(p2); } // Sends a patch to a set location in the user bank public void storePatch(Patch p, int bankNum, int patchNum) { sendPatch(p, 31, patchNum); setPatchNum(patchNum); // send program change to get new sound in edit buffer } public void playPatch(Patch p) { byte sysex[] = new byte[patchSize]; System.arraycopy(p.sysex, 0, sysex, 0, patchSize); sysex[BANK_NUM_OFFSET] = 30; // edit buffer sysex[PATCH_NUM_OFFSET] = 0; Patch p2 = new Patch(sysex); super.playPatch(p2); } public Patch createNewPatch() { Patch p = new Patch(NEW_PATCH); p.ChooseDriver(); return p; } protected void sendPatchWorker(Patch p) { p.sysex[deviceIDoffset] = (byte)(nlConfig.getGlobalChannel() - 1); try { PatchEdit.MidiOut.writeLongMessage(port, p.sysex); } catch (Exception e) { ErrorMsg.reportStatus (e); } } public void requestPatchDump(int bankNum, int patchNum) { sysexRequestDump.send(port, (byte)(nlConfig.getGlobalChannel()), new NameValue("bankNum", 41), new NameValue("patchNum", patchNum) ); } } |
From: Gerrit G. <Ger...@gm...> - 2003-08-11 21:42:11
|
Hello list members, the mail managing robot has blocked two messages at the weekend about the added drivers for the Korg X3 and the Yamaha FS1R Since you can get the message content with a "cvs update -d" better than copying and pasting from the mails I don't think that I should allow the robot to send the complete 170kB to the list...... Gerrit |
From: <dqu...@us...> - 2003-08-11 10:52:48
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv28723 Modified Files: PatchGridModel.java Log Message: set class to public in order to use it outside core. Index: PatchGridModel.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/PatchGridModel.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** PatchGridModel.java 10 Feb 2002 22:24:13 -0000 1.1 --- PatchGridModel.java 11 Aug 2003 10:19:37 -0000 1.2 *************** *** 10,14 **** import javax.swing.table.AbstractTableModel; ! class PatchGridModel extends AbstractTableModel { --- 10,14 ---- import javax.swing.table.AbstractTableModel; ! public class PatchGridModel extends AbstractTableModel { |
Update of /cvsroot/jsynthlib/JSynthLib/synthdrivers/YamahaFS1R/images In directory sc8-pr-cvs1:/tmp/cvs-serv31447 Added Files: a1.gif a10.gif a11.gif a12.gif a13.gif a14.gif a15.gif a16.gif a17.gif a18.gif a19.gif a2.gif a20.gif a21.gif a22.gif a23.gif a24.gif a25.gif a26.gif a27.gif a28.gif a29.gif a3.gif a30.gif a31.gif a32.gif a33.gif a34.gif a35.gif a36.gif a37.gif a38.gif a39.gif a4.gif a40.gif a41.gif a42.gif a43.gif a44.gif a45.gif a46.gif a47.gif a48.gif a49.gif a5.gif a50.gif a51.gif a52.gif a53.gif a54.gif a55.gif a56.gif a57.gif a58.gif a59.gif a6.gif a60.gif a61.gif a62.gif a63.gif a64.gif a65.gif a66.gif a67.gif a68.gif a69.gif a7.gif a70.gif a71.gif a72.gif a73.gif a74.gif a75.gif a76.gif a77.gif a78.gif a79.gif a8.gif a80.gif a81.gif a82.gif a83.gif a84.gif a85.gif a86.gif a87.gif a88.gif a9.gif algo1.jpg algo2.jpg algo3.jpg algo4.jpg Log Message: algorythm images and help. --- NEW FILE: a1.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a10.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a11.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a12.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a13.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a14.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a15.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a16.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a17.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a18.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a19.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a2.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a20.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a21.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a22.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a23.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a24.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a25.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a26.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a27.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a28.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a29.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a3.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a30.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a31.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a32.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a33.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a34.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a35.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a36.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a37.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a38.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a39.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a4.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a40.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a41.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a42.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a43.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a44.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a45.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a46.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a47.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a48.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a49.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a5.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a50.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a51.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a52.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a53.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a54.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a55.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a56.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a57.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a58.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a59.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a6.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a60.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a61.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a62.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a63.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a64.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a65.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a66.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a67.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a68.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a69.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a7.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a70.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a71.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a72.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a73.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a74.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a75.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a76.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a77.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a78.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a79.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a8.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a80.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a81.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a82.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a83.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a84.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a85.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a86.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a87.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a88.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: a9.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: algo1.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: algo2.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: algo3.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: algo4.jpg --- (This appears to be a binary file; contents omitted.) |
From: <dqu...@us...> - 2003-08-11 10:35:20
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv29787 Added Files: KnobWidget.java Log Message: jsynthlib knob widget based on DKnob. --- NEW FILE: KnobWidget.java --- package core; import java.awt.*; import javax.swing.*; import javax.swing.event.*; import com.dreamfabric.DKnob; /** Widget de type potentiometre rotatif. Utilise la classe DKnob de deamfabric qui se charge du dessin. Ce composant doit plutot etre utilise pour les parametres qui n'ont pas besoin d'un ajustement precis, et comportant beaucoup de valeurs. Il utilise les ToolTip pour afficher la valeur. Une version precedente utilisait un textfield pour cela mais le composant obtenu n'etait pas coherent, et etait difficile a placer. @author denis queffeulou mailto:dqu...@fr... */ public class KnobWidget extends SysexWidget { /** decalage a l'affichage */ protected int mBase; protected DKnob mKnob = new DKnob(); protected JLabel mLabel; protected ImageIcon mImages[]; protected JLabel mLabelImage; /** Constructeur special pour les classes derivees. */ protected KnobWidget(String l, Patch p, int min, int max, ParamModel ofs,SysexSender s) { super(l, p, min, max, ofs, s); } /** @param base value display offset */ public KnobWidget(String l, Patch p, int min, int max, int base, ParamModel ofs, SysexSender s) { super(l, p, min, max, ofs, s); mBase=base; setupUI(); } /** Affiche une image a droite de la valeur. @param aImages tableau d'images correspondant a chaque valeur. */ public KnobWidget(String l, Patch p, int min, int max, int base, ParamModel ofs, SysexSender s, ImageIcon[] aImages) { super(l, p, min, max, ofs, s); mBase=base; mImages = aImages; setupUI(); } public void setupUI() { mKnob.setDragType(DKnob.SIMPLE_MOUSE_DIRECTION); if (label != null) { mLabel = new JLabel(label, SwingConstants.CENTER); } int oValue = getValue(); mKnob.setToolTipText(Integer.toString(oValue + mBase)); int oWidthOff = 0; if (mImages != null) { JPanel oPane = new JPanel(new BorderLayout(0,0)); oPane.add(mKnob, BorderLayout.NORTH); if (mLabel != null) { oPane.add(mLabel, BorderLayout.SOUTH); } setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); add(oPane); mLabelImage = new JLabel(mImages[oValue]); add(mLabelImage); oWidthOff = 100; } else { setLayout(new BorderLayout(0,0)); //setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); add(mKnob, BorderLayout.NORTH); if (mLabel != null) { add(mLabel, BorderLayout.SOUTH); } } // positionner la valeur courante mKnob.setValue(((float)getValue() - valueMin)/(valueMax - valueMin)); //setMaximumSize(new Dimension(120+oWidthOff, 80)); setupListener(); } protected void setupListener() { // Add a change listener to the knob mKnob.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { DKnob t = (DKnob) e.getSource(); int oValue = Math.round(t.getValue()*(valueMax - valueMin)) + valueMin; String oVStr = Integer.toString(oValue + mBase); t.setToolTipText(oVStr); t.setValueAsString(oVStr); KnobWidget.super.setValue(oValue); if (mLabelImage != null) { mLabelImage.setIcon(mImages[oValue]); } sendSysex(); } }); } } |
From: <dqu...@us...> - 2003-08-11 10:34:19
|
Update of /cvsroot/jsynthlib/JSynthLib/synthdrivers/YamahaFS1R/images In directory sc8-pr-cvs1:/tmp/cvs-serv30942/images Log Message: Directory /cvsroot/jsynthlib/JSynthLib/synthdrivers/YamahaFS1R/images added to the repository |
From: <dqu...@us...> - 2003-08-11 10:30:38
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv30193 Added Files: KnobLookupWidget.java Log Message: knob widget with label list. --- NEW FILE: KnobLookupWidget.java --- package core; import java.awt.*; import javax.swing.*; import javax.swing.event.*; import com.dreamfabric.DKnob; /** Widget de type potentiometre rotatif. */ public class KnobLookupWidget extends KnobWidget { private String[] mValueLabels; public KnobLookupWidget(String l, Patch p, ParamModel ofs,SysexSender s, String[] aValueLabels) { this(l, p, 0, aValueLabels.length-1, ofs, s, aValueLabels); } public KnobLookupWidget(String l, Patch p, int aMin, int aMax, ParamModel ofs,SysexSender s, String[] aValueLabels) { super(l, p, aMin, aMax, ofs, s); mBase=0; mValueLabels = aValueLabels; setupUI(); // System.out.println("value = "+getValue()); mKnob.setToolTipText(mValueLabels[getValue()]); } protected void setupListener() { // Add a change listener to the knob mKnob.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { DKnob t = (DKnob) e.getSource(); int oValue = Math.round(t.getValue()*(valueMax - valueMin)) + valueMin; t.setToolTipText(mValueLabels[oValue]); t.setValueAsString(mValueLabels[oValue]); KnobLookupWidget.super.setValue(oValue); //System.out.println("value = "+(oValue + mBase)); sendSysex(); } }); } } |
From: <dqu...@us...> - 2003-08-11 10:25:05
|
Update of /cvsroot/jsynthlib/JSynthLib/com/dreamfabric In directory sc8-pr-cvs1:/tmp/cvs-serv29356 Added Files: DKnob.java Log Message: knob widget from ko...@dr..., I made some changes and optimizations. --- NEW FILE: DKnob.java --- /* * DKnob.java * (c) 2000 by Joakim Eriksson * * DKnob is a component similar to JSlider but with * round "user interface", a knob. */ package com.dreamfabric; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import javax.swing.event.*; /** @author Denis Queffeulou for some modifications and optimization. */ public class DKnob extends JComponent { private final static float START = 225; private final static float LENGTH = 270; private final static float START_ANG = (START/360)*(float)Math.PI*2; private final static float LENGTH_ANG = (LENGTH/360)*(float)Math.PI*2; private final static float LENGTH_ANG_DIV10 = (float)(LENGTH_ANG/10.01); private final static float DRAG_RES = (float) 0.01; private final static float MULTIP = 180 / (float)Math.PI; private final static Color DEFAULT_FOCUS_COLOR = new Color(0x8080ff); private int SHADOWX = 1; private int SHADOWY = 1; private float DRAG_SPEED; private float CLICK_SPEED; private int size; private int middle; public final static int SIMPLE = 1; public final static int ROUND = 2; public final static int SIMPLE_MOUSE_DIRECTION = 3; private int dragType = ROUND; public final static int DEFAULT_WIDTH = 60; public final static int DEFAULT_HEIGHT = 45; private final static Dimension MIN_SIZE = new Dimension(40, 40); private final static Dimension PREF_SIZE = new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); private final static float MID_OFFSET = (float)1./220; // Set the antialiasing to get the right look! private final static RenderingHints AALIAS = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); private ChangeEvent changeEvent = null; private EventListenerList listenerList = new EventListenerList(); private Arc2D hitArc = new Arc2D.Float(Arc2D.PIE); private float ang = (float) START_ANG; private float val; private int dragpos = -1; private float startVal; private Color focusColor; private double lastAng; private int mWidth; private int mHeight; /** value displayed if not null */ private String mValueAsString; /** Knob with default size. */ public DKnob() { this(DEFAULT_WIDTH, DEFAULT_HEIGHT); } public DKnob(int aWidth, int aHeight) { mWidth = aWidth; mHeight = aHeight; DRAG_SPEED = 0.0075F;//0.01F; CLICK_SPEED = 0.01F; SHADOWX = 1; SHADOWY = 1; focusColor = DEFAULT_FOCUS_COLOR; setPreferredSize(PREF_SIZE); hitArc.setAngleStart(235); // Degrees ??? Radians??? addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { dragpos = me.getX() + me.getY(); startVal = val; // Fix last angle int xpos = middle - me.getX(); int ypos = middle - me.getY(); lastAng = Math.atan2(xpos, ypos); requestFocus(); } public void mouseClicked(MouseEvent me) { hitArc.setAngleExtent(-(LENGTH + 20)); if (hitArc.contains(me.getX(), me.getY())) { hitArc.setAngleExtent(MULTIP * (ang-START_ANG)-10); if (hitArc.contains(me.getX(), me.getY())) { decValue(); } else incValue(); } } }); // Let the user control the knob with the mouse addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent me) { if ( dragType == SIMPLE) { float f = DRAG_SPEED * (float)((me.getX() + me.getY()) - dragpos); setValue(startVal + f); } else if (dragType == SIMPLE_MOUSE_DIRECTION) { float f = (float)(DRAG_SPEED * (me.getX() + me.getY() - dragpos)); setValue(startVal - f); } else if ( dragType == ROUND) { // Measure relative the middle of the button! int xpos = middle - me.getX(); int ypos = middle - me.getY(); double ang = Math.atan2(xpos, ypos); double diff = lastAng - ang; setValue((float) (getValue() + (diff / LENGTH_ANG))); lastAng = ang; } } public void mouseMoved(MouseEvent me) { } }); // Let the user control the knob with the keyboard addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) {} public void keyReleased(KeyEvent e) {} public void keyPressed(KeyEvent e) { int k = e.getKeyCode(); if (k == e.VK_RIGHT) incValue(); else if (k == e.VK_LEFT) decValue(); } }); // Handle focus so that the knob gets the correct focus highlighting. addFocusListener(new FocusListener() { public void focusGained(FocusEvent e) { repaint(); } public void focusLost(FocusEvent e) { mValueAsString = null; repaint(); } }); } public void setDragType(int type) { dragType = type; } public int getDragType() { return dragType; } public boolean isManagingFocus() { return true; } public boolean isFocusTraversable() { return true; } private void incValue() { setValue(val + CLICK_SPEED); } private void decValue() { setValue(val - CLICK_SPEED); } public float getValue() { return val; } public void setValue(float val) { if (val < 0) val = 0; if (val > 1) val = 1; this.val = val; ang = START_ANG - (float) LENGTH_ANG * val; repaint(); fireChangeEvent(); } /** Set the value as string (for display if not null) */ public void setValueAsString(String aStrValue) { mValueAsString = aStrValue; } public void addChangeListener(ChangeListener cl) { listenerList.add(ChangeListener.class, cl); } public void removeChangeListener(ChangeListener cl) { listenerList.remove(ChangeListener.class, cl); } public Dimension getMinimumSize() { return MIN_SIZE; } protected void fireChangeEvent() { // Guaranteed to return a non-null array Object[] listeners = listenerList.getListenerList(); // Process the listeners last to first, notifying // those that are interested in this event for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i] == ChangeListener.class) { // Lazily create the event: if (changeEvent == null) changeEvent = new ChangeEvent(this); ((ChangeListener)listeners[i+1]).stateChanged(changeEvent); } } } /** Paint the DKnob */ public void paint(Graphics g) { // denis: i set the size because I can't deal with layout and resize consequences int width = mWidth;//getWidth(); int height = mHeight;//getHeight(); // size = Math.min(width, height) - 22; // le dessin est plus large que haut size = width - 22; int oSizeDiv2 = size/2; int oOffset = 5;//10 middle = oOffset + oSizeDiv2; if (g instanceof Graphics2D) { Graphics2D g2d = (Graphics2D) g; g2d.setBackground(getParent().getBackground()); g2d.addRenderingHints(AALIAS); // For the size of the "mouse click" area hitArc.setFrame(4, 4, size+12, size+12); } // Paint the "markers" for (float a2 = START_ANG; a2 >= START_ANG - LENGTH_ANG; a2 = a2 - LENGTH_ANG_DIV10) { int x = oOffset + oSizeDiv2 + (int)((6+oSizeDiv2) * Math.cos(a2)); int y = oOffset + oSizeDiv2 - (int)((6+oSizeDiv2) * Math.sin(a2)); g.drawLine(oOffset + oSizeDiv2, oOffset + oSizeDiv2, x, y); } // Paint focus if in focus if (hasFocus()) { g.setColor(focusColor); } else { g.setColor(Color.white); } g.fillOval(oOffset, oOffset, size, size); g.setColor(Color.gray); g.fillOval(oOffset + 4 + SHADOWX, oOffset + 4 + SHADOWY, size-8, size-8); g.setColor(Color.black); g.drawArc(oOffset, oOffset, size, size, 315, 270); g.fillOval(oOffset + 4, oOffset + 4, size-8, size-8); g.setColor(Color.white); double oCos = Math.cos(ang); double oSin = Math.sin(ang); int x = oOffset + oSizeDiv2 + (int)(oSizeDiv2 * oCos); int y = oOffset + oSizeDiv2 - (int)(oSizeDiv2 * oSin); g.drawLine(oOffset + oSizeDiv2, oOffset + oSizeDiv2, x, y); g.setColor(Color.gray); int s2 = (int) Math.max(size / 6, 6); g.drawOval(oOffset + s2, oOffset + s2, size - s2*2, size - s2*2); int dx = (int)(2 * oSin); int dy = (int)(2 * oCos); /* g.drawLine(oOffset + dx + oSizeDiv2, oOffset + dy + oSizeDiv2, x, y); g.drawLine(oOffset - dx + oSizeDiv2, oOffset - dy + oSizeDiv2, x, y); */ // denis: i prefer rectangular look for indicator needle int xPoints[] = new int[] {oOffset + dx + oSizeDiv2, x + dx, x - dx, oOffset - dx + oSizeDiv2}; int yPoints[] = new int[] {oOffset + dy + oSizeDiv2, y + dy, y - dy, oOffset - dy + oSizeDiv2}; // denis: hightlight the middle for symetric knobs if (val > (0.5 - MID_OFFSET) && val < (0.5 + MID_OFFSET)) g.setColor(Color.white); else g.setColor(Color.lightGray); g.fillPolygon(xPoints, yPoints, 4); // denis: display value if (mValueAsString != null) { g.setColor(Color.white); g.drawString(mValueAsString, oSizeDiv2-5, height-10); } } } |
From: <dqu...@us...> - 2003-08-11 10:24:27
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv26740 Added Files: PatchContainer.java Log Message: interface to get a patch from an internal frame (see PatchEdit) --- NEW FILE: PatchContainer.java --- package core; /** Internal frame (other than PatchEditorFrame) have to implement this interface in order to treat MIDI input when frame is displayed. Otherwise it could result in nullptrexception in PatchEdit. @author denis queffeulou mailto:dqu...@fr... */ public interface PatchContainer { Patch getPatch(); } |
From: <dqu...@us...> - 2003-08-11 10:22:44
|
Update of /cvsroot/jsynthlib/JSynthLib/com/dreamfabric In directory sc8-pr-cvs1:/tmp/cvs-serv29235/dreamfabric Log Message: Directory /cvsroot/jsynthlib/JSynthLib/com/dreamfabric added to the repository |
From: <dqu...@us...> - 2003-08-11 10:22:16
|
Update of /cvsroot/jsynthlib/JSynthLib/com In directory sc8-pr-cvs1:/tmp/cvs-serv29183/com Log Message: Directory /cvsroot/jsynthlib/JSynthLib/com added to the repository |
From: <dqu...@us...> - 2003-08-11 10:13:15
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv27774 Modified Files: BankEditorFrame.java Log Message: change members to protected in order to allow classes outside of core to extends the class. Index: BankEditorFrame.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/BankEditorFrame.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** BankEditorFrame.java 14 Feb 2003 22:03:25 -0000 1.5 --- BankEditorFrame.java 11 Aug 2003 10:13:12 -0000 1.6 *************** *** 21,31 **** { ! static final int xOffset = 30, yOffset = 30; ! PatchGridModel myModel; ! DNDPatchTable table; ! DNDPatchTable table2; ! Patch bankData; ! BankDriver bankDriver; ! final BankEditorFrame instance; public BankEditorFrame (Patch p) --- 21,31 ---- { ! protected static final int xOffset = 30, yOffset = 30; ! protected PatchGridModel myModel; ! protected DNDPatchTable table; ! protected DNDPatchTable table2; ! protected Patch bankData; ! protected BankDriver bankDriver; ! protected final BankEditorFrame instance; public BankEditorFrame (Patch p) *************** *** 319,323 **** return pf; } ! public void PastePatch () { --- 319,323 ---- return pf; } ! public void PastePatch () { *************** *** 336,339 **** bankData.ChooseDriver(); if (bankData.deviceNum==0) {try{setClosed(true);}catch (Exception e){}; return;} ! bankDriver=(BankDriver)PatchEdit.getDriver(bankData.deviceNum,bankData.driverNum);} } --- 336,340 ---- bankData.ChooseDriver(); if (bankData.deviceNum==0) {try{setClosed(true);}catch (Exception e){}; return;} ! bankDriver=(BankDriver)PatchEdit.getDriver(bankData.deviceNum,bankData.driverNum);} ! } |
From: <dqu...@us...> - 2003-08-11 10:09:08
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv27412 Modified Files: EnvelopeWidget.java Log Message: set node array size to 10 Index: EnvelopeWidget.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/EnvelopeWidget.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** EnvelopeWidget.java 6 Oct 2002 22:18:05 -0000 1.4 --- EnvelopeWidget.java 11 Aug 2003 10:09:05 -0000 1.5 *************** *** 26,31 **** setLayout (new BorderLayout ()); ! valueLabels=new JLabel [8]; ! values=new JTextField[8]; int j=0; for (int i=0; i<nodes.length;i++) --- 26,31 ---- setLayout (new BorderLayout ()); ! valueLabels=new JLabel [10]; ! values=new JTextField[10]; int j=0; for (int i=0; i<nodes.length;i++) |
From: <dqu...@us...> - 2003-08-11 10:06:47
|
Update of /cvsroot/jsynthlib/JSynthLib/core In directory sc8-pr-cvs1:/tmp/cvs-serv26946 Modified Files: PatchEdit.java Log Message: Action classes in public, use PatchContainer in MIDI input loop to avoid classcastexception on jinternalframe that don't extends PatchEditorFrame. Index: PatchEdit.java =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/core/PatchEdit.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** PatchEdit.java 10 Apr 2003 20:37:09 -0000 1.15 --- PatchEdit.java 11 Aug 2003 10:06:45 -0000 1.16 *************** *** 63,66 **** --- 63,67 ---- DocumentationWindow documentationWindow; public static PatchEdit instance; // ph...@mu... + // Initialize Application: * *************** *** 597,601 **** the menubar, popup menu or toolbar.*/ ! class ReassignAction extends AbstractAction { public ReassignAction () --- 598,602 ---- the menubar, popup menu or toolbar.*/ ! public class ReassignAction extends AbstractAction { public ReassignAction () *************** *** 614,618 **** } ! class PlayAction extends AbstractAction { public PlayAction () --- 615,619 ---- } ! public class PlayAction extends AbstractAction { public PlayAction () *************** *** 631,635 **** } ! class StoreAction extends AbstractAction { public StoreAction () --- 632,636 ---- } ! public class StoreAction extends AbstractAction { public StoreAction () *************** *** 649,653 **** } ! class SendAction extends AbstractAction { public SendAction () --- 650,654 ---- } ! public class SendAction extends AbstractAction { public SendAction () *************** *** 667,671 **** } ! class SendToAction extends AbstractAction { public SendToAction () --- 668,672 ---- } ! public class SendToAction extends AbstractAction { public SendToAction () *************** *** 685,689 **** } ! class DeleteAction extends AbstractAction { public DeleteAction () --- 686,690 ---- } ! public class DeleteAction extends AbstractAction { public DeleteAction () *************** *** 704,708 **** } ! class CopyAction extends AbstractAction { public CopyAction () --- 705,709 ---- } ! public class CopyAction extends AbstractAction { public CopyAction () *************** *** 722,726 **** } ! class CutAction extends AbstractAction { public CutAction () --- 723,727 ---- } ! public class CutAction extends AbstractAction { public CutAction () *************** *** 741,745 **** } ! class PasteAction extends AbstractAction { public PasteAction () --- 742,746 ---- } ! public class PasteAction extends AbstractAction { public PasteAction () *************** *** 759,763 **** } ! class EditAction extends AbstractAction { public EditAction () --- 760,764 ---- } ! public class EditAction extends AbstractAction { public EditAction () *************** *** 796,800 **** ! class ExportAction extends AbstractAction { public ExportAction () --- 797,801 ---- ! public class ExportAction extends AbstractAction { public ExportAction () *************** *** 831,835 **** //====================================================================================================================== ! class GetAction extends AbstractAction { //---------------------------------------------------------------------------------------------------------------------- --- 832,836 ---- //====================================================================================================================== ! public class GetAction extends AbstractAction { //---------------------------------------------------------------------------------------------------------------------- *************** *** 857,861 **** //------ End ph...@mu... ! class ImportAction extends AbstractAction { public ImportAction () --- 858,864 ---- //------ End ph...@mu... ! // denis: mis en public toutes les classes Action ! ! public class ImportAction extends AbstractAction { public ImportAction () *************** *** 892,896 **** } ! class NewAction extends AbstractAction { public NewAction () --- 895,899 ---- } ! public class NewAction extends AbstractAction { public NewAction () *************** *** 903,907 **** } ! class NewSceneAction extends AbstractAction { public NewSceneAction () --- 906,910 ---- } ! public class NewSceneAction extends AbstractAction { public NewSceneAction () *************** *** 917,921 **** ! class TransferSceneAction extends AbstractAction { public TransferSceneAction () --- 920,924 ---- ! public class TransferSceneAction extends AbstractAction { public TransferSceneAction () *************** *** 934,938 **** } } ! class OpenAction extends AbstractAction { public OpenAction () --- 937,941 ---- } } ! public class OpenAction extends AbstractAction { public OpenAction () *************** *** 955,959 **** } } ! class SaveAction extends AbstractAction { public SaveAction () --- 958,962 ---- } } ! public class SaveAction extends AbstractAction { public SaveAction () *************** *** 968,972 **** } } ! class ExitAction extends AbstractAction { public ExitAction () --- 971,975 ---- } } ! public class ExitAction extends AbstractAction { public ExitAction () *************** *** 981,985 **** } ! class ExtractAction extends AbstractAction { public ExtractAction () --- 984,988 ---- } ! public class ExtractAction extends AbstractAction { public ExtractAction () *************** *** 998,1002 **** } } ! class SortAction extends AbstractAction { public SortAction () --- 1001,1005 ---- } } ! public class SortAction extends AbstractAction { public SortAction () *************** *** 1017,1021 **** } ! class SearchAction extends AbstractAction { public SearchAction () --- 1020,1024 ---- } ! public class SearchAction extends AbstractAction { public SearchAction () *************** *** 1037,1041 **** ! class ImportAllAction extends AbstractAction { public ImportAllAction () --- 1040,1044 ---- ! public class ImportAllAction extends AbstractAction { public ImportAllAction () *************** *** 1067,1071 **** } } ! class DeleteDuplicatesAction extends AbstractAction { public DeleteDuplicatesAction () --- 1070,1074 ---- } } ! public class DeleteDuplicatesAction extends AbstractAction { public DeleteDuplicatesAction () *************** *** 1104,1108 **** ! class NewPatchAction extends AbstractAction { public NewPatchAction () --- 1107,1111 ---- ! public class NewPatchAction extends AbstractAction { public NewPatchAction () *************** *** 1127,1131 **** ! class PrefsAction extends AbstractAction { public PrefsAction () --- 1130,1134 ---- ! public class PrefsAction extends AbstractAction { public PrefsAction () *************** *** 1140,1144 **** } } ! class NoteChooserAction extends AbstractAction { public NoteChooserAction () --- 1143,1147 ---- } } ! public class NoteChooserAction extends AbstractAction { public NoteChooserAction () *************** *** 1164,1168 **** } } ! class CrossBreedAction extends AbstractAction { public CrossBreedAction () --- 1167,1171 ---- } } ! public class CrossBreedAction extends AbstractAction { public CrossBreedAction () *************** *** 1181,1185 **** } } ! class NextFaderAction extends AbstractAction { public NextFaderAction () --- 1184,1188 ---- } } ! public class NextFaderAction extends AbstractAction { public NextFaderAction () *************** *** 1194,1198 **** } } ! class DocsAction extends AbstractAction { public DocsAction () --- 1197,1201 ---- } } ! public class DocsAction extends AbstractAction { public DocsAction () *************** *** 1211,1215 **** } } ! class MonitorAction extends AbstractAction { public MonitorAction () --- 1214,1218 ---- } } ! public class MonitorAction extends AbstractAction { public MonitorAction () *************** *** 1251,1255 **** return (ImageIcon)icon; } ! // This function sets up a Timer event to echo Midi Input to Midi Output protected void beginEcho () { --- 1254,1259 ---- return (ImageIcon)icon; } ! ! protected void beginEcho () { *************** *** 1282,1286 **** --- 1286,1298 ---- } else + if (desktop.getSelectedFrame() instanceof PatchEditorFrame) + { Clipboard=((PatchEditorFrame)desktop.getSelectedFrame ()).p; + } + else + if (desktop.getSelectedFrame() instanceof PatchContainer) + { + Clipboard=((PatchContainer)desktop.getSelectedFrame ()).getPatch(); + } // port=(PatchEdit.deviceList.get (Clipboard.deviceNum)). port=appConfig.getDevice(Clipboard.deviceNum).getPort(); *************** *** 1308,1312 **** } ); ! echoTimer.start (); } --- 1320,1324 ---- } ); ! echoTimer.start (); } |
From: <jtu...@us...> - 2003-08-10 16:30:22
|
Update of /cvsroot/jsynthlib/JSynthLib/synthdrivers/KorgX3 In directory sc8-pr-cvs1:/tmp/cvs-serv31818/KorgX3 Log Message: Directory /cvsroot/jsynthlib/JSynthLib/synthdrivers/KorgX3 added to the repository |
From: <ge...@us...> - 2003-08-07 22:45:09
|
Update of /cvsroot/jsynthlib/JSynthLib/synthdrivers/BossDR660 In directory sc8-pr-cvs1:/tmp/cvs-serv24340 Modified Files: BossDR660Drumkit.new Log Message: Fixed the binary mode for the the Drumkit data Index: BossDR660Drumkit.new =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/synthdrivers/BossDR660/BossDR660Drumkit.new,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 Binary files /tmp/cvsJsvY42 and /tmp/cvsC7oJYV differ |
From: <ge...@us...> - 2003-08-07 22:28:29
|
Update of /cvsroot/jsynthlib/JSynthLib In directory sc8-pr-cvs1:/tmp/cvs-serv21405/JSynthLib Modified Files: synthdrivers.properties Log Message: Fixed the wrong entries in the properties file for the Midiscanner Index: synthdrivers.properties =================================================================== RCS file: /cvsroot/jsynthlib/JSynthLib/synthdrivers.properties,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** synthdrivers.properties 27 Jul 2003 21:46:17 -0000 1.6 --- synthdrivers.properties 7 Aug 2003 22:28:25 -0000 1.7 *************** *** 1,10 **** #Generated devicesfile ! #Sun Mar 02 13:10:06 CET 2003 deviceClass.PeaveyPC1600=synthdrivers.PeaveyPC1600.PeaveyPC1600Device - inquriyID.YamahaDX7s=NONE inquriyID.YamahaTX81z=NONE ! deviceClass.RolandXV5080=synthdrivers.RolandXV5080.RolandXV5080Device ! inquriyID.NovationNova1=F07E**06020020290100210020000000*F7 deviceClass.YamahaDX100=synthdrivers.YamahaDX100.YamahaDX100Device inquriyID.KorgWavestation=F07E**06024228000100********F7 deviceClass.NovationNova1=synthdrivers.NovationNova1.NovationNova1Device --- 1,10 ---- #Generated devicesfile ! #Fri Aug 08 00:27:13 CEST 2003 deviceClass.PeaveyPC1600=synthdrivers.PeaveyPC1600.PeaveyPC1600Device inquriyID.YamahaTX81z=NONE ! inquriyID.YamahaDX7s=NONE deviceClass.YamahaDX100=synthdrivers.YamahaDX100.YamahaDX100Device + deviceClass.RolandXV5080=synthdrivers.RolandXV5080.RolandXV5080Device + inquriyID.NovationNova1=F07E**06020020290100210020000000F7 inquriyID.KorgWavestation=F07E**06024228000100********F7 deviceClass.NovationNova1=synthdrivers.NovationNova1.NovationNova1Device *************** *** 17,26 **** manufacturer.EnsoniqVFX=Ensoniq inquriyID.Generic=NONE deviceClass.AccessVirus=synthdrivers.AccessVirus.AccessVirusDevice deviceClass.BossDR660=synthdrivers.BossDR660.BossDR660Device - manufacturer.YamahaDX100=Yamaha inquriyID.EnsoniqVFX=F07E**06020F05000000000002**F7 deviceName.AccessVirus=Access Virus Driver ! inquriyID.OberheimMatrix6=F07E**06021006000200*********F7 deviceClass.EnsoniqESQ1=synthdrivers.EnsoniqESQ1.EnsoniqESQ1Device deviceName.YamahaDX7=Yamaha DX7 Driver --- 17,26 ---- manufacturer.EnsoniqVFX=Ensoniq inquriyID.Generic=NONE + manufacturer.YamahaDX100=Yamaha deviceClass.AccessVirus=synthdrivers.AccessVirus.AccessVirusDevice deviceClass.BossDR660=synthdrivers.BossDR660.BossDR660Device inquriyID.EnsoniqVFX=F07E**06020F05000000000002**F7 deviceName.AccessVirus=Access Virus Driver ! inquriyID.OberheimMatrix6=F07E**06021006000200********F7 deviceClass.EnsoniqESQ1=synthdrivers.EnsoniqESQ1.EnsoniqESQ1Device deviceName.YamahaDX7=Yamaha DX7 Driver *************** *** 30,35 **** manufacturer.KorgER1=Korg deviceClass.AlesisQS=synthdrivers.AlesisQS.AlesisQSDevice - manufacturer.AccessVirus=Access manufacturer.AlesisA6=Alesis deviceClass.YamahaTX81z=synthdrivers.YamahaTX81z.YamahaTX81zDevice inquriyID.YamahaTX7=NONE --- 30,35 ---- manufacturer.KorgER1=Korg deviceClass.AlesisQS=synthdrivers.AlesisQS.AlesisQSDevice manufacturer.AlesisA6=Alesis + manufacturer.AccessVirus=Access deviceClass.YamahaTX81z=synthdrivers.YamahaTX81z.YamahaTX81zDevice inquriyID.YamahaTX7=NONE *************** *** 37,47 **** deviceClass.Generic=synthdrivers.Generic.GenericDevice inquriyID.SCIProphet600=NONE deviceClass.KawaiK5000=synthdrivers.KawaiK5000.KawaiK5000Device deviceName.AlesisA6=Alesis A6 Driver deviceClass.YamahaDX7=synthdrivers.YamahaDX7.YamahaDX7Device deviceName.KawaiK4=Kawai K4/K4R Driver - inquriyID.KawaiK4=F07E**06024000000400000000000f7 deviceClass.SCIProphet600=synthdrivers.SCIProphet600.SCIProphet600Device manufacturer.YamahaTX81z=Yamaha deviceClass.KorgWavestation=synthdrivers.KorgWavestation.KorgWavestationDevice deviceName.KawaiK5000=Kawai K5000 Driver --- 37,49 ---- deviceClass.Generic=synthdrivers.Generic.GenericDevice inquriyID.SCIProphet600=NONE + manufacturer.YamahaFS1R=Yamaha deviceClass.KawaiK5000=synthdrivers.KawaiK5000.KawaiK5000Device deviceName.AlesisA6=Alesis A6 Driver deviceClass.YamahaDX7=synthdrivers.YamahaDX7.YamahaDX7Device deviceName.KawaiK4=Kawai K4/K4R Driver deviceClass.SCIProphet600=synthdrivers.SCIProphet600.SCIProphet600Device + inquriyID.KawaiK4=F07E**0602400000040000000000f7 manufacturer.YamahaTX81z=Yamaha + inquriyID.YamahaFS1R=NONE deviceClass.KorgWavestation=synthdrivers.KorgWavestation.KorgWavestationDevice deviceName.KawaiK5000=Kawai K5000 Driver *************** *** 52,61 **** inquriyID.RolandMKS50=NONE inquriyID.NordLead=NONE ! inquriyID.EmuProteus=F07E**06021804040800*********F7 deviceClass.YamahaDX7s=synthdrivers.YamahaDX7s.YamahaDX7sDevice deviceName.KorgWavestation=Korg Wavestation Driver - manufacturer.PeaveyPC1600=Peavey deviceName.YamahaTG33=Yamaha TG33/SY22 Driver manufacturer.OberheimMatrix1000=Oberheim manufacturer.AlesisQS=Alesis deviceClass.OberheimMatrix6=synthdrivers.OberheimMatrix.OberheimMatrix6Device --- 54,63 ---- inquriyID.RolandMKS50=NONE inquriyID.NordLead=NONE ! inquriyID.EmuProteus=F07E**06021804040800********F7 deviceClass.YamahaDX7s=synthdrivers.YamahaDX7s.YamahaDX7sDevice deviceName.KorgWavestation=Korg Wavestation Driver deviceName.YamahaTG33=Yamaha TG33/SY22 Driver manufacturer.OberheimMatrix1000=Oberheim + manufacturer.PeaveyPC1600=Peavey manufacturer.AlesisQS=Alesis deviceClass.OberheimMatrix6=synthdrivers.OberheimMatrix.OberheimMatrix6Device *************** *** 72,91 **** inquriyID.YamahaTX802=NONE deviceName.AlesisQS=Alesis QS7/QS8/QSR Driver - deviceClass.NordLead=synthdrivers.NordLead.NordLeadDevice deviceName.OberheimMatrix6=Oberheim Matrix 6/6R Driver manufacturer.YamahaDX7=Yamaha deviceClass.EnsoniqVFX=synthdrivers.EnsoniqVFX.EnsoniqVFXDevice ! inquriyID.KorgER1=F07E**06024251***************F7 deviceClass.YamahaDX7II=synthdrivers.YamahaDX7II.YamahaDX7IIDevice deviceName.YamahaTX7=Yamaha TX7 Driver deviceClass.RolandMKS50=synthdrivers.RolandMKS50.RolandMKS50Device - manufacturer.Generic=Generic deviceName.EnsoniqVFX=Ensoniq VFX Driver inquriyID.BossDR660=NONE manufacturer.YamahaDX7II=Yamaha inquriyID.YamahaDX7=NONE manufacturer.RolandMKS50=Roland - inquriyID.AccessVirus=NONE manufacturer.SCIProphet600=Sequential deviceClass.YamahaTX802=synthdrivers.YamahaTX802.YamahaTX802Device inquriyID.YamahaDX100=NONE --- 74,93 ---- inquriyID.YamahaTX802=NONE deviceName.AlesisQS=Alesis QS7/QS8/QSR Driver deviceName.OberheimMatrix6=Oberheim Matrix 6/6R Driver + deviceClass.NordLead=synthdrivers.NordLead.NordLeadDevice manufacturer.YamahaDX7=Yamaha deviceClass.EnsoniqVFX=synthdrivers.EnsoniqVFX.EnsoniqVFXDevice ! inquriyID.KorgER1=F07E**06024251**************F7 deviceClass.YamahaDX7II=synthdrivers.YamahaDX7II.YamahaDX7IIDevice deviceName.YamahaTX7=Yamaha TX7 Driver deviceClass.RolandMKS50=synthdrivers.RolandMKS50.RolandMKS50Device deviceName.EnsoniqVFX=Ensoniq VFX Driver + manufacturer.Generic=Generic inquriyID.BossDR660=NONE manufacturer.YamahaDX7II=Yamaha inquriyID.YamahaDX7=NONE manufacturer.RolandMKS50=Roland manufacturer.SCIProphet600=Sequential + inquriyID.AccessVirus=NONE deviceClass.YamahaTX802=synthdrivers.YamahaTX802.YamahaTX802Device inquriyID.YamahaDX100=NONE *************** *** 93,109 **** deviceName.NovationNova1=Novation Nova1 Driver deviceClass.YamahaTX7=synthdrivers.YamahaTX7.YamahaTX7Device deviceName.RolandMKS50=Roland MKS-50 Driver ! inquriyID.EnsoniqESQ1=F07E**06020F0200*************F7 inquriyID.AlesisA6=NONE deviceClass.KorgER1=synthdrivers.KorgER1.KorgER1Device manufacturer.NordLead=Nord ! inquriyID.OberheimMatrix1000=F07E**06021006000200*********F7 ! inquriyID.KawaiK5000=F07E**06024000000A***********F7 deviceClass.OberheimMatrix1000=synthdrivers.OberheimMatrix.OberheimMatrix1000Device deviceClass.CasioCZ1000=synthdrivers.CasioCZ1000.CasioCZ1000Device manufacturer.YamahaTX802=Yamaha ! inquriyID.PeaveyPC1600=NONE manufacturer.YamahaTG33=Yamaha manufacturer.KawaiK4=Kawai deviceClass.EmuProteus=synthdrivers.EmuProteusMPS.EmuProteusDevice deviceName.CasioCZ1000=Casio CZ1000 Driver --- 95,113 ---- deviceName.NovationNova1=Novation Nova1 Driver deviceClass.YamahaTX7=synthdrivers.YamahaTX7.YamahaTX7Device + deviceClass.YamahaFS1R=synthdrivers.YamahaFS1R.YamahaFS1RDevice deviceName.RolandMKS50=Roland MKS-50 Driver ! inquriyID.EnsoniqESQ1=F07E**06020F0200************F7 inquriyID.AlesisA6=NONE deviceClass.KorgER1=synthdrivers.KorgER1.KorgER1Device manufacturer.NordLead=Nord ! inquriyID.OberheimMatrix1000=F07E**06021006000200********F7 ! inquriyID.KawaiK5000=F07E**06024000000A**********F7 deviceClass.OberheimMatrix1000=synthdrivers.OberheimMatrix.OberheimMatrix1000Device deviceClass.CasioCZ1000=synthdrivers.CasioCZ1000.CasioCZ1000Device manufacturer.YamahaTX802=Yamaha ! deviceName.YamahaFS1R=Yamaha FS1R Driver manufacturer.YamahaTG33=Yamaha manufacturer.KawaiK4=Kawai + inquriyID.PeaveyPC1600=NONE deviceClass.EmuProteus=synthdrivers.EmuProteusMPS.EmuProteusDevice deviceName.CasioCZ1000=Casio CZ1000 Driver *************** *** 117,122 **** manufacturer.CasioCZ1000=Casio deviceName.Generic=Generic Device Driver - deviceName.YamahaFS1R=Yamaha FS1R - deviceClass.YamahaFS1R=synthdrivers.YamahaFS1R.YamahaFS1RDevice - inquriyID.YamahaFS1R=NONE - manufacturer.YamahaFS1R=Yamaha --- 121,122 ---- |