Inspiration
We are all former musicians that have struggled to effectively practice our music. Choosing which sections of a piece to focus our limited time on depends on our ability to assess the difficulty of the piece throughout, which is an ability we did not have at the beginning. Thus, we wanted to write a program that could ease this struggle by automatically identifying which parts require the most practice, creating a more effective practice schedule that helps eliminate wasted time from repeating easy parts.
What it does
First, the user inputs a MIDI file of their desired practice piece. The program takes it and converts into a list of notes. It groups these notes into measures, which are given a difficulty rating based on the frequency of notes, distance between pitches, and syncopation, as well as a suggested practice time. Everything is displayed to a graphical interface, which can visualize and play both the entire piece and each measure independently.
How we built it
We split the project up into 3 main parts: the MIDI processor, the algorithm, and the GUI. The MIDI processor utilizes the MIDICSV program to translate MIDI files into readable data. The algorithms are written in Java, while the GUI utilizes both the JavaFX library and Processing to visualize the music. Collaboration was done through GitHub.
Challenges we ran into
First and foremost, collaborating through GitHub proved to be a much more complicated process than we initially thought. Even a small change to an seemingly unrelated file from one user could completely mess up the program for another user, forcing them to try to find what is causing the conflict. Additionally, we overestimated the effort needed to actually categorize the music into distinct and even sections, coming across multiple situations where one method of categorization wouldn't work for a certain time signature, tempo, or rhythm.
Accomplishments that we're proud of
Obviously, we are immensely proud of the fact that we were able to combine our individual parts into a working display on the screen, with proper difficulty ratings and visualizations. In particular, the UI provides a very good visualization of music that shows how different factors of music contribute to the difficulty rating.
What we learned
Our biggest takeaway from this project was simply learning to collaborate on code through GitHub. This method of collaboration is standard in almost every career that requires coding, so knowing how to navigate this complex system will be crucial as we prepare to develop real projects for actual companies.
What's next for Isolate
Although our program parameters are based upon our educated guesses as former musicians, finetuning our calculations would require not only more complex algorithms and functions, but real testing with live musicians. Additionally, Isolate will expand to incorporate different types of music, as well as different formats of music for flexibility.

Log in or sign up for Devpost to join the conversation.