|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- /*
- ZynAddSubFX - a software synthesizer
-
- ADnoteParameters.h - Parameters for ADnote (ADsynth)
- Copyright (C) 2002-2005 Nasca Octavian Paul
- Author: Nasca Octavian Paul
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
- */
-
- #ifndef AD_NOTE_PARAMETERS_H
- #define AD_NOTE_PARAMETERS_H
-
- #include "../globals.h"
- #include "PresetsArray.h"
-
- enum FMTYPE {
- NONE, MORPH, RING_MOD, PHASE_MOD, FREQ_MOD, PW_MOD
- };
-
- /*****************************************************************/
- /* GLOBAL PARAMETERS */
- /*****************************************************************/
-
- struct ADnoteGlobalParam {
- ADnoteGlobalParam(const AbsTime* time_ = nullptr);
- ~ADnoteGlobalParam();
- void defaults();
- void add2XML(XMLwrapper& xml);
- void getfromXML(XMLwrapper& xml);
- void paste(ADnoteGlobalParam &a);
- /* The instrument type - MONO/STEREO
- If the mode is MONO, the panning of voices are not used
- Stereo=1, Mono=0. */
-
- unsigned char PStereo;
-
-
- /******************************************
- * FREQUENCY GLOBAL PARAMETERS *
- ******************************************/
- unsigned short int PDetune; //fine detune
- unsigned short int PCoarseDetune; //coarse detune+octave
- unsigned char PDetuneType; //detune type
-
- unsigned char PBandwidth; //how much the relative fine detunes of the voices are changed
-
- EnvelopeParams *FreqEnvelope; //Frequency Envelope
-
- LFOParams *FreqLfo; //Frequency LFO
-
- /********************************************
- * AMPLITUDE GLOBAL PARAMETERS *
- ********************************************/
-
- /* Panning - 0 - random
- 1 - left
- 64 - center
- 127 - right */
- unsigned char PPanning;
-
- unsigned char PVolume;
-
- unsigned char PAmpVelocityScaleFunction;
-
- EnvelopeParams *AmpEnvelope;
-
- LFOParams *AmpLfo;
-
- /* Adjustment factor for anti-pop fadein */
- unsigned char Fadein_adjustment;
-
- unsigned char PPunchStrength, PPunchTime, PPunchStretch,
- PPunchVelocitySensing;
-
- /******************************************
- * FILTER GLOBAL PARAMETERS *
- ******************************************/
- FilterParams *GlobalFilter;
-
- // filter velocity sensing
- unsigned char PFilterVelocityScale;
-
- // filter velocity sensing
- unsigned char PFilterVelocityScaleFunction;
-
- EnvelopeParams *FilterEnvelope;
-
- LFOParams *FilterLfo;
-
- // RESONANCE
- Resonance *Reson;
-
- //how the randomness is applied to the harmonics on more voices using the same oscillator
- unsigned char Hrandgrouping;
-
- const AbsTime *time;
- int64_t last_update_timestamp;
-
- static const rtosc::Ports &ports;
- };
-
-
-
- /***********************************************************/
- /* VOICE PARAMETERS */
- /***********************************************************/
- struct ADnoteVoiceParam {
- ADnoteVoiceParam() : time(nullptr), last_update_timestamp(0) { };
- void getfromXML(XMLwrapper& xml, unsigned nvoice);
- void add2XML(XMLwrapper& xml, bool fmoscilused);
- void paste(ADnoteVoiceParam &p);
- void defaults(void);
- void enable(const SYNTH_T &synth, FFTwrapper *fft, Resonance *Reson,
- const AbsTime *time);
- void kill(void);
- float getUnisonFrequencySpreadCents(void) const;
- /** If the voice is enabled */
- unsigned char Enabled;
-
- /** How many subvoices are used in this voice */
- unsigned char Unison_size;
-
- /** How subvoices are spread */
- unsigned char Unison_frequency_spread;
-
- /** How much phase randomization */
- unsigned char Unison_phase_randomness;
-
- /** Stereo spread of the subvoices*/
- unsigned char Unison_stereo_spread;
-
- /** Vibratto of the subvoices (which makes the unison more "natural")*/
- unsigned char Unison_vibratto;
-
- /** Medium speed of the vibratto of the subvoices*/
- unsigned char Unison_vibratto_speed;
-
- /** Unison invert phase */
- unsigned char Unison_invert_phase; //0=none,1=random,2=50%,3=33%,4=25%
-
- /** Type of the voice (0=Sound,1=Noise)*/
- unsigned char Type;
-
- /** Voice Delay */
- unsigned char PDelay;
-
- /** If the resonance is enabled for this voice */
- unsigned char Presonance;
-
- // What external oscil should I use, -1 for internal OscilSmp&FMSmp
- short int Pextoscil, PextFMoscil;
- // it is not allowed that the externoscil,externFMoscil => current voice
-
- // oscillator phases
- unsigned char Poscilphase, PFMoscilphase;
-
- // filter bypass
- unsigned char Pfilterbypass;
-
- /** Voice oscillator */
- OscilGen *OscilSmp;
-
- /**********************************
- * FREQUENCY PARAMETERS *
- **********************************/
-
- /** If the base frequency is fixed to 440 Hz*/
- unsigned char Pfixedfreq;
-
- /* Equal temperate (this is used only if the Pfixedfreq is enabled)
- If this parameter is 0, the frequency is fixed (to 440 Hz);
- if this parameter is 64, 1 MIDI halftone -> 1 frequency halftone */
- unsigned char PfixedfreqET;
-
- /** Fine detune */
- unsigned short int PDetune;
-
- /** Coarse detune + octave */
- unsigned short int PCoarseDetune;
-
- /** Detune type */
- unsigned char PDetuneType;
-
- /** Pitch bend adjustment */
- unsigned char PBendAdjust;
-
- /** Pitch offset Hz */
- unsigned char POffsetHz;
-
- /* Frequency Envelope */
- unsigned char PFreqEnvelopeEnabled;
- EnvelopeParams *FreqEnvelope;
-
- /* Frequency LFO */
- unsigned char PFreqLfoEnabled;
- LFOParams *FreqLfo;
-
-
- /***************************
- * AMPLITUDE PARAMETERS *
- ***************************/
-
- /* Panning 0 - random
- 1 - left
- 64 - center
- 127 - right
- The Panning is ignored if the instrument is mono */
- unsigned char PPanning;
-
- /* Voice Volume */
- unsigned char PVolume;
-
- /* If the Volume negative */
- unsigned char PVolumeminus;
-
- /* Velocity sensing */
- unsigned char PAmpVelocityScaleFunction;
-
- /* Amplitude Envelope */
- unsigned char PAmpEnvelopeEnabled;
- EnvelopeParams *AmpEnvelope;
-
- /* Amplitude LFO */
- unsigned char PAmpLfoEnabled;
- LFOParams *AmpLfo;
-
-
-
- /*************************
- * FILTER PARAMETERS *
- *************************/
-
- /* Voice Filter */
- unsigned char PFilterEnabled;
- FilterParams *VoiceFilter;
-
- /* Filter Envelope */
- unsigned char PFilterEnvelopeEnabled;
- EnvelopeParams *FilterEnvelope;
-
- /* Filter LFO */
- unsigned char PFilterLfoEnabled;
- LFOParams *FilterLfo;
-
- // filter velocity sensing
- unsigned char PFilterVelocityScale;
-
- // filter velocity sensing
- unsigned char PFilterVelocityScaleFunction;
-
- /****************************
- * MODULLATOR PARAMETERS *
- ****************************/
-
- /* Modullator Parameters (0=off,1=Morph,2=RM,3=PM,4=FM.. */
- unsigned char PFMEnabled;
-
- /* Voice that I use as modullator instead of FMSmp.
- It is -1 if I use FMSmp(default).
- It maynot be equal or bigger than current voice */
- short int PFMVoice;
-
- /* Modullator oscillator */
- OscilGen *FMSmp;
-
- /* Modullator Volume */
- unsigned char PFMVolume;
-
- /* Modullator damping at higher frequencies */
- unsigned char PFMVolumeDamp;
-
- /* Modullator Velocity Sensing */
- unsigned char PFMVelocityScaleFunction;
-
- /* Fine Detune of the Modullator*/
- unsigned short int PFMDetune;
-
- /* Coarse Detune of the Modullator */
- unsigned short int PFMCoarseDetune;
-
- /* The detune type */
- unsigned char PFMDetuneType;
-
- /* FM base freq fixed at 440Hz */
- unsigned char PFMFixedFreq;
-
- /* Frequency Envelope of the Modullator */
- unsigned char PFMFreqEnvelopeEnabled;
- EnvelopeParams *FMFreqEnvelope;
-
- /* Frequency Envelope of the Modullator */
- unsigned char PFMAmpEnvelopeEnabled;
- EnvelopeParams *FMAmpEnvelope;
-
- unsigned char *GlobalPDetuneType;
-
- const AbsTime *time;
- int64_t last_update_timestamp;
-
- static const rtosc::Ports &ports;
- };
-
- class ADnoteParameters:public PresetsArray
- {
- public:
- ADnoteParameters(const SYNTH_T &synth, FFTwrapper *fft_,
- const AbsTime *time_ = nullptr);
- ~ADnoteParameters();
-
- ADnoteGlobalParam GlobalPar;
- ADnoteVoiceParam VoicePar[NUM_VOICES];
-
- void defaults();
- void add2XML(XMLwrapper& xml);
- void getfromXML(XMLwrapper& xml);
-
- void paste(ADnoteParameters &a);
- void pasteArray(ADnoteParameters &a, int section);
-
-
- float getBandwidthDetuneMultiplier() const;
- float getUnisonFrequencySpreadCents(int nvoice) const;
- static const rtosc::Ports &ports;
- void defaults(int n); //n is the nvoice
- void add2XMLsection(XMLwrapper& xml, int n);
- void getfromXMLsection(XMLwrapper& xml, int n);
- private:
-
- void EnableVoice(const SYNTH_T &synth, int nvoice, const AbsTime* time);
- void KillVoice(int nvoice);
- FFTwrapper *fft;
-
- const AbsTime *time;
- int64_t last_update_timestamp;
- };
-
- #endif
|