1
/******************************************/
2
/* Percussive Flute Subclass */
3
/* of Algorithm 4 (TX81Z) Subclass of */
4
/* 4 Operator FM Synth */
5
/* by Perry R. Cook, 1995-96 */
6
/******************************************/
10
PercFlut :: PercFlut() : FM4Alg4()
12
// Concatenate the STK RAWWAVE_PATH to the rawwave file
17
strcpy(file1, RAWWAVE_PATH);
18
strcpy(file2, RAWWAVE_PATH);
19
strcpy(file3, RAWWAVE_PATH);
20
strcpy(file4, RAWWAVE_PATH);
21
this->loadWaves(strcat(file1,"rawwaves/sinewave.raw"),
22
strcat(file2,"rawwaves/sinewave.raw"),
23
strcat(file3,"rawwaves/sinewave.raw"),
24
strcat(file4,"rawwaves/fwavblnk.raw"));
26
this->setRatio(0,(MY_FLOAT) (1.50 * 1.000));
27
this->setRatio(1,(MY_FLOAT) (3.00 * 0.995));
28
this->setRatio(2,(MY_FLOAT) (2.99 * 1.005));
29
this->setRatio(3,(MY_FLOAT) (6.00 * 0.997));
30
gains[0] = __FM4Op_gains[99];
31
gains[1] = __FM4Op_gains[71];
32
gains[2] = __FM4Op_gains[93];
33
gains[3] = __FM4Op_gains[85];
34
adsr[0]->setAllTimes((MY_FLOAT) 0.05,(MY_FLOAT) 0.05,
35
__FM4Op_susLevels[14],(MY_FLOAT) 0.05);
36
adsr[1]->setAllTimes((MY_FLOAT) 0.02,(MY_FLOAT) 0.50,
37
__FM4Op_susLevels[13],(MY_FLOAT) 0.5);
38
adsr[2]->setAllTimes((MY_FLOAT) 0.02,(MY_FLOAT) 0.30,
39
__FM4Op_susLevels[11],(MY_FLOAT) 0.05);
40
adsr[3]->setAllTimes((MY_FLOAT) 0.02,(MY_FLOAT) 0.05,
41
__FM4Op_susLevels[13],(MY_FLOAT) 0.01);
42
twozero->setGain((MY_FLOAT) 0.0);
43
modDepth = (MY_FLOAT) 0.005;
46
void PercFlut :: setFreq(MY_FLOAT frequency)
51
void PercFlut :: noteOn(MY_FLOAT freq, MY_FLOAT amp)
53
gains[0] = amp * __FM4Op_gains[99] * 0.5;
54
gains[1] = amp * __FM4Op_gains[71] * 0.5;
55
gains[2] = amp * __FM4Op_gains[93] * 0.5;
56
gains[3] = amp * __FM4Op_gains[85] * 0.5;
60
printf("PercFlut : NoteOn: Freq=%lf Amp=%lf\n",freq,amp);