commit a30a36cc88334889b62c5c113af471029094ae5f
parent 3b6ece03220d7b04f04d5a8bed7d1b248ed5edd7
Author: paulnasca <paulnasca>
Date: Wed, 23 Jun 2004 20:17:06 +0000
*** empty log message ***
Diffstat:
7 files changed, 43 insertions(+), 10 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -590,8 +590,10 @@
- Facute mici modificari la FM-ul de la Oscil
21 Iun 2004 - Inceput sa scriu conversia in sinus
22 Iun 2004 - Continuat conversia in sinus si facut teste pentru posibilitatea de "draw" cu sliderele
-23 Iun 2004 - Modificat modul in care parametrii se afiseaza la OscilGen (este o functie refresh() care face asta)
+23 Iun 2004 - Modificat modul in care parametrii se afiseaza la OscilGen (este o functie "refresh" care face asta)
- Adaugata posibilitatea de draw la armonicele OscilGen daca se apasa tasta Shift
- Corectata o mica eroare care facea imposibila modificarea amplitudinii armonicelor cu tastatura
+ - Adaugat randomness de grup (adica se aplica acelasi randomness la toate vocile care folosesc acelasi oscilator)
+
diff --git a/src/Params/ADnoteParameters.C b/src/Params/ADnoteParameters.C
@@ -68,6 +68,7 @@ void ADnoteParameters::defaults(){
GlobalPar.PPunchTime=60;
GlobalPar.PPunchStretch=64;
GlobalPar.PPunchVelocitySensing=72;
+ GlobalPar.Hrandgrouping=0;
/* Filter Global Parameters*/
GlobalPar.PFilterVelocityScale=64;
@@ -77,6 +78,7 @@ void ADnoteParameters::defaults(){
GlobalPar.FilterLfo->defaults();
GlobalPar.Reson->defaults();
+
for (int nvoice=0;nvoice<NUM_VOICES;nvoice++){
VoicePar[nvoice].Enabled=0;
VoicePar[nvoice].Type=0;
@@ -659,6 +661,7 @@ void ADnoteParameters::add2XML(XMLwrapper *xml){
xml->addpar("punch_time",GlobalPar.PPunchTime);
xml->addpar("punch_stretch",GlobalPar.PPunchStretch);
xml->addpar("punch_velocity_sensing",GlobalPar.PPunchVelocitySensing);
+ xml->addpar("harmonic_randomness_grouping",GlobalPar.Hrandgrouping);
xml->beginbranch("AMPLITUDE_ENVELOPE");
GlobalPar.AmpEnvelope->add2XML(xml);
@@ -671,7 +674,6 @@ void ADnoteParameters::add2XML(XMLwrapper *xml){
xml->beginbranch("FREQUENCY_PARAMETERS");
xml->addpar("detune",GlobalPar.PDetune);
-// printf("%d\n",GlobalPar.PCoarseDetune);
xml->addpar("coarse_detune",GlobalPar.PCoarseDetune);
xml->addpar("detune_type",GlobalPar.PDetuneType);
@@ -727,6 +729,7 @@ void ADnoteParameters::getfromXML(XMLwrapper *xml){
GlobalPar.PPunchTime=xml->getpar127("punch_time",GlobalPar.PPunchTime);
GlobalPar.PPunchStretch=xml->getpar127("punch_stretch",GlobalPar.PPunchStretch);
GlobalPar.PPunchVelocitySensing=xml->getpar127("punch_velocity_sensing",GlobalPar.PPunchVelocitySensing);
+ GlobalPar.Hrandgrouping=xml->getpar127("harmonic_randomness_grouping",GlobalPar.Hrandgrouping);
if (xml->enterbranch("AMPLITUDE_ENVELOPE")){
GlobalPar.AmpEnvelope->getfromXML(xml);
diff --git a/src/Params/ADnoteParameters.h b/src/Params/ADnoteParameters.h
@@ -97,6 +97,9 @@
// RESONANCE
Resonance *Reson;
+
+ //how the randomness is applied to the harmonics on more voices using the same oscillator
+ unsigned char Hrandgrouping;
};
diff --git a/src/Synth/ADnote.C b/src/Synth/ADnote.C
@@ -67,8 +67,9 @@ ADnote::ADnote(ADnoteParameters *pars,Controller *ctl_,REALTYPE freq,REALTYPE ve
REALTYPE stretch=pow(440.0/freq,pars->GlobalPar.PPunchStretch/64.0);
NoteGlobalPar.Punch.dt=1.0/(time*SAMPLE_RATE*stretch);
} else NoteGlobalPar.Punch.Enabled=0;
-
+
for (int nvoice=0;nvoice<NUM_VOICES;nvoice++){
+ pars->VoicePar[nvoice].OscilSmp->newrandseed(rand());
NoteVoicePar[nvoice].OscilSmp=NULL;
NoteVoicePar[nvoice].FMSmp=NULL;
NoteVoicePar[nvoice].VoiceOut=NULL;
@@ -112,6 +113,7 @@ ADnote::ADnote(ADnoteParameters *pars,Controller *ctl_,REALTYPE freq,REALTYPE ve
//Get the voice's oscil or external's voice oscil
int vc=nvoice;
if (pars->VoicePar[nvoice].Pextoscil!=-1) vc=pars->VoicePar[nvoice].Pextoscil;
+ if (!pars->GlobalPar.Hrandgrouping) pars->VoicePar[vc].OscilSmp->newrandseed(rand());
oscposhi[nvoice]=pars->VoicePar[vc].OscilSmp->get(NoteVoicePar[nvoice].OscilSmp,getvoicebasefreq(nvoice),
pars->VoicePar[nvoice].Presonance);
@@ -329,6 +331,7 @@ void ADnote::initparameters(){
/* Voice Modulation Parameters Init */
if ((NoteVoicePar[nvoice].FMEnabled!=NONE)&&(NoteVoicePar[nvoice].FMVoice<0)){
+ partparams->VoicePar[nvoice].FMSmp->newrandseed(rand());
NoteVoicePar[nvoice].FMSmp=new REALTYPE[OSCIL_SIZE+OSCIL_SMP_EXTRA_SAMPLES];
//Perform Anti-aliasing only on MORPH or RING MODULATION
@@ -343,6 +346,8 @@ void ADnote::initparameters(){
int vc=nvoice;
if (partparams->VoicePar[nvoice].PextFMoscil!=-1) vc=partparams->VoicePar[nvoice].PextFMoscil;
+ if (!partparams->GlobalPar.Hrandgrouping) partparams->VoicePar[vc].FMSmp->newrandseed(rand());
+
oscposhiFM[nvoice]=(oscposhi[nvoice]+partparams->VoicePar[vc].FMSmp->get(NoteVoicePar[nvoice].FMSmp,tmp)) % OSCIL_SIZE;
for (int i=0;i<OSCIL_SMP_EXTRA_SAMPLES;i++) NoteVoicePar[nvoice].FMSmp[OSCIL_SIZE+i]=NoteVoicePar[nvoice].FMSmp[i];
oscposhiFM[nvoice]+=(int)((partparams->VoicePar[nvoice].PFMoscilphase-64.0)/128.0*OSCIL_SIZE+OSCIL_SIZE*4);
diff --git a/src/Synth/OscilGen.C b/src/Synth/OscilGen.C
@@ -36,6 +36,7 @@ OscilGen::OscilGen(FFTwrapper *fft_,Resonance *res_){
basefuncFFTfreqsQ=NULL;
basefuncFFTfreqs=NULL;
outoscilFFTfreqs=NULL;
+ randseed=1;
defaults();
};
@@ -777,6 +778,10 @@ short int OscilGen::get(REALTYPE *smps,REALTYPE freqHz){
return(this->get(smps,freqHz,0));
};
+void OscilGen::newrandseed(unsigned int randseed){
+ this->randseed=randseed;
+};
+
/*
* Get the oscillator function
*/
@@ -864,13 +869,17 @@ short int OscilGen::get(REALTYPE *smps,REALTYPE freqHz,int resonance){
//Harmonic Amplitude Randomness
if (freqHz>0.1) {
+ unsigned int realrnd=rand();
+ srand(randseed);
REALTYPE power=Pamprandpower/127.0;
REALTYPE normalize=1.0/(1.2-power);
switch (Pamprandtype){
case 1: power=power*2.0-0.5;
power=pow(15.0,power);
for (i=1;i<nyquist-1;i++){
+// REALTYPE x=(i-1)/3.0;if (x>1.0) x=1.0;x*=x;
REALTYPE amp=pow(RND,power)*normalize;
+// amp=1.0-x+amp*x;
outoscilFFTfreqs[i]*=amp;
outoscilFFTfreqs[OSCIL_SIZE-i]*=amp;
};
@@ -885,6 +894,7 @@ short int OscilGen::get(REALTYPE *smps,REALTYPE freqHz,int resonance){
};
break;
};
+ srand(realrnd+1);
};
diff --git a/src/Synth/OscilGen.h b/src/Synth/OscilGen.h
@@ -102,7 +102,10 @@ class OscilGen{
unsigned char Pmodulation;//what modulation is applied to the oscil
unsigned char Pmodulationpar1,Pmodulationpar2,Pmodulationpar3;//the parameter of the parameters
-
+
+ //makes a new random seed for Amplitude Randomness
+ //this should be called every note on event
+ void newrandseed(unsigned int randseed);
private:
REALTYPE hmag[MAX_AD_HARMONICS],hphase[MAX_AD_HARMONICS];//the magnituides and the phases of the sine/nonsine harmonics
@@ -166,6 +169,8 @@ class OscilGen{
unsigned short int *basefuncFFTfreqsQ;
Resonance *res;
+ unsigned int randseed;
+
};
diff --git a/src/UI/ADnoteUI.fl b/src/UI/ADnoteUI.fl
@@ -1,5 +1,5 @@
# data file for the Fltk User Interface Designer (fluid)
-version 1.0200
+version 1.0105
header_name {.h}
code_name {.cc}
decl {//Copyright (c) 2002-2004 Nasca Octavian Paul} {}
@@ -744,15 +744,14 @@ delete (ADnoteVoiceParameters);} {}
}
decl {int nvoice;} {}
decl {ADnoteParameters *pars;} {}
- decl {OscilEditor *oscedit;} {selected
- }
+ decl {OscilEditor *oscedit;} {}
decl {Oscilloscope *osc;} {}
decl {Oscilloscope *oscFM;} {}
decl {Master *master;} {}
}
class ADnoteUI {} {
- Function {make_window()} {open private
+ Function {make_window()} {private
} {
Fl_Window ADnoteGlobalParameters {
label {ADsynth Global Parameters of the Instrument}
@@ -822,7 +821,7 @@ detunevalueoutput->do_callback();}
}
}
Fl_Group {} {
- label AMPLITUDE
+ label AMPLITUDE selected
xywh {5 5 240 250} box THIN_UP_FRAME labeltype EMBOSSED_LABEL labelfont 1 labelsize 16 align 17
} {
Fl_Value_Slider {} {
@@ -884,6 +883,12 @@ detunevalueoutput->do_callback();}
code0 {o->init(pars->GlobalPar.AmpLfo);}
class LFOUI
} {}
+ Fl_Check_Button {} {
+ label {Rnd Grp}
+ callback {pars->GlobalPar.Hrandgrouping=(int) o->value();}
+ tooltip {How the Harmonic Amplitude is applied to voices that use the same oscillator} xywh {70 225 40 25} down_box DOWN_BOX labelsize 10 align 148
+ code0 {o->value(pars->GlobalPar.Hrandgrouping);}
+ }
}
Fl_Group {} {
label FILTER
@@ -911,7 +916,7 @@ detunevalueoutput->do_callback();}
Fl_Check_Button {} {
label Stereo
callback {pars->GlobalPar.PStereo=(int) o->value();}
- xywh {5 220 80 35} box ENGRAVED_BOX down_box DOWN_BOX labelfont 1 labelsize 12
+ xywh {5 220 65 35} box ENGRAVED_BOX down_box DOWN_BOX labelfont 1 labelsize 12
code0 {o->value(pars->GlobalPar.PStereo);}
}
Fl_Button {} {