diff options
author | Robert Jonsson <spamatica@gmail.com> | 2011-09-15 12:14:55 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2011-09-15 12:14:55 +0000 |
commit | b0546e5e7f7044019892543c6c82029db8d564a7 (patch) | |
tree | 1b96a6260900f3fbf3513fb48a5a72aa89052dc8 /attic/muse2-oom/muse2/synti/deicsonze/deicsonze.h | |
parent | 583c73d1a07154d3d2672d65d8cce6495f490454 (diff) |
moved attic to a branch of it's own
Diffstat (limited to 'attic/muse2-oom/muse2/synti/deicsonze/deicsonze.h')
-rw-r--r-- | attic/muse2-oom/muse2/synti/deicsonze/deicsonze.h | 604 |
1 files changed, 0 insertions, 604 deletions
diff --git a/attic/muse2-oom/muse2/synti/deicsonze/deicsonze.h b/attic/muse2-oom/muse2/synti/deicsonze/deicsonze.h deleted file mode 100644 index 94da0865..00000000 --- a/attic/muse2-oom/muse2/synti/deicsonze/deicsonze.h +++ /dev/null @@ -1,604 +0,0 @@ -//=========================================================================== -// -// DeicsOnze an emulator of the YAMAHA DX11 synthesizer -// -// Version 0.5.5 -// -// -// -// -// Copyright (c) 2004-2006 Nil Geisweiller -// -// -// -// 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. -// -// 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 for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -// 02111-1307, USA or point your web browser to http://www.gnu.org. -//=========================================================================== - - -#ifndef __DEICSONZE_H -#define __DEICSONZE_H - -#include <list> - -#include "deicsonzepreset.h" -#include "deicsonzegui.h" -#include "deicsonzeplugin.h" -#include "deicsonzefilter.h" -#include "libsynti/mess.h" -#include "plugin.h" - -#define DEICSONZESTR "deicsonze" - -#define MAXPITCHBENDVALUE 8191 - -#define RESOLUTION 96000 - -#define MAXFXBUFFERSIZE 48000 -#define NBRFXINPUTS 2 -#define NBRFXOUTPUTS 2 - -#define NBRCTRLS 127 - -#define NBRPRESETS 128 - -#define LOWERNOTEFREQ 8.176 - -#define DB0LEVEL 90 - -#define LENGTHNAME 20 -#define LENGTHCATEGORY 20 -#define LENGTHSUBCATEGORY 20 - -#define MAXVELO 127 -#define MAXVOLUME 100.0 -#define MAXSTRLENGTHINITSETPATH 256 -#define MAXSTRLENGTHBACKGROUNDPIXPATH 256 -#define MAXSTRLENGTHFXLIB 256 -#define MAXSTRLENGTHFXLABEL 256 - -#define DB_MIN 25.0 - -//coef determined by ear to sound like the YAMAHA DX11 -#define COEFFEEDBACK 0.3 -#define COEFPLFO(x) (x==0?0.0:(x==1?0.06:(x==2?0.12:(x==3?0.25:(x==4?0.5:(x==5?0.9:(x==6?3.9:7.9))))))) //return pitch amplitude with respect to sensitivity pitch -#define COEFALFO(x) (x==0?0.0:(x==1?0.4:(x==2?0.9:1.0))) -#define MAX(x,y) (x<y?y:x) -#define COEFLEVEL 1.0//19.0 -#define COEFMAXATTACK 7.5 -#define COEFERRDECSUS 0.01 //for the transition between DECAY and SUSTAIN -#define COEFERRSUSREL 0.001 //from SUSTAIN or RELEASE until no sound -//#define ERRPORTA 0.001 //dectection to stop portamento -#define COEFPORTA 0.01 //adjusted such that 10 second/octave with max porta -#define COEFPITCHENV 0.00000025 //adjust according to a real DX11....??? -#define COEFDECAY 1.0 -#define COEFSUSTAIN 0.2 -#define COEFRELEASE 1.0 -#define COEFDETUNE 0.008 -#define COEFLEVELSCALE 0.0005 -#define COEFGATTACK 0.9 -#define COEFGRELEASE 0.9 -#define LEVELSCALENOTE 24.0 - -#define NBRWAVES 8 //number wave forms, do not change -#define NBRBANKPRESETS 32 -#define MAXNBRVOICES 64 -#define NBRCHANNELS 16 - -#define SYSEX_INIT_DATA 1 -#define SYSEX_INIT_DATA_VERSION 1 -#define SAVEINITLENGTH 2 - -#define DEICSONZECONFIGURATIONSTR "deicsOnzeConfiguation" -#define SYSEX_MASTERVOL 4 -#define MASTERVOLSTR "MasterVolume" -#define MAXMASTERVOLUME 255 -#define INITMASTERVOL 192 -#define SYSEX_QUALITY 5 -#define QUALITYSTR "Quality" -#define HIGHSTR "High" -#define MIDDLESTR "Middle" -#define LOWSTR "Low" -#define ULTRALOWSTR "UltraLow" -#define SYSEX_FONTSIZE 6 -#define FONTSIZESTR "fontSize" -#define SYSEX_SAVECONFIG 7 -#define SAVECONFIGSTR "SaveConfig" -#define SYSEX_SAVEONLYUSED 8 -#define SAVEONLYUSEDSTR "SaveOnlyUsed" -#define YESSTRDEI "yes" -#define NOSTRDEI "no" -#define SYSEX_LOADSET 10 -#define SYSEX_ISINITSET 12 -#define ISINITSETSTR "IsInitSet" -#define SYSEX_INITSETPATH 13 -#define INITSETPATHSTR "InitSetPath" -#define SYSEX_ISBACKGROUNDPIX 14 -#define ISBACKGROUNDPIXSTR "IsBackgroundPix" -#define SYSEX_BACKGROUNDPIXPATH 15 -#define BACKGROUNDPIXPATHSTR "backgroundPixPath" -#define SYSEX_COLORGUI 20 -#define TEXTCOLORSTR "TextColor" -#define BACKGROUNDCOLORSTR "BackgroundColor" -#define EDITTEXTCOLORSTR "EditTextColor" -#define EDITBACKGROUNDCOLORSTR "EditBackgroundColor" -#define COLORSYSEXLENGTH 12 -#define SYSEX_UPDATESETGUI 25 -#define SYSEX_PANIC 30 -#define SYSEX_CHORUSACTIV 40 -#define SYSEX_CHORUSPARAM 41 -#define SYSEX_REVERBACTIV 60 -#define SYSEX_REVERBPARAM 61 -#define SYSEX_CHORUSRETURN 80 -#define SYSEX_REVERBRETURN 81 -#define MAXFXRETURN 255 -#define INITFXRETURN 192 -#define SYSEX_SELECTREVERB 82 -#define SYSEX_SELECTCHORUS 83 -#define SYSEX_BUILDGUIREVERB 84 -#define SYSEX_BUILDGUICHORUS 85 -#define SYSEX_FILTER 90 -#define FILTERSTR "Filter" -#define SYSEX_DELAYACTIV 91 -#define SYSEX_DELAYRETURN 92 -#define SYSEX_DELAYBPM 93 -#define SYSEX_DELAYBEATRATIO 94 -#define SYSEX_DELAYFEEDBACK 95 -#define SYSEX_DELAYLFOFREQ 96 -#define SYSEX_DELAYLFODEPTH 97 - -//REVERB PARAMETERS - -#define DEFAULTVOL 200 - -enum { - NUM_MASTERVOL = SAVEINITLENGTH, - NUM_CHANNEL_ENABLE, - NUM_CHANNEL_VOL = NUM_CHANNEL_ENABLE + NBRCHANNELS + 1, - NUM_CHANNEL_PAN = NUM_CHANNEL_VOL + NBRCHANNELS + 1, - NUM_CHANNEL_BRIGHTNESS = NUM_CHANNEL_PAN + NBRCHANNELS + 1, - NUM_CHANNEL_MODULATION = NUM_CHANNEL_BRIGHTNESS + 2*NBRCHANNELS +1, - NUM_CHANNEL_DETUNE = NUM_CHANNEL_MODULATION + NBRCHANNELS + 1, - NUM_CHANNEL_ATTACK = NUM_CHANNEL_DETUNE + NBRCHANNELS + 1, - NUM_CHANNEL_RELEASE = NUM_CHANNEL_ATTACK + NBRCHANNELS + 1, - NUM_CHANNEL_REVERB = NUM_CHANNEL_RELEASE + NBRCHANNELS + 1, - NUM_CHANNEL_CHORUS = NUM_CHANNEL_REVERB + NBRCHANNELS + 1, - NUM_CHANNEL_DELAY = NUM_CHANNEL_CHORUS + NBRCHANNELS + 1, - NUM_CURRENTPROG = NUM_CHANNEL_DELAY + NBRCHANNELS + 1, - NUM_CURRENTLBANK = NUM_CURRENTPROG + NBRCHANNELS + 1, - NUM_CURRENTHBANK = NUM_CURRENTLBANK + NBRCHANNELS + 1, - NUM_NBRVOICES = NUM_CURRENTHBANK + NBRCHANNELS + 1, - NUM_SAVEONLYUSED = NUM_NBRVOICES + NBRCHANNELS + 1, - NUM_SAVECONFIG, - NUM_RED_TEXT, - NUM_GREEN_TEXT, - NUM_BLUE_TEXT, - NUM_RED_BACKGROUND, - NUM_GREEN_BACKGROUND, - NUM_BLUE_BACKGROUND, - NUM_RED_EDITTEXT, - NUM_GREEN_EDITTEXT, - NUM_BLUE_EDITTEXT, - NUM_RED_EDITBACKGROUND, - NUM_GREEN_EDITBACKGROUND, - NUM_BLUE_EDITBACKGROUND, - NUM_QUALITY, - NUM_FILTER, - NUM_FONTSIZE, - NUM_ISINITSET, - NUM_INITSETPATH, - NUM_ISBACKGROUNDPIX = NUM_INITSETPATH + MAXSTRLENGTHINITSETPATH + 1, - NUM_BACKGROUNDPIXPATH, - NUM_IS_REVERB_ON = NUM_BACKGROUNDPIXPATH + MAXSTRLENGTHBACKGROUNDPIXPATH + 1, - NUM_REVERB_RETURN, - NUM_REVERB_PARAM_NBR, - NUM_REVERB_LIB, - NUM_REVERB_LABEL = NUM_REVERB_LIB + MAXSTRLENGTHFXLIB + 1, - NUM_IS_CHORUS_ON = NUM_REVERB_LABEL + MAXSTRLENGTHFXLABEL + 1, - NUM_CHORUS_RETURN, - NUM_CHORUS_PARAM_NBR, - NUM_CHORUS_LIB, - NUM_CHORUS_LABEL = NUM_CHORUS_LIB + MAXSTRLENGTHFXLIB + 1, - NUM_IS_DELAY_ON = NUM_CHORUS_LABEL + MAXSTRLENGTHFXLABEL + 1, - NUM_DELAY_RETURN, - NUM_DELAY_BPM, - NUM_DELAY_BEATRATIO = NUM_DELAY_BPM + sizeof(float), - NUM_DELAY_FEEDBACK = NUM_DELAY_BEATRATIO + sizeof(float), - NUM_DELAY_LFO_FREQ = NUM_DELAY_FEEDBACK + sizeof(float), - NUM_DELAY_LFO_DEPTH = NUM_DELAY_LFO_FREQ + sizeof(float), - NUM_CONFIGLENGTH = NUM_DELAY_LFO_DEPTH + sizeof(float) -}; - -class DeicsOnzeGui; -class DeicsOnzePlugin; - -//--------------------------------------------------------- -// outLevel2Amp, Amp for amplitude //between 0.0 and 2.0 or more -// 100->2.0, 90->1.0, 80->0.5 ... -//--------------------------------------------------------- -inline double outLevel2Amp(int ol); - -//--------------------------------------------------------- -// level2amp, -// 255->0dB->1.0, 0->-27dB->0 -//--------------------------------------------------------- -inline double level2amp(int l); - -//--------------------------------------------------------- -// amp2level -// 1.0->0dB->255, 0->-27dB->0 -//--------------------------------------------------------- -inline int amp2level(double amp); - -//--------------------------------------------------------- -// amp2lowlevel -// 1.0->0dB->127, 0->-27dB->0 -//--------------------------------------------------------- -inline int amp2lowlevel(double amp); - -//--------------------------------------------------------- -// lowlevel2amp, -// 127->0dB->1.0, 0->-27dB->0 -//--------------------------------------------------------- -inline double lowlevel2amp(int l); - -//--------------------------------------------------------- -// envAR2s -// return the time in second of the ATTACK duration -//--------------------------------------------------------- -inline double envAR2s(int ar); - -//--------------------------------------------------------- -// coefAttack -// convert the attack value to a coef for envInct -//--------------------------------------------------------- -inline double coefAttack(unsigned char attack); - -//--------------------------------------------------------- -// envRR2coef -// return the coefficient for the exponential decrease -// with respect to rr and sampleRate, sr -//--------------------------------------------------------- -inline double envRR2coef(int rr, double sr, unsigned char release); - -//-------------------------------------------------------- -// DeicsOnzeCtrl -//-------------------------------------------------------- -struct DeicsOnzeCtlr -{ - std::string name; - int num; - int min, max; -}; - -//--------------------------------------------------------- -// EnvState -//--------------------------------------------------------- - -enum EnvState{ - ATTACK, - DECAY, - SUSTAIN, - RELEASE, - OFF -}; - -//--------------------------------------------------------- -// OpVoice -//--------------------------------------------------------- - -struct OpVoice { - double index; - double inct; - double targetInct; //used if portamento - double amp; //between 0 and 1 - double ampVeloNote; //keeps the ratio amplitude from velo2AmpR and note2Amp - //in order to change independently the output level - //after pressing the note - EnvState envState; - double envIndex; - double envInct; - double envLevel; - double coefVLevel; -}; - -//--------------------------------------------------------- -// PitchEnvState -//--------------------------------------------------------- -enum PitchEnvState{ - PHASE1, - PHASE2, - RELEASE_PE, - OFF_PE -}; - -//--------------------------------------------------------- -// Voice -//--------------------------------------------------------- - -struct Voice { - bool hasAttractor;//true iff the voice has an attractor (portamento occuring) - double attractor; //contains some coeficent for portamento TODO - PitchEnvState pitchEnvState; - double pitchEnvCoefInct; - double pitchEnvCoefInctPhase1; - double pitchEnvCoefInctPhase2; - double pitchEnvCoefInctPhase3; - double pitchEnvCoefInctRelease; - double pitchEnvCoefInctInct; - bool isOn; - bool keyOn; - bool isSustained; - int pitch; //number of the note - double volume; - OpVoice op[NBROP]; - float sampleFeedback; -}; - -//--------------------------------------------------------- -// Channel -//--------------------------------------------------------- -struct Channel { - bool isEnable; - float ampLeft; - float ampRight; - int volume; //0 to 255 - int pan; //TODO -63 +64 or -127 +128 - int modulation;//0 to 127 - int detune;//-31 to 31 - int brightness; //0 to 4095 - int attack; //0 to 127 - int release; //0 to 127 - float feedbackAmp; - float lfoFreq; - float lfoPitch; - float lfoMaxCoefInct; - float lfoCoefInct; - float lfoCoefInctInct; - unsigned int lfoIndex; - unsigned int lfoMaxIndex; - float lfoMaxAmp; - float lfoMaxDAmp; - float lfoAmp; - float lfoCoefAmp; - double lfoDelayIndex; - double lfoDelayInct; - double lfoDelayMaxIndex; - bool delayPassed; - bool sustain; - double pitchBendCoef;//speed coef to read the sample - unsigned char nbrVoices; - Voice voices[MAXNBRVOICES]; - double lastInc[NBROP]; - std::list<int> lastVoiceKeyOn; //stack of the voice number - int lastVoiceKeyOff; - bool isLastNote; - //FX - float chorusAmount; //between 0.0 and 1.0 - float reverbAmount; //between 0.0 and 1.0 - float delayAmount; //between 0.0 and 1.0 -}; - -//--------------------------------------------------------- -// Global -//--------------------------------------------------------- -enum Quality { - high, - middle, - low, - ultralow -}; - -struct Global { - float masterVolume; - Quality quality; //high, middle, low - int qualityCounter; //counter to skip some sample depending on quality - int qualityCounterTop; //number of sample - 1 to skip - double deiSampleRate; //depending on quality deicsOnze sample rate varies - bool filter; //low passe filter used when the sampling is low - int fontSize; - float lastLeftSample; - float lastRightSample; - float lastInputLeftChorusSample; - float lastInputRightChorusSample; - float lastInputLeftReverbSample; - float lastInputRightReverbSample; - float lastInputLeftDelaySample; - float lastInputRightDelaySample; - Channel channel[NBRCHANNELS]; - bool isChorusActivated; - float chorusReturn; - bool isReverbActivated; - float reverbReturn; - bool isDelayActivated; - float delayReturn; -}; - -//--------------------------------------------------------- -// DeicsOnze : DX11 emulator -//--------------------------------------------------------- - -class DeicsOnze : public Mess { - DeicsOnzeGui* _gui; - - static int useCount; - static float waveTable[NBRWAVES][RESOLUTION]; - - private: - void parseInitData(int length, const unsigned char* data); - void loadConfiguration(QString fileName); - - public: - float** tempInputChorus; - float** tempOutputChorus; - float** tempInputReverb; - float** tempOutputReverb; - float** tempInputDelay; - float** tempOutputDelay; - - float* getSinusWaveTable(); - - int nbrCtrl; - - QString _initSetPath; - bool _isInitSet; - QString _backgroundPixPath; - bool _isBackgroundPix; - bool _saveOnlyUsed; - bool _saveConfig; - DeicsOnzeCtlr _ctrl[NBRCTRLS]; - Global _global; - Preset* _preset[NBRCHANNELS]; - Preset* _initialPreset; - - //FX - PluginI* _pluginIReverb; - PluginI* _pluginIChorus; - PluginI* _pluginIDelay; - - void initPluginReverb(Plugin*); - void initPluginChorus(Plugin*); - void initPluginDelay(Plugin*); - - void setReverbParam(int i, double val); - double getReverbParam(int i) const; - void setChorusParam(int i, double val); - double getChorusParam(int i) const; - void setDelayBPM(float val); - void setDelayBeatRatio(float val); - void setDelayFeedback(float val); - void setDelayLFOFreq(float val); - void setDelayLFODepth(float val); - void setDelayDryWet(float val); - float getDelayBPM() const; - float getDelayBeatRatio() const; - float getDelayFeedback() const; - float getDelayLFOFreq() const; - float getDelayLFODepth() const; - - //Filter - LowFilter* _dryFilter; - LowFilter* _chorusFilter; - LowFilter* _reverbFilter; - LowFilter* _delayFilter; - - mutable MidiPatch _patch; - mutable int _numPatchProg; //used by getPatchInfo - - //preset tree - Set* _set; - - void setSampleRate(int sr); - Preset* findPreset(int hbank, int lbank, int prog) const; - Subcategory* findSubcategory(int hbank, int lbank) const; - Category* findCategory(int hbank) const; - void initCtrls(); - void initGlobal(); - void initChannels(); - void initChannel(int c); - void resetVoices(); //when panic is pressed - void initVoice(int c, int v); - void initVoices(int c); - void setPreset(int c); - void setFeedback(int c); - void setLfo(int c); - void setOutLevel(int c, int k); //set the output level of the op k - void setOutLevel(int c); //do the same for all operators - void setEnvAttack(int c, int v, int k); //set envInct of voice v and op k - void setEnvAttack(int c, int k); //do the same for all voices of operator k - void setEnvAttack(int c); //do the same for all voices all operators - void setEnvRelease(int c, int v, int k); //set coefVLevel of voice v and op k - void setEnvRelease(int c, int k); //do the same for all voices of operator k - void setEnvRelease(int c); //do the same for all voices all operators - void setPitchEnvRelease(int c, int v); - void setQuality(Quality q); - void setFilter(bool f); - double brightness2Amp(int c, int k); //get the brightness of the operator k - void loadSutulaPresets(); - void loadSet(QString s); - int noteOff2Voice(int c); //return the first free voice - int minVolu2Voice(int c); - int pitchOn2Voice(int c, int pitch); - void programSelect(int c, int hbank, int lbank, int prog); - bool existsKeyOn(int ch); - void setNbrVoices(int c, int nv); - void setMasterVol(int v); - void setChannelEnable(int c, bool e); - void setChannelVol(int c, int v); - void setChannelPan(int c, int v); - void applyChannelAmp(int c); - void setChannelDetune(int c, int d); - void setChannelBrightness(int c, int b); - void setChannelModulation(int c, int m); - void setChannelAttack(int c, int a); - void setChannelRelease(int c, int r); - void setChannelReverb(int c, int r); - void setChannelChorus(int c, int val); - void setChannelDelay(int c, int val); - void setChorusReturn(int val); - void setReverbReturn(int val); - void setDelayReturn(int val); - bool getChannelEnable(int c) const; - int getNbrVoices(int c) const; - int getMasterVol(void) const; - bool getFilter(void) const; - int getChannelVol(int c) const; - int getChannelPan(int c) const; - int getChannelDetune(int c) const; - int getChannelBrightness(int c) const; - int getChannelModulation(int c) const; - int getChannelAttack(int c) const; - int getChannelRelease(int c) const; - int getChannelReverb(int c) const; - int getChannelChorus(int c) const; - int getChannelDelay(int c) const; - int getChorusReturn(void) const; - int getReverbReturn(void) const; - int getDelayReturn(void) const; - void setPitchBendCoef(int c, int val); - void setModulation(int c, int val); //TODO check between setChannelModulation - void setSustain(int c, int val); - - void readConfiguration(QDomNode qdn); - void writeConfiguration(AL::Xml* xml); - - bool setController(int ch, int ctrl, int val, bool fromGui); - virtual bool setController(int ch, int ctrl, int val); - bool sysex(int length, const unsigned char* data, bool fromGui); - virtual bool sysex(int length, const unsigned char* data); - - virtual const char* getPatchName(int ch, int number, int) const; - virtual const MidiPatch* getPatchInfo(int, const MidiPatch *) const; - - virtual int getControllerInfo(int arg1, const char** arg2, - int* arg3, int* arg4, int* arg5); - virtual void getInitData(int* length, const unsigned char** data) const; - - virtual bool playNote(int channel, int pitch, int velo); - virtual void process(float** buffer, int offset, int n); - - // GUI interface routines - virtual bool hasGui() const { return true; } - virtual bool guiVisible() const; - virtual void showGui(bool); - virtual void getGeometry(int* x, int* y, int* w, int* h) const; - virtual void setGeometry(int, int, int, int); - - DeicsOnze(); - ~DeicsOnze(); -}; - - -#endif /* __DEICSONZE_H */ |