Inspiration

I have always been very impressed with the intersection of ML and arts. Also, I love listening to music, yet I am so bad at identifying the composers of the pieces. With this inspiration, I wanted to make a model which would beat me in composer identification.

What it does

It identifies the composer of a newly heard piece. It actually does not hear the piece, but sees the features extracted from the MIDI file and classifies it among 5 composers.

How I built it

I experimented with various models. Random Forest was the model with the highest validation set accuracy, so I used it as my final model. The model is trained on hundreds of piano pieces of 5 composers: Liszt, Bach, Beethoven, Chopin, and Schubert.

Challenges I ran into

Pre-processing the pieces was challenging because I had to extract the relevant features from the music in a way the model could interpret. Hopefully, there was a software called JSymbolic to extract features from the pieces, which I learned about in a research paper.

Accomplishments that I am proud of

I have played several rounds on the web app against my model, and I am very satisfied that I have never won so far (very ironic). The model always beats me, and I am super happy about this.

What I learned

This was my first ever ML project, and I have learned so much, especially about data pre-processing, different models, and hyperparameter tuning. Also, it was my first time using Flask, and I am very proud that I managed to make a web app!

What's next for Guess the Composer

First of all, I want to improve my web app with a more beautiful front-end design. I will also deploy it. In my project, I only used the piano works of 5 composers. I aim to explore more composers and pieces for different instruments.

Built With

Share this project:

Updates