Additive Instrument Component

Code written by Kyle Gunger

CAdditiveInstrument is first initialized by a pointer to the parameter xml node,
which it uses to populate the parameters such as sound definitions. Afterward it
is given the Note, from which it reads things like the starting and ending frequency
as well as the starting and ending sound definition. Internally it uses a vector of
CSoundDef classes to hold the sound definitions, each represents a summation of sin
waves. It also uses a CCrossFade and CADSR node to represent the fading between
CSoundDef and Envelope, respectively. It uses the proper CSoundDefs as sources for
the CCrossFade node and the CCrossFade node as source for the CADSR node. When
Generate is called on the CADSR node it is called recursivly on the child nodes and
then interpolated via the ADSR rules.

In generating the soundwave, it checks the envelope to see how far along we are, and uses
that percentage to interpolate both the frequency and cross-fading.

Supported grading elements: