diff options
Diffstat (limited to 'stksitar~/sitar.cc')
-rw-r--r-- | stksitar~/sitar.cc | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/stksitar~/sitar.cc b/stksitar~/sitar.cc index 11cf35b..291c5f2 100644 --- a/stksitar~/sitar.cc +++ b/stksitar~/sitar.cc @@ -9,18 +9,13 @@ #include "sitar.h" -#ifndef MY_FLOAT -#warning "weird : MY_FLOAT undefined" -#define MY_FLOAT double -#endif - -sitar :: sitar(MY_FLOAT lowestFreq) +sitar :: sitar(StkFloat lowestFreq) { length = (long) (SRATE / lowestFreq + 1); - loopGain = (MY_FLOAT) 0.999; + loopGain = (StkFloat) 0.999; loopFilt = new OneZero(); - loopFilt->setCoeff(0.01); - delayLine = new DLineA(length); + loopFilt->setZero(0.01); + delayLine = new DelayA(0.5 * length, length); delay = length/2; delayTarg = delay; envelope = new ADSR(); @@ -43,21 +38,21 @@ void sitar :: clear() delayLine->clear(); } -void sitar :: setFreq(MY_FLOAT frequency) +void sitar :: setFreq(StkFloat frequency) { delayTarg = (SRATE / frequency); delay = delayTarg * (1.0 + (0.05 * noise->tick())); delayLine->setDelay(delay); - loopGain = (MY_FLOAT) 0.995 + (frequency * (MY_FLOAT) 0.000001); - if (loopGain>1.0) loopGain = (MY_FLOAT) 0.9995; + loopGain = (StkFloat) 0.995 + (frequency * (StkFloat) 0.000001); + if (loopGain>1.0) loopGain = (StkFloat) 0.9995; } -void sitar :: pluck(MY_FLOAT amplitude) +void sitar :: pluck(StkFloat amplitude) { envelope->keyOn(); } -void sitar :: noteOn(MY_FLOAT freq, MY_FLOAT amp) +void sitar :: noteOn(StkFloat freq, StkFloat amp) { this->setFreq(freq); this->pluck(amp); @@ -67,17 +62,17 @@ void sitar :: noteOn(MY_FLOAT freq, MY_FLOAT amp) #endif } -void sitar :: noteOff(MY_FLOAT amp) +void sitar :: noteOff(StkFloat amp) { - loopGain = (MY_FLOAT) 1.0 - amp; + loopGain = (StkFloat) 1.0 - amp; #if defined(_debug_) printf("sitar : NoteOff: Amp=%lf\n",amp); #endif } -MY_FLOAT sitar :: tick() +StkFloat sitar :: tick() { - MY_FLOAT temp; + StkFloat temp; temp = delayLine->lastOut(); if (fabs(temp) > 1.0) { @@ -97,9 +92,9 @@ MY_FLOAT sitar :: tick() delayLine->setDelay(delay); } - lastOutput = delayLine->tick(loopFilt->tick(temp) + lastOutput_ = delayLine->tick(loopFilt->tick(temp) + (amPluck * envelope->tick() * noise->tick())); - return lastOutput; + return lastOutput_; } |