The widespread accessibility to smartphones has provided the users with possibilities that were unimaginable before. Through their cameras, microphones and various sensors, devices today are able to measure numerous features and qualities of the world surrounding us, and with their ever-improving computational power they can turn the extracted data into valuable information.
The goal of this thesis is to develop an application that uses this capability of smartphones to aid music enthusiasts and beginners at playing an instrument. The program uses digital signal processing (DSP) methods to recognize two of the most common chord types in western music, the major and minor triads, in real time. The application is made for Android, one of the most popular smartphone platforms; and uses the built-in microphone of the device to recognize the chord being played.
Prior to the implementation I have researched the DSP methods used in the field of chord recognition. I have selected those that seemed the most promising in terms of real-time application, then tested them using MATLAB. Using these techniques, I aspired to compose a method that is able to consistently recognize the aforementioned chord types, without significant delay.
The method I chose is based on the analysis of the Pitch Class Profile (PCP) of the sound sample that contains the chord. The PCP is obtained by representing the sample in frequency domain using a Fast Fourier Transform, then measuring the intensity of each note in the equal-tempered scale throughout several octaves of range. The intensity values that belong to the same note are then added up, thus creating a 12-ary vector, which is called a PCP vector or a chroma vector. Then pattern matching techniques are used to determine which chord's ideal representation resembles the PCP vector the most.
I have also researched the capabilities of the Android operating system and the means it provides to create such an application. Throughout the implementation I strived to make the program compatible with a wide range of Android versions, so that it can be used on older devices as well.
After implementation, I have compared the Android application to the method implemented in MATLAB with regard to recognition time and accuracy. I have also made a comparison with some of the free applications available on Google Play. I have come to the conclusion that my application has fewer features than those I have tried, but it offers lower latency and greater accuracy.