English Version
Spanish Version
A short JSynthLib Guide
JSynthLib is an Open Source Universal Synthesizer Patch Editor / Librarian written in the Java Language. Beside a bunch of commercial synths, it provides an editor for MIDIbox SID and MIDIbox FM, which gives you access to all sound parameters and the wavetable sequencer. Since the official beta release of JSynthLib as well as the MIDI API of Java v1.5 has some flaws, I created this short guide in order to describe the required steps to setup JSynthLib for a MIDIbox properly.
Java installation
The latest release is Java V1.5.0_06, which is called "J2SE 5.0" at the sun website. The runtime environment (JRE) can be downloaded from java.sun.com. Here a direct link. Note that the development kit (JDK) is only required, if you are planning to (re)compile java sources. So long you only want to use precompiled java programs, then the JRE package is all you need.
JSynthLib installation
The JSynthLib release consists of a single .jar package, which can be started by double-clicking on it. From the command shell (e.g. Linux) it can be started with "java -jar <filename>".
Unfortunately the official 0.20-beta release at the JSynthLib Website has a bug in the synthdriver of MIDIbox SID, which prevents you from uploading patches correctly. Since updates are very rare, I provide a snapshot release from the CVS here:
--> JSynthLib-Snapshot-2006-01-28.jar.zip
Note that I've tested this snapshot with MBSID and MBFM only, I cannot guarantee that the remaining synth drivers are working!
Selecting MIDIbox SID/FM driver
If JSynthLib has been started the first time, the MIDI interface and required synth drivers have to be selected. Go to Window->Preferences->MIDI, and select the MIDI In/Out port, to which one of your synths is connected:

(The reason why I've choosen "MIDI Yoke" as output port is described below)
Go to the "Synth Driver" tab, click on "Add Device..." and search for "MIDIbox SID" and "MIDIbox FM":

Editing a Patch
Now you can either create a new patch library, or you can load an existing one, like the presets which can be downloaded from the MIDIbox SID and MIDIbox FM page.
By double-clicking on an bank entry, the whole bank will be transfered to the MIDIbox (BankStick required!). You can edit individual patches by right-clicking on the bank:

A patch can be edit by right-clicking on the appr. entry:

Java MIDI Bug
With Java 1.5, Sun introduced an improved support for MIDI interfaces. It works very well with common MIDI events, but has some problems with SysEx strings: once a SysEx string is sent, which is shorter then the previous strings, additional bytes will be appended. Example: if a MIDIbox SID patch is sent, which consists of 262 bytes, and thereafter a sound parameter change is sent by the editor (11 bytes), 262 bytes will be sent again - the 11 new bytes at the beginning, and the remaining 251 bytes of the previous SysEx message at the end. This not only increases the latency of parameter changes, but also violates the MIDI protocol.
This effect has been observed under Windows XP with different MIDI interfaces. It doesn't happen on Linux and Mac OSX. It's not related to JSynthLib itself, since other Java MIDI programs behave similar. In 2004, I wrote a short program which reproduces the bug, and issued it into the error data base. The ticket vanished after some months - so it seems, that Sun doesn't take care about such flaws...
However, there is cure: by sending all SysEx strings through a virtual loopback device like "MIDI Yoke", and forwarding it to the output of the MIDI interface, the additional bytes will be eliminated.
MIDI Yoke can be downloaded from the MIDI-Ox website. The monitor is required as well in order to forward the MIDI stream. Once installed, you need to setup the port routing like shown below:

Btw.: this solution also helps, if your MIDI interface is not multi client capable (if only one program can access the MIDI port). Just send the MIDI data to the MIDI Yoke port instead.

Last update: 2010-05-17
Copyright © 1998-2010, Thorsten Klose. All rights reserved.
|