JSyn - modular synthesis API for Java.
JMSL - Java Music Specification Language
PortAudio - cross platform audio I/O API for 'C'

WARNING - This tutorial describes the old original JSyn API. Please refer to the current docs for more up-to-date information.

JSyn Tutorial

What is JSyn?

JSyn is a Java API for synthesizing audio. (API stands for "Application Programmer Interface"). This means that Java programmers can use JSyn to add sound to their programs. Java also has APIs that provide other services like 3D graphics, network connections, user interface tools, etc. The API is the set of classes and their methods that are used directly by the programmer. Internally, the underlying classes may change but if the change is not visible to the programmer then the API has not changed. A programmer will only have to change their source code if the API changes.

JSyn consists of many layers. Starting from the top we have:

Contains the documented Java classes that the programmer calls directly.
JSyn to CSyn native interface
This layer bridges the gap between the high level Java code and the underlying 'C' code using JNI (Java Native Interface), or a Plugin interface.
'C' code for managing audio synthesis units, samples, envelopes, etc. Handles creation, deletion, etc. This could be called directly by a 'C' programmer without using Java.
CSyn Engine
The guts of JSyn/CSyn where the actual audio is synthesized. This runs as a high priority process or interrupt to ensure real-time operation. If this doesn't run fast enough then you will hear big gaps and pops.
Host Audio Driver
This layer communicates directly with the computers audio device to output the sound. On Windows machines, we normally use MME. A DLL that uses DirectSound  is available to registered developers. On Macintosh, we use the SoundManager.