Inspiration

Andrea gave me the idea.

What it does

Plays songs and displays fingerings alongside. Can also change the key of a song being played

How I built it

Tkinter for the frontend, numpy for signal processing

Challenges I ran into

Pitch detection is hard! There are many academic papers written on the topic. The approach I took is simple (basic filters, a Fourier Transform, and some simple postprocessing), which limits its utility. The class of mp3 files it works for require: 1) Very little environmental noise. 2) Notes are played uniformly and have a small stop between the next note (slurred notes are not supported). A significant time was spent experimenting with filters and thresholds in order to get a reliable pitch detector, even with these requirements.

These limitations can be ameliorated with a more robust pitch detection algorithm, such as these:

  1. http://ws2.binghamton.edu/zahorian/yaapt.htm
  2. http://audition.ens.fr/adc/pdf/2002_JASA_YIN.pdf

There were also various frontend challenges that I had to deal with - I'm not very proficient in frontend.

Accomplishments that I'm proud of

I had little signal processing background going into this, so I'm really happy with managing to get up to speed quickly enough to build a reliable pitch detector, despite how simple the set of mp3s it works on are.

What I learned

I learned a solid amount about music pitches (I knew essentially nothing beforehand), and had to shake off some rust on frontend stuff. I also learned about how hard pitch detection is!

What's next for Fingering Helper

See the future work section of the Github readme: https://github.com/jagielski/fingering-helper

Built With

Share this project:

Updates