We were inspired by our team's love for classical music and the constant frustration we would get when trying to identify the names of classical songs. Many identification services, like Shazam!, and the voice assistants, like Siri and Google Assistant, exist to identify music, yet close to none can accurately identify a classical song, mostly due to a lack of vocals.
What it does
Our webapp, AClassicalSearch, can take a 10-30 second audio file and identifies which classical piece in our database it is. In addition, we allow users to search through our database of classical pieces to find relevant work and information about each piece. We used ElasticSearch to help power this search.
How we built it
We used the Django Python web framework to create our web interface built upon the simplicity of Bootstrap CSS. On the server side, we used the aubio library, which has many musical analysis features, to extract the unique sequence of MIDI note names in an audio clip. MIDI notes correspond to specific note frequencies. By comparing the note sequence of our input file to the complete sequences in our database and finding similarities, we were able to correctly identify a song.
Challenges we ran into
Originally, we were getting vastly different sequences of notes from aubio. Then we realized this was because MP3 files are compressed, leading us to switch to uncompressed WAV files for the remainder of the project. In addition, handling differences in tempo and noise posed a consistent challenge during our project. We developed our identification code to overcome these challenges.
Accomplishments that we're proud of
Finding a way to accurately determine a song regardless of where the song starts! Different conductors take the same piece at different tempos. By looking at the sequence of the notes and not the time stamp/intervals or tempo, we managed to avoid a major pitfall that could have doomed our efforts.
What we learned
We learned that audio in general is much more complicated than we thought! Different file formats, compressed and uncompressed files, background noise, and many other factors can affect the MIDI notes we get from a particular audio file. Even filtering to try and reduce the background noise of a file affects the pitch profile of it.
What's next for AClassicalSearch
In the future, we hope to approach this problem in a different way. possibly with the use of neural networks trained on our database of songs. We also hope to add additional parameters beyond MIDI notes for our song identification such as quiet and loud intervals, tempo, and onset time intervals.