
Blind Source Separation Algorithm
For a final project in my Digital Signal Processing course, a friend and I created NoteForge, a program designed to tackle a complex audio processing challenge. Inspired by applications like the "Cocktail Party Problem," we aimed to use Blind-Source Separation (BSS) to isolate individual instruments from a single audio track, such as a duet or trio, and then automatically generate sheet music for each separated part.
The primary challenge was that, unlike human voices, musical instruments produce notes with widely overlapping harmonics. That makes simple frequency-based filtering ineffective and entirely out of the question. To overcome this, we chose an approach centered on the unique temporal characteristics of each instrument. We focused on analyzing the Attack, Decay, Sustain, and Release (ADSR) envelope of each note, which acts as a distinct "fingerprint" for an instrument's sound.


Our algorithm was implemented in several stages. First, we built a comprehensive database of instrument profiles by processing sample recordings from the University of Iowa's public sound library. For each instrument, we created a distinct ADSR envelope profile for every note it could play. Next, we processed the input audio file by applying a series of bandpass filters to isolate individual notes and their frequencies over time, creating a magnitude spectrogram of the entire piece.
With the notes isolated, the core of our separation algorithm began. We extracted the ADSR envelope of each note from the input track and compared it against our database of instrument profiles. This process generated a correlation score, quantifying how closely the played note matched each potential instrument's sonic signature. The note was then assigned to the instrument with the highest score. We made the simplifying assumption that only one instrument would be playing a given note at any single moment. Finally, this sorted matrix of notes and their assigned instruments was converted into readable sheet music.

