CSE 471 - Project 1 - Subtractive Synthesizer

Sample xml code

<?xml version="1.0" encoding="utf-8"?>
<score bpm="60" beatspermeasure="4">
  <effectconfig name="Reverb" slot="0"/>
  <effectconfig name="Chorus" slot="1"/>
  <effectconfig name="Flange" slot="2"/>
  <instrumentparams instrument="Subtractive" bypassgain="1.0" effect0="0" effect1="0" effect2="0.0" effect3="0" />
  <instrument instrument="Subtractive">
      <note measure="1" beat="1" duration="1.9" note="C4 sq" />
      <note measure="1" beat="3" duration="1.9" note="G4 sw"/>
      <note measure="2" beat="1" duration="3.7" note="C5 tr"/>  
      <note measure="2" beat="4.75" duration="0.25" note="C4 sq"/>
      <note measure="2" beat="4.75" duration="0.25" note="E4 sw"/>
      <note measure="2" beat="4.75" duration="0.25" note="G4 tr"/> 
      <note measure="3" beat="1.25" duration="4.75" note="C4 sq"/>
      <note measure="3" beat="1.25" duration="4.75" note="Eb4sw"/>
      <note measure="3" beat="1.25" duration="4.75" note="G4 tr"/>
   </instrument>
</score>;

Grading Criteria

Waveform playback from tables
Varying pitch playback from tables - The set of amplitudes is specified (as a string of numbers) by attribute harmonics of the node
Envelope generation - A class CADSR to handle envelope generation. Attack, decay, release duration are specified in coresponding attributes
Polyphony - Start and stop more than one note at the same time
Reson implementation and filter envelopes - Not implemented (-15 points :( ))

Demonstration

Score file: subtractiveSample.score
Wave file: subtractiveSample.wav