Separating Harmonies

The questions below are due on Thursday March 20, 2025; 02:00:00 PM.
 
You are not logged in.

Please Log In for full access to the web site.
Note that this link will take you to an external site (https://shimmer.mit.edu) to authenticate, and then you will be redirected back to this page.

The file am_resynth.wav in this week's distribution is a synthesized version of a short tune using 3-part harmony. At each pont in time, there are three voices: bass, melody, and harmony. each playing a single, sinusoidal tone whose frequency changes with time. The frequencies for the three voices fall within the following ranges:

  • Voice 1 (bass): 40-170Hz
  • Voice 2 (melody): 170-370Hz
  • Voice 3 (harmony): 370-750Hz

Our goal is to produce three new signals:

  • bass.wav containing the bass part,
  • melody.wav containing the melody, and
  • harmony.wav containing the harmony.

Design a system to generate these .wav files.

Check In:
Discuss the details of your plan for separating the components from each other, including how your implementation guarantees that the resulting signals will be purely real.

Generate the bass, melody, and harmony signals.

Create three .wav files, one containing the bass part, one containing the melody, and one containing the harmony.

Listen to the three files carefully. Were you able to perfectly separate the three voices? Explain any artifacts that remain.

More Realistic Example

The file am.wav contains a version of the same tune, but played on a guitar. In this version of the song, each of the voices has a slightly different range from the synthesized version:

  • Voice 1 (bass): 65-208Hz
  • Voice 2 (melody): 208-350Hz
  • Voice 3 (harmony): 350-960Hz

Try your same method from above on this version of the tune.

You likely found that your approach does not work as well on am.wav, compared to am_resynth.wav, and that some of the three voices may have been easier or harder to isolate. Explain why this is the case.

Please upload a single .zip file that contains your code, the resulting .wav files, and explanatory text:

 No file selected