midis2jam2 is a remaster of MIDIJam, a 3D MIDI file visualizer made by Scott Haag, last updated in 2007. I began developing it in February of 2021 using jMonkeyEngine. I had some previous attempts developing a "remaster" of MIDIJam in the past using Unity and some open-source MIDI .NET libraries, but I never had much success, mostly due to errors and bugs in the libraries I used.
I decided to give a Java game engine a try after failed attempts in other frameworks and develop the application using that and libraries. I've finished converting the source code to Kotlin.
midis2jam2 uses the jMonkeyEngine game engine for handling on-screen graphics. The program also uses Swing for the launcher. I'm in the process of porting midis2jam2 to an Android app.
The goal of midis2jam2 is to enhance the experience of using MIDIJam. The original program runs in a fixed-resolution OpenGL window with no anti-aliasing or post rendering filters. midis2jam2 attempts to improve this by allowing for resizable windows and automatically ships with anti-aliasing processing applied.
MIDIJam also only featured a limited number of camera positions that you could move to; 1–6 on the keyboard gave you a fixed set of angles to view from. midis2jam2 supports a freecam/noclip mode so the user can move the camera to wherever they want.
MIDIJam only supported using the Microsoft GS Wavetable Synth, which I would characterize as dry and tinny (although these sounds were considered high quality 40 years ago). midis2jam2 connects with any connected MIDI device to the machine or any virtual MIDI synth running, allowing users to use soundfonts for high quality audio. It also uses Gervill—the internal Java MIDI synth—which comes prepackaged with a soundbank.
MIDIJam's list of supported instruments fell short of the 174 melodic and percussion instruments defined in the General MIDI standard—about 92 were implemented. midis2jam2 will complete this and allow for a visualization of every instrument. It will also include new models and textures differentiate existing instruments that use the same assets for different patches.