This is a simple music transcription application based on Autocorrelation and Constanst Q Transform.
And I am planning to rewrite it with CNN to produce better performance.
I'm an amateur music lover and love to play the violin on popular songs. However, not every piece has the corresponding music sheet. This makes me quite confused since I can't transcript it by myself. This problem was partially solved when I took the Digital Signal Processing class in 2019 Spring. I learnt that the music signal has its spectrum and the tone is defined by its frequency(exactly, a range of frequency). Also I learnt approaches to handle these digital signals. Then I came up with the idea of building a music transcription system. For now, this system can only transcript simple single note songs(compared to chords), and the beat division is still a problem. So I plan to use CNN to improve its accuracy.
- librosa (Python package for music and audio analysis)
- music21 (Toolkit for computer-aided musicology)
- tkinter
- MuseScore (It's a music composition and notation software. Since the output of my project is .xml document of music sheet. It has to be sent to MuseScore to perform correctly.)
- utils.py: It first seperate the single note with short time energy detection. And it will calculate the autocorrelation of the spectrum of each note to get the approximated frequency. At last by 'if...elif...' statement, it relate the frequency to the key name on piano.
- main.py: Run this file and a dialog will pop up to ask you which music file is to be chosen.
I come up with the idea of CNN because this network model is efficient in image classification. Music Transcription can be boiled down to a classification problem and, if we jump out of conventions and think it in spectrum, it turns out to be image classification. Therefore I aspire to get a try on it.
The input of the network should be the spectrum per note. The dataset is MAPS datasets
I designed a CNN network as follows and I am still testing this. And the unfinished code has not been presented in the github.