Developping with JJazzLab

An open application for developers

circle-info

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.

Updating the application

Apache NetBeans Platform

JJazzLab is based on the Apache Netbeans Platformarrow-up-right 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.

Adding new features

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.

Develop your own rhythm generation engine without hassle

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.

JJazzLab Toolkit

The JJazzLab Toolkitarrow-up-right 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.

Last updated

Was this helpful?