My thesis has two main aims. The first aim is the chord recognition of recorded music, and the second is making a music improvisation in real-time based on the recognized chords.
Chords are typical building blocks of Western European music. Basically, a chord is when more musical tones sound simultaneously, creating a harmony. A proficient musician is able to recognize chords based on hearing. For less experienced musicians – who are not able to recognize chords by ear – a chord recognizer software could be very helpful. This kind of software can help to learn music easier also in the case when no sheet music is available. It can also support music transcription or adaptation. In addition, a well-functioning chord recognizer program opens the possibility of making a large chord database, which then can be used for machine learning for musical genre recognition or automatic composition/improvisation, to name a few applications.
Chord recognition is still an evolving research area, by the very nature of the problem, exact solutions do not exist. Instead, many different approaches are used in the literature, some are based on pattern matching algorithms, on Hidden Markov-model approach (learning parameters of the model), or machine learning with neural network, and so on. These concepts model human decision mathematically with probabilistic methods. Because the simple signal processing methods first tried did not lead to adequate results, I have chosen the Hidden Markov-model as base of my algorithm. The starting point of the developed algorithm is thus an approach based on the Hidden Markov model published in the literature, which I have improved with own ideas and extensions. I have implemented the chord recognition algorithm in Matlab environment, and tested the accuracy of my method on a sufficiently large music database.
In second part of my thesis I focused on creating a music improvisation with computer. Ideally, a software, with such a feature could be used in teaching music improvisation, or as a virtual musician for practicing, if the real musicians is not available. During my work I implemented both a real time and an offline version of the algorithm. I have concentrated on the real time software, due to personal interest. I used the offline program for testing and development purposes. My real time software detects the tempo of the music - recorded by microphone - within 10 seconds. After that the program is synchronizing with the music, and creates monophonic music improvisation based on the detected chords. In this program I have implemented a simpler chord recognition algorithm, but the accuracy of this is enough for music improvisation. Besides that I also implemented a chord sequence recognizer feature, which is able to predict the next chord, based on the recognized chord loop, and continue the improvisation with this information. I have implemented this program in C++ language within the JUCE framework. In the appendix I share the source code of the program, the executable file, and an example melody made by the real time software.