An open application for developers
JJazzLab is written in Java. Why ?
This choice reflects the project’s origins (started over 10 years ago, when Java was a common option for cross-platform desktop apps) and the nature of the problem: unlike a low-latency audio DAW, JJazzLab does not require hard real-time deadline management in the music generation engine. As a side note, modern Java is quite different from early versions and can deliver excellent performance.
JJazzLab is based on the which provides a reliable and extensible architecture for cross-platform desktop applications.
The NetBeans Platform manages the application lifecycle, window system, extension points, options, actions, and more.
It uses NetBeans modules (different from java 9 JPMS modules) which group related Java classes into pluggable components, while managing visibility and dependencies between them.
Suppose you have a reharmonization algorithm that proposes alternate chord progressions (e.g., replacing | A7 | Dmaj7 | with | Em7 A7 | Dmaj7 |).
You can easily implement an action that, when user selects chords, suggests these alternatives in the existing chord popup menu.
Then your code can be bundled in a module which is deployed like a plugin.
Out of the box, JJazzLab provides the infrastructure (“plumbing”) that developers would otherwise need to build themselves: data management, user interface, MIDI management, playback control, music-generation control, etc.
In JJazzLab, the rhythm generation engine just receives a context (chords, song structure, tempo, etc.) and returns musical phrases (one per instrument) that form the backing track, ready for playback.
The engine doesn’t have to manage real-time deadline: JJazzLab handles scheduling and synchronization.
The is a standalone jar file which contains the JJazzLab core features, the JJazzLab plugins and the required dependencies.
Use the toolkit to use JJazzLab features independently of the JJazzLab application.