An interactive MIDI file player and visualizer, built with Java.
Watch musical pieces come to life with an animated piano display — or connect your own MIDI keyboard to learn new pieces.
This is a purely experimental hobby project that aims to provide a tool for people with no musical background who want to start learning piano.
Unlike most Synthesia-like applications, which are typically built with game engines or multimedia frameworks, I chose Java Swing for all UI-related work.
The goal was to challenge myself and explore how far a traditional GUI framework can be pushed outside its intended scope.
- MIDI Playback – Load and play any standard
.midfile - Real-time Visualization – Notes light up on a virtual piano as they are played
- Waterfall Animation – Animated falling notes for easier practice
- Live MIDI Input – Connect your own MIDI keyboard/controller to learn interactively
- Playback Controls – Functional seek bar with full playback control
- Dragging - You can drag the animation up and down to traverse the visualization
- Hand assignment - You can enter the "Assign Hands" mode, where you can mark hands as left or right by clicking left or right respectively
- Practice - You can practice the pieces at your own pace, if you have created a hand assignment for a piece you can practice the parts seperately
This application is self-contained and does not require you to install Java separately.
- Go to the Releases Page.
- Download the installer for your operating system from the latest release.
- Run the executable from inside the folder
The operating system might mark it as dangerous, I just didn't license it
If you want to build the project yourself, follow these steps.
- JDK 23 or newer.
- Git.
- Clone the repository:
git clone https://github.com/Tbence132545/Melodigram.git
- Navigate to the project directory:
cd Melodigram - Build the project using the Gradle wrapper:
- On Windows:
.\gradlew build - On Mac/Linux:
./gradlew build
- On Windows:
- Package the application:
After building, you can create the runnable application using the
jpackagecommand:jpackage --type app-image --name "Melodigram" --input "build/libs" --main-jar "Melodigram.jar" --main-class "com.Tbence132545.Melodigram.Main" --dest "release"
Feel free to address the issues, fix bugs, or extend the project with your ideas.
You can do this by forking the repository, committing your changes, and submitting a pull request (PR) by following these steps:
- Fork the repository to your GitHub account.
- Clone your fork locally.
- Create a new branch for your feature or bug fix.
- Make your changes and commit them with clear messages.
- Push your branch to your fork.
- Open a pull request to the original repository, describing your changes in detail.
I appreciate your contributions and will review your PR as soon as possible!
- Java
- Java Swing (for the graphical user interface)
- Gradle (for dependency management and building)
This project is distributed under the MIT License. See the LICENSE file for more information.