zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit fb4153e7c8994672beeb29b335ad96509ee882d7
parent 59cd9466ab93dd2cbc2de6a5d59cb2eb861ef692
Author: paulnasca <paulnasca>
Date:   Sun, 14 Dec 2003 10:30:43 +0000

LFO freq. randomness improvements

Diffstat:
MChangeLog | 2++
Msrc/Synth/LFO.C | 26+++++++++++++++++++-------
Msrc/Synth/LFO.h | 6+++++-
3 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -504,3 +504,4 @@ 08 Dec 2003 - Inceput sa incerc sa fac rt-safe sub jack, dar in stadiul actual suportul jack este nefunctional 11 Dec 2003 - Adaugat aleatorism la amplitudinile armonicelor 13 Dec 2003 - Adaugat LFO frequency randomness +14 Dec 2003 - Imbunatatit LFO frequency randomness +\ No newline at end of file diff --git a/src/Synth/LFO.C b/src/Synth/LFO.C @@ -46,7 +46,8 @@ LFO::LFO(LFOParams *lfopars){ lfornd=lfopars->Prandomness/127.0; if (lfornd<0.0) lfornd=0.0; else if (lfornd>1.0) lfornd=1.0; - lfofreqrnd=pow(lfopars->Pfreqrand/127.0,2.0)*2.0*4.0; +// lfofreqrnd=pow(lfopars->Pfreqrand/127.0,2.0)*2.0*4.0; + lfofreqrnd=pow(lfopars->Pfreqrand/127.0,2.0)*4.0; switch (lfopars->fel){ case 1:lfointensity=lfopars->Pintensity/127.0;break; @@ -60,7 +61,10 @@ LFO::LFO(LFOParams *lfopars){ amp2=(1-lfornd)+lfornd*RND; lfotype=lfopars->PLFOtype; lfodelay=lfopars->Pdelay/127.0*4.0;//0..4 sec - incrnd=1.0; + incrnd=nextincrnd=1.0; + computenextincrnd(); + computenextincrnd();//twice because I want incrnd & nextincrnd to be random + freqrndenabled=(lfopars->Pfreqrand!=0); }; LFO::~LFO(){ @@ -98,14 +102,14 @@ REALTYPE LFO::lfoout(){ if ((lfotype==0)||(lfotype==1)) out*=lfointensity*(amp1+x*(amp2-amp1)); else out*=lfointensity*amp2; if (lfodelay<0.00001) { - x+=incx*incrnd; - if (x>1) { - x-=1; + if (freqrndenabled==0) x+=incx; + else x+=incx*(incrnd*(1.0-x)+nextincrnd*x); + if (x>=1) { + x=fmod(x,1.0); amp1=amp2; amp2=(1-lfornd)+lfornd*RND; - incrnd=pow(2.0,(RND-0.5)*lfofreqrnd); - if (incrnd*incx>=0.49999999) incrnd=1.0; + computenextincrnd(); }; } else lfodelay-=(REALTYPE)SOUND_BUFFER_SIZE/(REALTYPE)SAMPLE_RATE; return(out); @@ -122,3 +126,11 @@ REALTYPE LFO::amplfoout(){ return(out); }; + +void LFO::computenextincrnd(){ + if (freqrndenabled==0) return; + incrnd=nextincrnd; + nextincrnd=pow(0.5,lfofreqrnd)+RND*(pow(2.0,lfofreqrnd)-1.0); + if (nextincrnd*incx>=0.49999999) nextincrnd=1.0; +}; + diff --git a/src/Synth/LFO.h b/src/Synth/LFO.h @@ -35,12 +35,16 @@ class LFO{ REALTYPE amplfoout(); private: REALTYPE x; - REALTYPE incx,incrnd; + REALTYPE incx,incrnd,nextincrnd; REALTYPE amp1,amp2;// used for randomness REALTYPE lfointensity; REALTYPE lfornd,lfofreqrnd; REALTYPE lfodelay; char lfotype; + int freqrndenabled; + + + void computenextincrnd(); };