commit 63e99124c36e30b4a97b993fcf54ed8fb65545e8
parent 98ff5fc968a87eb46e2e15b00ee01ac1446974c5
Author: paulnasca <paulnasca>
Date: Wed, 4 Feb 2004 20:24:37 +0000
*** empty log message ***
Diffstat:
18 files changed, 254 insertions(+), 27 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -521,4 +521,5 @@
02 Feb 2003 - Corectata o eroare care facea ca numele la instrumentele din bank sa fie aratate gresit (nu era pus un \0 )
- Continuat suportul de XML
03 Feb 2003 - Continuat de scris suportul XML - inceput sa salvezi cativa parametrii
+04 Feb 2003 - Se salveaza parametrii XML la master, part, filter, lfo, envelope, resonance si adnote (partial)
diff --git a/src/Misc/Master.C b/src/Misc/Master.C
@@ -701,7 +701,7 @@ void Master::add2XML(XMLwrapper *xml){
//Save all parts
for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
- xml->beginbranch("PART","npart",npart);
+ xml->beginbranch("PART",npart);
part[npart]->add2XML(xml);
xml->endbranch();
};
diff --git a/src/Misc/Part.C b/src/Misc/Part.C
@@ -917,10 +917,47 @@ void Part::saveloadbuf(Buffer *buf,int instrumentonly){
*/
void Part::add2XMLinstrument(XMLwrapper *xml){
- xml->addparstr("name",(char *)Pname);
+ xml->beginbranch("INSTRUMENTINFO");
+ xml->addparstr("name",(char *)Pname);
+ xml->addparstr("author",(char *)info.Pauthor);
+ xml->addparstr("comments",(char *)info.Pcomments);
+ xml->addpar("type",info.Ptype);
+ xml->endbranch();
+
xml->addpar("kitmode",Pkitmode);
xml->addparbool("drummode",Pdrummode);
+ for (int i=0;i<NUM_KIT_ITEMS;i++){
+ xml->beginbranch("INSTRUMENTKIT",i);
+ xml->addparbool("enabled",kit[i].Penabled);
+ if (kit[i].Penabled!=0) {
+ xml->addparstr("name",(char *)kit[i].Pname);
+
+ xml->addpar("muted",kit[i].Pmuted);
+ xml->addpar("minkey",kit[i].Pminkey);
+ xml->addpar("maxkey",kit[i].Pmaxkey);
+
+ xml->addpar("Psendtoparteefect",kit[i].Psendtoparteffect);
+
+ xml->addpar("adenabled",kit[i].Padenabled);
+ xml->addpar("subenabled",kit[i].Psubenabled);
+
+ if ((kit[i].Padenabled!=0)&&(kit[i].adpars!=NULL)){
+ xml->beginbranch("ADNOTEPARAMETERS");
+ kit[i].adpars->add2XML(xml);
+ xml->endbranch();
+ };
+
+ if ((kit[i].Psubenabled!=0)&&(kit[i].subpars!=NULL)){
+ xml->beginbranch("SUBNOTEPARAMETERS");
+ //kit[i].subpars->add2XML(xml);
+ xml->endbranch();
+ };
+
+ };
+ xml->endbranch();
+ };
+
};
diff --git a/src/Misc/Part.h b/src/Misc/Part.h
@@ -86,7 +86,6 @@ class Part{
unsigned char Pvolume;//part volume
unsigned char Pminkey;//the minimum key that the part receives noteon messages
unsigned char Pmaxkey;//the maximum key that the part receives noteon messages
- unsigned char *Pname; //name of the instrument
void setPvolume(char Pvolume);
unsigned char Pkeyshift;//Part keyshift
unsigned char Prcvchn;//from what midi channel it receive commnads
@@ -103,7 +102,8 @@ class Part{
unsigned char Ppolymode;//Part mode - 0=monophonic , 1=polyphonic
unsigned char Pkeylimit;//how many keys are alowed to be played same time (0=off), the older will be relased
- struct{
+ unsigned char *Pname; //name of the instrument
+ struct{//instrument additional information
unsigned char Ptype;
unsigned char Pauthor[MAX_INFO_TEXT_SIZE+1];
unsigned char Pcomments[MAX_INFO_TEXT_SIZE+1];
diff --git a/src/Misc/XMLwrapper.C b/src/Misc/XMLwrapper.C
@@ -94,9 +94,9 @@ void XMLwrapper::beginbranch(char *name){
node=addparams0(name);
};
-void XMLwrapper::beginbranch(char *name,char *par,int val){
+void XMLwrapper::beginbranch(char *name,int id){
push(node);
- node=addparams1(name,par,int2str(val));
+ node=addparams1(name,"id",int2str(id));
};
void XMLwrapper::endbranch(){
diff --git a/src/Misc/XMLwrapper.h b/src/Misc/XMLwrapper.h
@@ -50,7 +50,7 @@ class XMLwrapper{
//add a branch
void beginbranch(char *name);
- void beginbranch(char *name, char *par, int val);
+ void beginbranch(char *name, int id);
//this must be called after each branch (nodes that contains child nodes)
void endbranch();
diff --git a/src/Params/ADnoteParameters.C b/src/Params/ADnoteParameters.C
@@ -484,3 +484,67 @@ void ADnoteParameters::saveloadbuf(Buffer *buf){
+
+void ADnoteParameters::add2XML(XMLwrapper *xml){
+ xml->addpar("stereo",GlobalPar.PStereo);
+ xml->beginbranch("FREQUENCY_PARAMETERS");
+ xml->addpar("detune",GlobalPar.PDetune);
+ xml->addpar("coarsedetune",GlobalPar.PCoarseDetune);
+ xml->addpar("detunetype",GlobalPar.PDetuneType);
+
+ xml->beginbranch("ENVELOPE_FREQUENCY");
+ GlobalPar.FreqEnvelope->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("LFO_FREQENCY");
+ GlobalPar.FreqLfo->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+
+ xml->beginbranch("AMPLITUDE_PARAMETERS");
+ xml->addpar("volume",GlobalPar.PVolume);
+ xml->addpar("panning",GlobalPar.PPanning);
+ xml->addpar("velocitysensing",GlobalPar.PAmpVelocityScaleFunction);
+ xml->addpar("punchstrength",GlobalPar.PPunchStrength);
+ xml->addpar("punchtime",GlobalPar.PPunchTime);
+ xml->addpar("punchstretch",GlobalPar.PPunchStretch);
+ xml->addpar("punchvelocitysensing",GlobalPar.PPunchVelocitySensing);
+
+ xml->beginbranch("ENVELOPE_AMPLITUDE");
+ GlobalPar.AmpEnvelope->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("LFO_AMPLITUDE");
+ GlobalPar.AmpLfo->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+
+ xml->beginbranch("FILTER_PARAMETERS");
+ xml->beginbranch("FILTER");
+ GlobalPar.GlobalFilter->add2XML(xml);
+ xml->endbranch();
+
+ xml->addpar("velocitysensingamplitude",GlobalPar.PFilterVelocityScale);
+ xml->addpar("velocitysensing",GlobalPar.PFilterVelocityScaleFunction);
+
+ xml->beginbranch("ENVELOPE_FILTER");
+ GlobalPar.FilterEnvelope->add2XML(xml);
+ xml->endbranch();
+
+ xml->beginbranch("LFO_FILTER");
+ GlobalPar.FilterLfo->add2XML(xml);
+ xml->endbranch();
+ xml->endbranch();
+
+ xml->beginbranch("ENVELOPE_FILTER");
+ GlobalPar.Reson->add2XML(xml);
+ xml->endbranch();
+
+ //aici sa salvez pt. fiecare voce (apelez o alta functie)
+
+
+};
+
+
+
+
diff --git a/src/Params/ADnoteParameters.h b/src/Params/ADnoteParameters.h
@@ -31,6 +31,7 @@
#include "../Synth/OscilGen.h"
#include "../Synth/Resonance.h"
#include "../Misc/Util.h"
+#include "../Misc/XMLwrapper.h"
#include "../DSP/FFTwrapper.h"
enum FMTYPE{NONE,MORPH,RING_MOD,PHASE_MOD,FREQ_MOD,PITCH_MOD};
@@ -256,6 +257,8 @@ class ADnoteParameters{
ADnoteGlobalParam GlobalPar;
ADnoteVoiceParam VoicePar[NUM_VOICES];
+ void add2XML(XMLwrapper *xml);
+
void saveloadbuf(Buffer *buf);
void saveloadbufvoice(Buffer *buf,unsigned char nvoice);
diff --git a/src/Params/EnvelopeParams.C b/src/Params/EnvelopeParams.C
@@ -26,7 +26,7 @@
#include <stdlib.h>
#include "EnvelopeParams.h"
-EnvelopeParams::EnvelopeParams(unsigned char Penvstretch_,unsigned char Pforcedrelase_){
+EnvelopeParams::EnvelopeParams(unsigned char Penvstretch_,unsigned char Pforcedrelease_){
int i;
PA_dt=10;PD_dt=10;PR_dt=10;PA_val=64;PD_val=64;PS_val=64;PR_val=64;
@@ -40,7 +40,7 @@ EnvelopeParams::EnvelopeParams(unsigned char Penvstretch_,unsigned char Pforcedr
Penvpoints=1;
Envmode=1;
Penvstretch=Penvstretch_;
- Pforcedrelase=Pforcedrelase_;
+ Pforcedrelease=Pforcedrelease_;
Pfreemode=1;
Plinearenvelope=0;
};
@@ -154,7 +154,7 @@ void EnvelopeParams::saveloadbuf(Buffer *buf){
break;
case 0x81: buf->rwbytepar(n,&Penvstretch);
break;
- case 0x82: buf->rwbytepar(n,&Pforcedrelase);
+ case 0x82: buf->rwbytepar(n,&Pforcedrelease);
break;
case 0x83: buf->rwbytepar(n,&Penvpoints);
break;
@@ -203,4 +203,30 @@ void EnvelopeParams::saveloadbuf(Buffer *buf){
};
};
+void EnvelopeParams::add2XML(XMLwrapper *xml){
+ xml->addparbool("freemode",Pfreemode);
+ xml->addpar("envpoints",Penvpoints);
+ xml->addpar("envsustain",Penvsustain);
+ xml->addpar("envstretch",Penvstretch);
+ xml->addparbool("forcedrelease",Pforcedrelease);
+ xml->addparbool("linearenvelope",Plinearenvelope);
+ xml->addpar("A_dt",PA_dt);
+ xml->addpar("D_dt",PD_dt);
+ xml->addpar("R_dt",PR_dt);
+ xml->addpar("A_val",PA_val);
+ xml->addpar("D_val",PD_val);
+ xml->addpar("S_val",PS_val);
+ xml->addpar("R_val",PR_val);
+
+ if (Pfreemode!=0){
+ for (int i=0;i<Penvpoints;i++){
+ xml->beginbranch("POINT",i);
+ if (i!=0) xml->addpar("envdt",Penvdt[i]);
+ xml->addpar("envval",Penvval[i]);
+ xml->endbranch();
+ };
+ };
+};
+
+
diff --git a/src/Params/EnvelopeParams.h b/src/Params/EnvelopeParams.h
@@ -25,13 +25,14 @@
#include "../globals.h"
#include "../Misc/Buffer.h"
+#include "../Misc/XMLwrapper.h"
#define MAX_ENVELOPE_POINTS 40
#define MIN_ENVELOPE_DB -40
class EnvelopeParams{
public:
- EnvelopeParams(unsigned char Penvstretch_,unsigned char Pforcedrelase_);
+ EnvelopeParams(unsigned char Penvstretch_,unsigned char Pforcedrelease_);
~EnvelopeParams();
void ADSRinit(char A_dt,char D_dt,char S_val,char R_dt);
void ADSRinit_dB(char A_dt,char D_dt,char S_val,char R_dt);
@@ -40,16 +41,20 @@ class EnvelopeParams{
void ASRinit_bw(char A_val,char A_dt,char R_val,char R_dt);
void converttofree();
void saveloadbuf(Buffer *buf);
+
+ void add2XML(XMLwrapper *xml);
+
+
REALTYPE getdt(char i);
/* Parametrii MIDI */
unsigned char Pfreemode;//1 daca este in modul free sau 0 daca este in mod ADSR,ASR,...
unsigned char Penvpoints;
- unsigned char Penvsustain;//127 pentru dezactivat,0 pentru relase "fortat" (folosit in amplitudine)
+ unsigned char Penvsustain;//127 pentru dezactivat
unsigned char Penvdt[MAX_ENVELOPE_POINTS];
unsigned char Penvval[MAX_ENVELOPE_POINTS];
unsigned char Penvstretch;//64=normal stretch (piano-like), 0=no stretch
- unsigned char Pforcedrelase;//0 - OFF, 1 - ON
+ unsigned char Pforcedrelease;//0 - OFF, 1 - ON
unsigned char Plinearenvelope;//if the amplitude envelope is linear
unsigned char PA_dt,PD_dt,PR_dt,
diff --git a/src/Params/FilterParams.C b/src/Params/FilterParams.C
@@ -297,3 +297,47 @@ void FilterParams::saveloadbuf(Buffer *buf){
buf->rwbyte(&tmp);
};
};
+
+void FilterParams::add2XML(XMLwrapper *xml){
+ //filter parameters
+ xml->addpar("category",Pcategory);
+ xml->addpar("type",Ptype);
+ xml->addpar("freq",Pfreq);
+ xml->addpar("q",Pq);
+ xml->addpar("stages",Pstages);
+ xml->addpar("freqtrack",Pfreqtrack);
+ xml->addpar("gain",Pgain);
+
+ //formant filter parameters
+ if (Pcategory==1){
+ xml->beginbranch("FORMANTFILTER");
+ xml->addpar("numformants",Pnumformants);
+ xml->addpar("formantslowness",Pformantslowness);
+ xml->addpar("vowelclearness",Pvowelclearness);
+ xml->addpar("centerfreq",Pcenterfreq);
+ xml->addpar("octavesfreq",Poctavesfreq);
+ for (int nvowel=0;nvowel<FF_MAX_VOWELS;nvowel++){
+ xml->beginbranch("VOWEL",nvowel);
+ for (int nformant=0;nformant<FF_MAX_FORMANTS;nformant++){
+ xml->beginbranch("FORMANT",nformant);
+ xml->addpar("freq",Pvowels[nvowel].formants[nformant].freq);
+ xml->addpar("amp",Pvowels[nvowel].formants[nformant].amp);
+ xml->addpar("q",Pvowels[nvowel].formants[nformant].q);
+ xml->endbranch();
+ };
+ xml->endbranch();
+ };
+ xml->addpar("sequencesize",Psequencesize);
+ xml->addpar("sequencestretch",Psequencestretch);
+ xml->addparbool("sequencereversed",Psequencereversed);
+ for (int nseq=0;nseq<FF_MAX_SEQUENCE;nseq++){
+ xml->beginbranch("SEQUENCEPOS",nseq);
+ xml->addpar("nvowel",Psequence[nseq].nvowel);
+ xml->endbranch();
+ };
+ xml->endbranch();
+ };
+};
+
+
+
diff --git a/src/Params/FilterParams.h b/src/Params/FilterParams.h
@@ -25,6 +25,7 @@
#include "../globals.h"
#include "../Misc/Buffer.h"
+#include "../Misc/XMLwrapper.h"
class FilterParams{
public:
@@ -32,12 +33,15 @@ class FilterParams{
~FilterParams();
void saveloadbuf(Buffer *buf);
+ void add2XML(XMLwrapper *xml);
+
+
REALTYPE getfreq();
REALTYPE getq();
REALTYPE getfreqtracking(REALTYPE notefreq);
REALTYPE getgain();
- unsigned char Pcategory;//Filter category (Analog/Formant)
+ unsigned char Pcategory;//Filter category (Analog/Formant/StVar)
unsigned char Ptype;// Filter type (for analog lpf,hpf,bpf..)
unsigned char Pfreq;// Frequency (64-central frequency)
unsigned char Pq; // Q parameters (resonance or bandwidth)
diff --git a/src/Params/LFOParams.C b/src/Params/LFOParams.C
@@ -92,3 +92,15 @@ void LFOParams::saveloadbuf(Buffer *buf){
};
};
+void LFOParams::add2XML(XMLwrapper *xml){
+ xml->addpar("freq",Pfreq);
+ xml->addpar("intensity",Pintensity);
+ xml->addpar("startphase",Pstartphase);
+ xml->addpar("LFOtype",PLFOtype);
+ xml->addpar("randomness",Prandomness);
+ xml->addpar("freqrand",Pfreqrand);
+ xml->addpar("delay",Pdelay);
+ xml->addparbool("continous",Pcontinous);
+};
+
+
diff --git a/src/Params/LFOParams.h b/src/Params/LFOParams.h
@@ -24,6 +24,8 @@
#define LFO_PARAMS_H
#include "../Misc/Buffer.h"
+#include "../Misc/XMLwrapper.h"
+
class LFOParams{
public:
@@ -32,18 +34,20 @@ class LFOParams{
void saveloadbuf(Buffer *buf);
+ void add2XML(XMLwrapper *xml);
+
/* Parametrii MIDI */
unsigned char Pfreq; // frequency
unsigned char Pintensity; // intensity
unsigned char Pstartphase;// start phase (0=random)
- unsigned char PLFOtype; // LFO typpe (sin,triangle,square,ramp,...)
+ unsigned char PLFOtype; // LFO type (sin,triangle,square,ramp,...)
unsigned char Prandomness;// randomness (0=off)
unsigned char Pfreqrand;// frequency randomness (0=off)
unsigned char Pdelay; // delay (0=off)
unsigned char Pcontinous; // 1 if LFO is continous
+
int fel;//what kind is the LFO (0 - frequency, 1 - amplitude, 2 - filter)
-
static int time;//is used by Pcontinous parameter
private:
};
diff --git a/src/Synth/Envelope.C b/src/Synth/Envelope.C
@@ -28,7 +28,7 @@ Envelope::Envelope(EnvelopeParams *envpars,REALTYPE basefreq){
envpoints=envpars->Penvpoints;
if (envpoints>MAX_ENVELOPE_POINTS) envpoints=MAX_ENVELOPE_POINTS;
envsustain=(envpars->Penvsustain==0)?-1:envpars->Penvsustain;
- forcedrelase=envpars->Pforcedrelase;
+ forcedrelase=envpars->Pforcedrelease;
envstretch=pow(440.0/basefreq,envpars->Penvstretch/64.0);
linearenvelope=envpars->Plinearenvelope;
diff --git a/src/Synth/Resonance.C b/src/Synth/Resonance.C
@@ -229,3 +229,23 @@ void Resonance::saveloadbuf(Buffer *buf){
};
};
+
+void Resonance::add2XML(XMLwrapper *xml){
+ xml->addparbool("enabled",Penabled);
+ if (Penabled==0) return;
+
+ xml->addpar("maxdb",PmaxdB);
+ xml->addpar("centerfreq",Pcenterfreq);
+ xml->addpar("octavesfreq",Poctavesfreq);
+ xml->addpar("gain",Pgain);
+ xml->addparbool("protectthefundamental",Pprotectthefundamental);
+ for (int i=0;i<N_RES_POINTS;i++){
+ xml->beginbranch("POINT",i);
+ xml->addpar("val",Prespoints[i]);
+ xml->endbranch();
+ };
+};
+
+
+
+
diff --git a/src/Synth/Resonance.h b/src/Synth/Resonance.h
@@ -24,6 +24,7 @@
#include "../globals.h"
#include "../Misc/Util.h"
+#include "../Misc/XMLwrapper.h"
#define N_RES_POINTS 256
@@ -36,7 +37,12 @@ class Resonance{
void smooth();
void interpolatepeaks(int type);
void randomize(int type);
+
void saveloadbuf(Buffer *buf);
+
+ void add2XML(XMLwrapper *xml);
+
+
REALTYPE getfreqpos(REALTYPE freq);
REALTYPE getfreqx(REALTYPE x);
REALTYPE getcenterfreq();
@@ -50,6 +56,7 @@ class Resonance{
unsigned char Pcenterfreq,Poctavesfreq; //the center frequency of the res. func., and the number of octaves
unsigned char Pgain; //how the signal is amplified
unsigned char Pprotectthefundamental; //the fundamental (1-st harmonic) is not damped, even it resonance function is low
+
//controllers
REALTYPE ctlcenter;//center frequency(relative)
REALTYPE ctlbw;//bandwidth(relative)
diff --git a/src/UI/EnvelopeUI.fl b/src/UI/EnvelopeUI.fl
@@ -281,9 +281,9 @@ freeedit->redraw();}
}
Fl_Check_Button {} {
label frcR
- callback {env->Pforcedrelase=(int)o->value();}
+ callback {env->Pforcedrelease=(int)o->value();}
tooltip {Forced Relase} xywh {410 165 40 15} down_box DOWN_BOX labelsize 11
- code0 {o->value(env->Pforcedrelase);}
+ code0 {o->value(env->Pforcedrelease);}
code1 {if (env->Pfreemode==0) o->hide();}
}
Fl_Dial {} {
@@ -362,9 +362,9 @@ freeedit->redraw();}
}
Fl_Check_Button {} {
label frcR
- callback {env->Pforcedrelase=(int)o->value();}
+ callback {env->Pforcedrelease=(int)o->value();}
tooltip {Forced Relase} xywh {180 35 20 15} down_box DOWN_BOX labelsize 11 align 6
- code0 {o->value(env->Pforcedrelase);}
+ code0 {o->value(env->Pforcedrelease);}
}
Fl_Dial {} {
label Stretch
@@ -437,9 +437,9 @@ freeedit->redraw();}
}
Fl_Check_Button {} {
label frcR
- callback {env->Pforcedrelase=(int)o->value();}
+ callback {env->Pforcedrelease=(int)o->value();}
tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 11 align 6
- code0 {o->value(env->Pforcedrelase);}
+ code0 {o->value(env->Pforcedrelease);}
}
}
Fl_Button {} {
@@ -515,9 +515,9 @@ freeedit->redraw();}
}
Fl_Check_Button {} {
label frcR
- callback {env->Pforcedrelase=(int)o->value();}
+ callback {env->Pforcedrelease=(int)o->value();}
tooltip {Forced Relase} xywh {250 30 15 20} down_box DOWN_BOX labelsize 11 align 6
- code0 {o->value(env->Pforcedrelase);}
+ code0 {o->value(env->Pforcedrelease);}
}
Fl_Button {} {
label Edit
@@ -577,9 +577,9 @@ freeedit->redraw();}
}
Fl_Check_Button {} {
label frcR
- callback {env->Pforcedrelase=(int)o->value();}
+ callback {env->Pforcedrelease=(int)o->value();}
tooltip {Forced release} xywh {180 25 15 25} down_box DOWN_BOX labelsize 11 align 6
- code0 {o->value(env->Pforcedrelase);}
+ code0 {o->value(env->Pforcedrelease);}
}
}
Fl_Button {} {