/* ZynAddSubFX - a software synthesizer PADnoteParameters.h - Parameters for PADnote (PADsynth) 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) 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 PAD_NOTE_PARAMETERS_H #define PAD_NOTE_PARAMETERS_H #include "../Misc/XMLwrapper.h" #include "../DSP/FFTwrapper.h" #include "../globals.h" #include "../Synth/OscilGen.h" #include "../Synth/Resonance.h" #include "../Misc/Util.h" #include "EnvelopeParams.h" #include "LFOParams.h" #include "FilterParams.h" #include "Presets.h" class Master; class PADnoteParameters:public Presets{ public: PADnoteParameters(FFTwrapper *fft_,Master* master); ~PADnoteParameters(); void defaults(); void add2XML(XMLwrapper *xml); void getfromXML(XMLwrapper *xml); //returns a value between 0.0-1.0 that represents the estimation perceived bandwidth REALTYPE getprofile(REALTYPE *smp,int size); //parameters //the mode: 0 - bandwidth, 1 - discrete (bandwidth=0), 2 - continous //the harmonic profile is used only on mode 0 unsigned char Pmode; //Harmonic profile (the frequency distribution of a single harmonic) struct { struct{//base function unsigned char type; unsigned char par1; }base; unsigned char freqmult;//frequency multiplier of the distribution struct{//the modulator of the distribution unsigned char par1; unsigned char freq; }modulator; unsigned char width;//the width of the resulting function after the modulation struct{//the amplitude multiplier of the harmonic profile unsigned char mode; unsigned char type; unsigned char par1; unsigned char par2; }amp; bool autoscale;//if the scale of the harmonic profile is computed automaticaly unsigned char onehalf;//what part of the base function is used to make the distribution }Php; unsigned int Pbandwidth;//the values are from 0 to 1000 unsigned char Pbwscale;//how the bandwidth is increased according to the harmonic's frequency struct{//where are positioned the harmonics (on integer multimplier or different places) unsigned char type; unsigned char par1,par2,par3;//0..255 }Phrpos; struct {//quality of the samples (how many samples, the length of them,etc.) unsigned char samplesize; unsigned char basenote,oct,smpoct; } Pquality; //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; unsigned short int PDetune;//fine detune unsigned short int PCoarseDetune;//coarse detune+octave unsigned char PDetuneType;//detune type EnvelopeParams *FreqEnvelope; //Frequency Envelope LFOParams *FreqLfo;//Frequency LFO //Amplitude parameters unsigned char PStereo; /* Panning - 0 - random 1 - left 64 - center 127 - right */ unsigned char PPanning; unsigned char PVolume; unsigned char PAmpVelocityScaleFunction; EnvelopeParams *AmpEnvelope; LFOParams *AmpLfo; unsigned char PPunchStrength,PPunchTime,PPunchStretch,PPunchVelocitySensing; //Filter Parameters FilterParams *GlobalFilter; // filter velocity sensing unsigned char PFilterVelocityScale; // filter velocity sensing unsigned char PFilterVelocityScaleFunction; EnvelopeParams *FilterEnvelope; LFOParams *FilterLfo; REALTYPE setPbandwidth(int Pbandwidth);//returns the BandWidth in cents REALTYPE getNhr(int n);//gets the n-th overtone position relatively to N harmonic void applyparameters(bool lockmutex); OscilGen *oscilgen; Resonance *resonance; struct{ int size; REALTYPE basefreq; REALTYPE *smp; }sample[PAD_MAX_SAMPLES],newsample; private: void generatespectrum_bandwidthMode(REALTYPE *spectrum, int size,REALTYPE basefreq,REALTYPE *profile,int profilesize,REALTYPE bwadjust); void generatespectrum_otherModes(REALTYPE *spectrum, int size,REALTYPE basefreq,REALTYPE *profile,int profilesize,REALTYPE bwadjust); void deletesamples(); void deletesample(int n); FFTwrapper *fft; Master* master; }; #endif