midis2jam2
midis2jam2 is a music animation software package. It plays any MIDI file—a special type of music file that encodes how a song is played, i.e., a form of digital sheet music—and animates its performance with a virtual band. It is a recreation of MidiJam , a similar program that was developed and released between 2006–2007.
The project uses jMonkeyEngine for graphics and provides a modern user interface with Compose Multiplatform . It is entirely written using the Kotlin language and runs on the Java Virtual Machine. The source code is open source and freely licensed, available on GitHub.
User interface
midis2jam2 uses a dedicated launcher to manage playback configuration and settings. The launcher has a modern, intuitive user interface that allows users to easily select MIDI files, configure playback options, and customize the animation settings.
MidiJam has a graphics configuration window, but it is not as user-friendly as the midis2jam2 launcher.


Graphics
The art style of midis2jam2 aims to replicate that of MidiJam by permissively using its models and textures. New instruments are a mix of assets created by myself and artists in the community.
midis2jam2 ships with some post-processing effects, including dynamic shadows, bloom, and antialiasing.


MIDI playback
midis2jam2 gives the user the ability to select a MIDI device connected to the computer, whether it be a physical synthesizer or a virtual MIDI device. The user can also select the built-in software synthesizer and choose a soundbank to use. MidiJam only supports the Windows GS Wavetable Synthesizer, so midis2jam2 is more flexible in this regard.
Documentation
As the software does have a multitude of features, I created a documentation website to help users get started with the software. The documentation includes references to the user interface, MIDI playback, and graphics settings.
Development
Development of midis2jam2 started in 2021, and it is still in progress. The project is open source and hosted on GitHub, where anyone can contribute to its development.
I initially started the project in Java after failed attempts to create a similar program in Unity due to bugs with the MIDI playback library (which have since been fixed). I then decided to see if I could use a Java game engine, which proved to be successful. Then after about a year of development, I decided to learn Kotlin and translate the codebase to that language to take advantage of its modern features and syntax. (Best decision ever!)
jMonkeyEngine
The project uses jMonkeyEngine (JME) for graphics. It is a Java game engine that is open source and has a large community of developers. While midi2jam2 is not a game per se, JME has proven to be a good fit for the project for loading 3D models, simple rigid-body animations, and post-processing effects.
Compose Multiplatform
Over the years, midis2jam2 has gone through a few user interface frameworks. The first was the built-in Lemur UI library for JME, which I did not find intuitive to use or pleasant to look at. I then migrated to using Swing, which was a better fit, but I still found it to be clunky and outdated.
I eventually settled on Compose Multiplatform, which is a modern UI framework that allows for cross-platform development using Kotlin. It is similar to Jetpack Compose for Android, but it is designed to work on multiple platforms, including desktop and web.
The first iteration used the Material 2 theme, but I later switched to Material 3 once it was stable. I also created a custom theme to create a consistent look and feel across the application.
kmidi
kmidi is a MIDI playback library for Kotlin that I created to handle MIDI playback in midis2jam2. It is a simple library that provides a high-level API for playing MIDI files and controlling MIDI devices. The JavaX MIDI library has shown to have a number of bugs over the years, so I decided to create my own library to avoid these issues.
kmidi is still in development, but it is already being used in midis2jam2. It is open source and available on GitHub, as well as published to Maven Central .
Results
midis2jam2 is used by a small community of musicians and artists who enjoy creating and sharing their own MIDI files and animations. The project has received positive feedback for its ease of use and flexibility, and it continues to evolve as new features and improvements are added.