Projects

Some things I have worked on:

Unnamed Audio-Matching App

In the fall of 2010, two teammates and I researched, designed and implemented an application for matching of input recordings as a semester project for undergraduate Software Development (CS4500). The challenges included dealing with varying input audio formats, choosing an effective fingerprint, and performing comparisons efficiently. The application was also required to perform sub-sequence matching; i.e. matching a snippet of audio from a song against the original. It also needed to be able to positively identify degraded audio, yet distinguish different performances of the same song.

Our fingerprint design was based on what we learned from researching the fundamentals of spectrum analysis. Fingerprints were generated by applying a Fourier Transform on small windowed segments of Wave audio. The actual fingerprints consisted of the corresponding frequencies for amplitude peaks within a handful of bands that we found to be a good representation of the signal.

We developed an early prototype of the application using a brute-force approach for fingerprint matching for simplicity. We quickly found this to be inadequate for longer audio sequences, because it involved lining up the shorter sequence in every possible position against the longer to achieve effective sub-sequence matching. This meant the matching function’s running time grew quadratically relative to the length of its input. After studying efficient sub-string matching algorithms, we found a solution based on the Rabin-Karp algorithm. Rabin-Karp performs only exact matching, however. We designed a slightly modified algorithm to make the hashing mechanism work with an inexact notion of hash equality.

The application was developed in Python, with a reliance on the NumPy library for the FFT and Hann window functions. We also developed an extensive automated test suite that covered many genres of music.

gcal

gcal is a simple Windows Sidebar gadget for displaying the day’s Google Calendar events on the desktop. It’s hosted on GitHub and released as open source software under the MIT License.

The gadget uses Google Calendar’s magic cookie authentication, which is essentially a synchronous key shared between Google and the user. This allows the gadget to display the user’s private events while sidestepping the difficulty of authenticating by Google account + password, which is unwieldy through the Sidebar gadget interface.