commit a55da9b25c8d4f22539ca19bed29493b847cc0ad
parent f054ad4d39ae39d156560c534bf41019f5c7d794
Author: paulnasca <paulnasca>
Date: Tue, 9 Mar 2004 18:40:00 +0000
*** empty log message ***
Diffstat:
7 files changed, 31 insertions(+), 16 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -545,7 +545,7 @@
24 Feb 2004 - Continuat la Bank
25 Feb 2004 - La Bank - inceput sa scriu partea ca sa arate instrumentele din banca
26 Feb 2004 - Continuat la Bank
-27 Feb 2004 - Corectate erori la snprintf ( nu dadeam parametru "%s" inainte de string si daca acel string continea ceva %, era periculos) si alte erori
+27 Feb 2004 - Corectate erori la snprintf (nu dadeam parametru "%s" inainte de string si daca acel string continea ceva %, era periculos) si alte erori
- Micsorat timpul de marire amplitudine la ADnote (doar in cazul cand amplitudinea creste brusc ca la un LFO expdown)
- Corectata o eroare foarte veche la LFO amplitudine (amplitudinea nu scadea corespunzator)
28 Feb 2004 - Se poate incarca si salva instrumente in Bank
@@ -555,7 +555,7 @@
03 Mar 2004 - Terminat (teoretic) partea de XML
05 Mar 2004 - Actualizat Copyright-ul la 2004 in fisiere
08 Mar 2004 - Corectat o mica eroare la OscilGen (se aplica gain-ul rezonantei incorect)
-
+09 Mar 2004 - Adaugat posibilitatea de stretch la LFO in functie de frecventa notei
diff --git a/src/Params/LFOParams.C b/src/Params/LFOParams.C
@@ -53,6 +53,7 @@ void LFOParams::defaults(){
Pdelay=Ddelay;
Pcontinous=Dcontinous;
Pfreqrand=0;
+ Pstretch=64;
};
/*
@@ -95,6 +96,8 @@ void LFOParams::saveloadbuf(Buffer *buf){
break;
case 0x87: buf->rwbytepar(n,&Pfreqrand);
break;
+ case 0x88: buf->rwbytepar(n,&Pstretch);
+ break;
};
};
@@ -114,6 +117,7 @@ void LFOParams::add2XML(XMLwrapper *xml){
xml->addpar("randomness_amplitude",Prandomness);
xml->addpar("randomness_frequency",Pfreqrand);
xml->addpar("delay",Pdelay);
+ xml->addpar("stretch",Pstretch);
xml->addparbool("continous",Pcontinous);
};
@@ -125,6 +129,7 @@ void LFOParams::getfromXML(XMLwrapper *xml){
Prandomness=xml->getpar127("randomness_amplitude",Prandomness);
Pfreqrand=xml->getpar127("randomness_frequency",Pfreqrand);
Pdelay=xml->getpar127("delay",Pdelay);
+ Pstretch=xml->getpar127("stretch",Pstretch);
Pcontinous=xml->getparbool("continous",Pcontinous);
};
diff --git a/src/Params/LFOParams.h b/src/Params/LFOParams.h
@@ -26,7 +26,6 @@
#include "../Misc/Buffer.h"
#include "../Misc/XMLwrapper.h"
-
class LFOParams{
public:
LFOParams(char Pfreq_,char Pintensity_,char Pstartphase_, char PLFOtype_,char Prandomness_, char Pdelay_,char Pcontinous,char fel_);
@@ -39,14 +38,15 @@ class LFOParams{
void getfromXML(XMLwrapper *xml);
/* Parametrii MIDI */
- REALTYPE Pfreq; // frequency
+ REALTYPE Pfreq; // frequency
unsigned char Pintensity; // intensity
unsigned char Pstartphase;// start phase (0=random)
unsigned char PLFOtype; // LFO type (sin,triangle,square,ramp,...)
unsigned char Prandomness;// randomness (0=off)
- unsigned char Pfreqrand;// frequency randomness (0=off)
+ unsigned char Pfreqrand; // frequency randomness (0=off)
unsigned char Pdelay; // delay (0=off)
unsigned char Pcontinous; // 1 if LFO is continous
+ unsigned char Pstretch; // how the LFO is "stretched" according the note frequency (64=no stretch)
int fel;//what kind is the LFO (0 - frequency, 1 - amplitude, 2 - filter)
static int time;//is used by Pcontinous parameter
diff --git a/src/Synth/ADnote.C b/src/Synth/ADnote.C
@@ -257,10 +257,10 @@ void ADnote::initparameters(){
// Global Parameters
NoteGlobalPar.FreqEnvelope=new Envelope(partparams->GlobalPar.FreqEnvelope,basefreq);
- NoteGlobalPar.FreqLfo=new LFO(partparams->GlobalPar.FreqLfo);
+ NoteGlobalPar.FreqLfo=new LFO(partparams->GlobalPar.FreqLfo,basefreq);
NoteGlobalPar.AmpEnvelope=new Envelope(partparams->GlobalPar.AmpEnvelope,basefreq);
- NoteGlobalPar.AmpLfo=new LFO(partparams->GlobalPar.AmpLfo);
+ NoteGlobalPar.AmpLfo=new LFO(partparams->GlobalPar.AmpLfo,basefreq);
NoteGlobalPar.Volume=4.0*pow(0.1,3.0*(1.0-partparams->GlobalPar.PVolume/96.0))//-60 dB .. 0 dB
*VelF(velocity,partparams->GlobalPar.PAmpVelocityScaleFunction);//velocity sensing
@@ -272,7 +272,7 @@ void ADnote::initparameters(){
if (stereo!=0) NoteGlobalPar.GlobalFilterR=new Filter(partparams->GlobalPar.GlobalFilter);
NoteGlobalPar.FilterEnvelope=new Envelope(partparams->GlobalPar.FilterEnvelope,basefreq);
- NoteGlobalPar.FilterLfo=new LFO(partparams->GlobalPar.FilterLfo);
+ NoteGlobalPar.FilterLfo=new LFO(partparams->GlobalPar.FilterLfo,basefreq);
NoteGlobalPar.FilterQ=partparams->GlobalPar.GlobalFilter->getq();
NoteGlobalPar.FilterFreqTracking=partparams->GlobalPar.GlobalFilter->getfreqtracking(basefreq);
@@ -302,7 +302,7 @@ void ADnote::initparameters(){
};
if (partparams->VoicePar[nvoice].PAmpLfoEnabled!=0){
- NoteVoicePar[nvoice].AmpLfo=new LFO(partparams->VoicePar[nvoice].AmpLfo);
+ NoteVoicePar[nvoice].AmpLfo=new LFO(partparams->VoicePar[nvoice].AmpLfo,basefreq);
newamplitude[nvoice]*=NoteVoicePar[nvoice].AmpLfo->amplfoout();
};
@@ -310,7 +310,7 @@ void ADnote::initparameters(){
if (partparams->VoicePar[nvoice].PFreqEnvelopeEnabled!=0)
NoteVoicePar[nvoice].FreqEnvelope=new Envelope(partparams->VoicePar[nvoice].FreqEnvelope,basefreq);
- if (partparams->VoicePar[nvoice].PFreqLfoEnabled!=0) NoteVoicePar[nvoice].FreqLfo=new LFO(partparams->VoicePar[nvoice].FreqLfo);
+ if (partparams->VoicePar[nvoice].PFreqLfoEnabled!=0) NoteVoicePar[nvoice].FreqLfo=new LFO(partparams->VoicePar[nvoice].FreqLfo,basefreq);
/* Voice Filter Parameters Init */
if (partparams->VoicePar[nvoice].PFilterEnabled!=0){
@@ -321,7 +321,7 @@ void ADnote::initparameters(){
NoteVoicePar[nvoice].FilterEnvelope=new Envelope(partparams->VoicePar[nvoice].FilterEnvelope,basefreq);
if (partparams->VoicePar[nvoice].PFilterLfoEnabled!=0)
- NoteVoicePar[nvoice].FilterLfo=new LFO(partparams->VoicePar[nvoice].FilterLfo);
+ NoteVoicePar[nvoice].FilterLfo=new LFO(partparams->VoicePar[nvoice].FilterLfo,basefreq);
NoteVoicePar[nvoice].FilterFreqTracking=partparams->VoicePar[nvoice].VoiceFilter->getfreqtracking(basefreq);
diff --git a/src/Synth/LFO.C b/src/Synth/LFO.C
@@ -27,8 +27,11 @@
#include "LFO.h"
-LFO::LFO(LFOParams *lfopars){
- REALTYPE lfofreq=(pow(2,lfopars->Pfreq*10.0)-1.0)/12.0;
+LFO::LFO(LFOParams *lfopars,REALTYPE basefreq){
+ if (lfopars->Pstretch==0) lfopars->Pstretch=1;
+ REALTYPE lfostretch=pow(basefreq/440.0,(lfopars->Pstretch-64.0)/63.0);//max 2x/octave
+
+ REALTYPE lfofreq=(pow(2,lfopars->Pfreq*10.0)-1.0)/12.0*lfostretch;
incx=fabs(lfofreq)*(REALTYPE)SOUND_BUFFER_SIZE/(REALTYPE)SAMPLE_RATE;
if (lfopars->Pcontinous==0){
diff --git a/src/Synth/LFO.h b/src/Synth/LFO.h
@@ -29,7 +29,7 @@
class LFO{
public:
- LFO(LFOParams *lfopars);
+ LFO(LFOParams *lfopars, REALTYPE basefreq);
~LFO();
REALTYPE lfoout();
REALTYPE amplfoout();
diff --git a/src/UI/LFOUI.fl b/src/UI/LFOUI.fl
@@ -54,7 +54,7 @@ delete (lfoui);} {}
} {
Fl_Dial {} {
label {Freq.}
- callback {pars->Pfreq=o->value();} selected
+ callback {pars->Pfreq=o->value();}
tooltip {LFO Frequency} xywh {5 20 30 30} box ROUND_UP_BOX labelsize 11 step 1e-05
code0 {o->value(pars->Pfreq);}
class WidgetPDial
@@ -125,7 +125,7 @@ delete (lfoui);} {}
Fl_Check_Button {} {
label {C.}
callback {pars->Pcontinous=(int)o->value();}
- tooltip {Continous LFO} xywh {145 30 30 15} down_box DOWN_BOX labelsize 11
+ tooltip {Continous LFO} xywh {150 13 25 15} down_box DOWN_BOX labelsize 11
code0 {o->value(pars->Pcontinous);}
}
Fl_Dial {} {
@@ -135,6 +135,13 @@ delete (lfoui);} {}
code0 {o->value(pars->Pfreqrand);}
class WidgetPDial
}
+ Fl_Dial {} {
+ label {Str.}
+ callback {pars->Pstretch=(int)o->value();}
+ tooltip {LFO stretch} xywh {150 30 20 20} box ROUND_UP_BOX labelsize 10 maximum 127 step 1
+ code0 {o->value(pars->Pstretch);}
+ class WidgetPDial
+ }
}
}
}