/* ZynAddSubFX - a software synthesizer SUBnoteParameters.h - Parameters for SUBnote (SUBsynth) 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 SUB_NOTE_PARAMETERS_H #define SUB_NOTE_PARAMETERS_H #include #include "../globals.h" #include "Presets.h" class SUBnoteParameters:public Presets { public: SUBnoteParameters(const AbsTime *time_ = nullptr); ~SUBnoteParameters(); //Identify active harmonic positions // - pos : int[MAX_SUB_HARMONICS] offsets of active harmonics // - harmonics : number of active harmonics void activeHarmonics(int *pos, int &harmonics) const; static float convertBandwidth(int bw, int stages, float freq, int scale, int relbw); static float convertHarmonicMag(int mag, int type); void add2XML(XMLwrapper& xml); void defaults(); void getfromXML(XMLwrapper& xml); void updateFrequencyMultipliers(void); void paste(SUBnoteParameters &sub); //Parameters //AMPLITUDE PARAMETERS unsigned char Pstereo; //0 for mono,1 for stereo unsigned char PVolume; unsigned char PPanning; unsigned char PAmpVelocityScaleFunction; EnvelopeParams *AmpEnvelope; //Frequency Parameters unsigned short int PDetune; unsigned short int PCoarseDetune; unsigned char PDetuneType; unsigned char PFreqEnvelopeEnabled; EnvelopeParams *FreqEnvelope; unsigned char PBandWidthEnvelopeEnabled; EnvelopeParams *BandWidthEnvelope; unsigned char PBendAdjust; unsigned char POffsetHz; //Filter Parameters (Global) unsigned char PGlobalFilterEnabled; FilterParams *GlobalFilter; unsigned char PGlobalFilterVelocityScale; unsigned char PGlobalFilterVelocityScaleFunction; EnvelopeParams *GlobalFilterEnvelope; //Other 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; // Overtone spread parameters struct { unsigned char type; unsigned char par1; unsigned char par2; unsigned char par3; } POvertoneSpread; float POvertoneFreqMult[MAX_SUB_HARMONICS]; //how many times the filters are applied unsigned char Pnumstages; //bandwidth unsigned char Pbandwidth; //How the magnitudes are computed (0=linear,1=-60dB,2=-60dB) unsigned char Phmagtype; //Magnitudes unsigned char Phmag[MAX_SUB_HARMONICS]; //Relative BandWidth ("64"=1.0f) unsigned char Phrelbw[MAX_SUB_HARMONICS]; //how much the bandwidth is increased according to lower/higher frequency; 64-default unsigned char Pbwscale; //how the harmonics start("0"=0,"1"=random,"2"=1) unsigned char Pstart; const AbsTime *time; int64_t last_update_timestamp; static const rtosc::Ports &ports; }; #endif