1
/*******************************************/
2
/* Modulator Class, Perry R. Cook, 1995-96*/
3
/* This Object combines random and */
4
/* periodic modulations to give a nice */
5
/* natural human modulation function. */
6
/*******************************************/
8
#define POLE_POS (MY_FLOAT) 0.999
9
#define RND_SCALE (MY_FLOAT) 10.0
13
Modulatr :: Modulatr()
15
// Concatenate the STK RAWWAVE_PATH to the rawwave file
17
strcpy(file, RAWWAVE_PATH);
18
vibwave = new RawWvIn(strcat(file,"rawwaves/sinewave.raw"),"looping");
19
vibwave->setFreq((MY_FLOAT) 6.0);
20
vibAmt = (MY_FLOAT) 0.04;
21
noise = new SubNoise(330);
22
rndAmt = (MY_FLOAT) 0.005;
23
onepole = new OnePole;
24
onepole->setPole(POLE_POS);
25
onepole->setGain(rndAmt * RND_SCALE);
28
Modulatr :: ~Modulatr()
35
void Modulatr :: reset()
37
lastOutput = (MY_FLOAT) 0.0;
40
void Modulatr :: setVibFreq(MY_FLOAT vibFreq)
42
vibwave->setFreq(vibFreq);
45
void Modulatr :: setVibAmt(MY_FLOAT vibAmount)
50
void Modulatr :: setRndAmt(MY_FLOAT rndAmount)
53
onepole->setGain(RND_SCALE * rndAmt);
56
MY_FLOAT Modulatr :: tick()
58
lastOutput = vibAmt * vibwave->tick(); /* Compute periodic and */
59
lastOutput += onepole->tick(noise->tick()); /* random modulations */
63
MY_FLOAT Modulatr :: lastOut()
68
/************ Test Main Program *****************/
77
fd = fopen("test.raw","wb");
79
for (i=0;i<20000;i++) {
80
data = testMod.tick() * 32000.0;