|
A brief example of how the input looks involves trying to identify "Happy Birthday to You" using the first six notes:
You can also enter pitch or duration without the other. For example, the following matches the end of "Twinkle, Twinkle, Little Star":
My random thought, based on no science whatsoever, is that this will start to be useful when there are about 10,000 tunes in the database. Since it has taken me months to get to 470, this could take a while. However, you can contribute by going here. The concept of random correlations in the database is an interesting one. Consider the following table, which gives the percent of melodies in the database that are unique for the given length of input strings:
12 melodies were not unique for any string In theory, this says you need at least 48 notes in your input to guarantee a 50% chance of finding your melody - if it is in the database! Experience shows it is not really that bad. The following chart is probably better. This is used by trying a large number (200) of strings of given lengths from the database, and measuring how frequently they gave the unique right answer:
Notwithstanding the strange lumps in the curve, I find this very interesting. Basically, if you can input 11 or more notes (really intervals) you can get the correct identification most of the time, with the caveat that the melody is in my database. I will track the 95% confidence level as the database grows to see how it moves with size.
There are also some challenges with the algorithm. It is very robust to small errors of rythm and pitch, but the wrong number of notes throws it off completely. So what do you do if there is a trill, and you really can't even count the notes? I actually have an idea about implementing wild-cards in the input, but there are more things to do than time to do them in. I will get to it "soon". Just for the record, I thought of this technique years ago (probably before I even got to college - lot's of years ago). I have just never had the time to check it out until now. |