|
- /*
- 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 version 2 of the GNU General Public License
- as published by the Free Software Foundation.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License (version 2 or later) for more details.
-
- You should have received a copy of the GNU General Public License (version 2)
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- */
-
- #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, PITCH_MOD
- };
-
- /*****************************************************************/
- /* GLOBAL PARAMETERS */
- /*****************************************************************/
-
- struct ADnoteGlobalParam {
- ADnoteGlobalParam();
- ~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;
-
- static const rtosc::Ports &ports;
- };
-
-
-
- /***********************************************************/
- /* VOICE PARAMETERS */
- /***********************************************************/
- struct ADnoteVoiceParam {
- 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);
- 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;
-
- /* 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;
-
- /* LFO Envelope */
- unsigned char PFilterLfoEnabled;
- LFOParams *FilterLfo;
-
- /****************************
- * 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;
-
- /* Frequency Envelope of the Modullator */
- unsigned char PFMFreqEnvelopeEnabled;
- EnvelopeParams *FMFreqEnvelope;
-
- /* Frequency Envelope of the Modullator */
- unsigned char PFMAmpEnvelopeEnabled;
- EnvelopeParams *FMAmpEnvelope;
-
- unsigned char *GlobalPDetuneType;
-
- static const rtosc::Ports &ports;
- };
-
- class ADnoteParameters:public PresetsArray
- {
- public:
- ADnoteParameters(const SYNTH_T &synth, FFTwrapper *fft_);
- ~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);
- void KillVoice(int nvoice);
- FFTwrapper *fft;
- };
-
- #endif
|