Next Steps

Partial Chord Recognition

A recurring issue in our real-time demonstrations was that, if a chord note went briefly undetected, the chord would change. This lead to a variety of partial chords being output. More consistent, readable output might come from keeping track of detected notes over time to combine these partial chords into fuller chords. This effect could also be achieved by increasing the DFT window size, though this would come at the cost of temporal resolution.

Improving Detection Immediacy

To present more immediate note- and chord-detection, the size of the real-time buffer must be decreased. The minimum buffer size is currently limited by the overhead generated by repeated function calls. This limitation might be circumnavigated by transferring our program from the interpreted Python to a compiled language like C++.

Pitch-Shifting Capability

Some instruments, such as carillons, have varying intonation based on environmental factors such as temperature. Our program assumes the A4=440Hz tuning standard, which causes frequent incorrect detections for instruments tuned otherwise. This could be accounted for by enabling users to calibrate the program's intonation to that of their instrument.

Program Output Organization

In music, melodies are typically played at the same time as chords. Our program can identify melodies and chords at the same time, but it is difficult to organize the terminal output in an easy-to-understand manner. One solution to this issue is MIDI. MIDI is a common filetype used for creating, editing, and playing synthesized music. Our program could be adapted to generate a MIDI file based on the chords and melodies it detects. This MIDI file would be stored and could be played-back to recreate the sounds our program interpreted.