From 8a2c2824a59d7644e13bc52c9a0ecbd641f21f95 Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Wed, 13 Oct 2010 19:34:22 +0000 Subject: new branch muse2, first checkin --- muse2/synti/deicsonze2/deicsonzepreset.h | 567 +++++++++++++++++++++++++++++++ 1 file changed, 567 insertions(+) create mode 100644 muse2/synti/deicsonze2/deicsonzepreset.h (limited to 'muse2/synti/deicsonze2/deicsonzepreset.h') diff --git a/muse2/synti/deicsonze2/deicsonzepreset.h b/muse2/synti/deicsonze2/deicsonzepreset.h new file mode 100644 index 00000000..3c005c8d --- /dev/null +++ b/muse2/synti/deicsonze2/deicsonzepreset.h @@ -0,0 +1,567 @@ +//=========================================================================== +// +// DeicsOnze an emulator of the YAMAHA DX11 synthesizer +// +// Version 0.5.5 +// +// deicsonzepreset.h +// +// +// 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 __DEICSONZEPRESET_H +#define __DEICSONZEPRESET_H + +#include +#include + +#include + +#include "muse/xml.h" + +#define NBROP 4 //do not change +#define MAXCHARTAG 64 + +#define PROG_NBR 128 +#define LBANK_NBR 128 +#define HBANK_NBR 128 + +//--------------------------------------------------------- +// define strings of the parameter names for load save and ctrl interface +// number of ctrl +// following the internal DX11 organization (c.f T81Z manual) +//--------------------------------------------------------- +#define CTRLOFFSET 0x100 +#define DECAPAR1 13 +#define ARSTR "AR" +#define ARLONGSTR "AttackRate" +#define CTRL_AR 0+CTRLOFFSET +#define MAXAR 31 +#define D1RSTR "D1R" +#define D1RLONGSTR "Decay1Rate" +#define CTRL_D1R 1+CTRLOFFSET +#define MAXD1R 31 +#define D2RSTR "D2R" +#define D2RLONGSTR "Decay2Rate" +#define CTRL_D2R 2+CTRLOFFSET +#define MAXD2R 31 +#define RRSTR "RR" +#define RRLONGSTR "ReleaseRate" +#define CTRL_RR 3+CTRLOFFSET +#define MAXRR 15 +#define D1LSTR "D1L" +#define D1LLONGSTR "Decay1Level" +#define CTRL_D1L 4+CTRLOFFSET +#define MAXD1L 15 +#define LSSTR "LS" +#define LSLONGSTR "LevelScaling" +#define CTRL_LS 5+CTRLOFFSET +#define MAXLS 99 +#define RSSTR "RS" +#define RSLONGSTR "RateScaling" +#define CTRL_RS 6+CTRLOFFSET +#define MAXRS 3 +#define EBSSTR "EBS" +#define EBSLONGSTR "EGBiasSensitivity" +#define CTRL_EBS 7+CTRLOFFSET +#define MAXEBS 7 +#define AMESTR "AME" +#define AMELONGSTR "AmplitudeModulationEnable" +#define CTRL_AME 8+CTRLOFFSET +#define KVSSTR "KVS" +#define KVSLONGSTR "KeyVelocitySensitivity" +#define CTRL_KVS 9+CTRLOFFSET +#define MAXKVS 7 +#define OUTSTR "OUT" +#define OUTLONGSTR "OperatorOutputLevel" +#define CTRL_OUT 10+CTRLOFFSET +#define MAXOUT 99 +#define RATIOSTR "Ratio" +#define RATIOLONGSTR "Ratio" +#define CTRL_RATIO 11+CTRLOFFSET +#define MAXRATIO 64 +#define DETSTR "DET" +#define DETLONGSTR "Detune" +#define CTRL_DET 12+CTRLOFFSET +#define MAXDET 3 +#define ALGSTR "ALG" +#define ALGLONGSTR "Algorithm" +#define CTRL_ALG 52+CTRLOFFSET +#define MAXALG 7 +#define FEEDBACKSTR "Feedback" +#define CTRL_FEEDBACK 53+CTRLOFFSET +#define MAXFEEDBACK 7 +#define SPEEDSTR "Speed" +#define SPEEDLONGSTR "LFOSpeed" +#define CTRL_SPEED 54+CTRLOFFSET +#define MAXSPEED 99 +#define DELAYSTR "Delay" //TODO LFOD +#define DELAYLONGSTR "LFODelay" +#define CTRL_DELAY 55+CTRLOFFSET +#define MAXDELAY 99 +#define PMODDEPTHSTR "PModDepth" +#define PMODDEPTHLONGSTR "PitchModulationDepth" +#define CTRL_PMODDEPTH 56+CTRLOFFSET +#define MAXPMODDEPTH 99 +#define AMODDEPTHSTR "AModDepth" +#define AMODDEPTHLONGSTR "AmplitudeModulationDepth" +#define CTRL_AMODDEPTH 57+CTRLOFFSET +#define MAXAMODDEPTH 99 +#define SYNCSTR "Sync" +#define SYNCLONGSTR "LFOSync" +#define CTRL_SYNC 58+CTRLOFFSET +#define WAVESTR "Wave" +#define WAVELONGSTR "LFOWave" +#define CTRL_WAVE 59+CTRLOFFSET +#define MAXWAVE 3 +#define PMODSENSSTR "PModSens" +#define PMODSENSLONGSTR "PitchModulationSensitivity" +#define CTRL_PMODSENS 60+CTRLOFFSET +#define MAXPMODSENS 7 +#define AMSSTR "AMS" +#define AMSLONGSTR "AmplitudeModulationSensitivity" +#define CTRL_AMS 61+CTRLOFFSET +#define MAXAMS 3 +#define TRANSPOSESTR "Transpose" +#define CTRL_TRANSPOSE 62+CTRLOFFSET +#define MAXTRANSPOSE 24 +#define POLYMODESTR "PolyMode" +#define CTRL_POLYMODE 63+CTRLOFFSET +#define PBENDRANGESTR "PBendRange" +#define PBENDRANGELONGSTR "PitchBendRange" +#define CTRL_PBENDRANGE 64+CTRLOFFSET +#define MAXPBENDRANGE 12 +#define PORTAMODESTR "PortaMode" +#define PORTAMODELONGSTR "PortamentoMode" +#define CTRL_PORTAMODE 65+CTRLOFFSET +#define PORTATIMESTR "PortaTime" +#define PORTATIMELONGSTR "PortamentoTime" +#define CTRL_PORTATIME 66+CTRLOFFSET +#define MAXPROTATIME 99 +#define FCVOLUMESTR "FCVolume" +#define FCVOLUMELONGSTR "FootControllerVolume" +#define CTRL_FCVOLUME 67+CTRLOFFSET +#define MAXFCVOLUME 99 +#define FSWSTR "FSW" +#define FSWLONGSTR "FootSwitch" +#define CTRL_FSW 68+CTRLOFFSET +#define MAXFSW 99 +#define MWPITCHSTR "MWPitch" +#define MWPITCHLONGSTR "ModulationWheelPitch" +#define CTRL_MWPITCH 71+CTRLOFFSET +#define MAXMWPITCH 99 +#define MWAMPLITUDESTR "MWAmplitude" +#define MWAMPLITUDELONGSTR "ModulationWheelAmplitude" +#define CTRL_MWAMPLITUDE 72+CTRLOFFSET +#define MAXMWAMPLITUDE 99 +#define BCPITCHSTR "BCPitch" +#define BCPITCHLONGSTR "BreathControlPitch" +#define CTRL_BCPITCH 73+CTRLOFFSET +#define MAXBCPITCH 99 +#define BCAMPLITUDESTR "BCAmplitude" +#define BCAMPLITUDELONGSTR "BreathControlAmplitude" +#define CTRL_BCAMPLITUDE 74+CTRLOFFSET +#define MAXBCAMPLITUDE 99 +#define BCPITCHBIASSTR "BCPitchBias" +#define BCPITCHBIASLONGSTR "BreathControlPitchBias" +#define CTRL_BCPITCHBIAS 75+CTRLOFFSET +#define MAXBCPITCHBIAS 50 +#define BCEGBIASSTR "BCEGBias" +#define BCEGBIASLONGSTR "BreathControlEGBias" +#define CTRL_BCEGBIAS 76+CTRLOFFSET +#define MAXBCEGBIAS 99 +#define MIDATTACK 64 +#define ATPITCHSTR "ATPitch" +#define ATPITCHLONGSTR "AfterTouchPitch" +#define CTRL_ATPITCH 77+CTRLOFFSET +#define MAXATPITCH 99 +#define ATAMPLITUDESTR "ATAmplitude" +#define ATAMPLITUDELONGSTR "AfterTouchAmplitude" +#define CTRL_ATAMPLITUDE 78+CTRLOFFSET +#define MAXATAMPLITUDE 99 +#define ATPITCHBIASSTR "ATPitchBias" +#define ATPITCHBIASLONGSTR "AfterTouchPitchBias" +#define CTRL_ATPITCHBIAS 79+CTRLOFFSET +#define MAXATPITCHBIAS 50 +#define ATEGBIASSTR "ATEGBias" +#define ATEGBIASLONGSTR "AfterTouchEGBias" +#define CTRL_ATEGBIAS 80+CTRLOFFSET +#define MAXATEGBIAS 99 +#define PR1STR "PR1" +#define PR1LONGSTR "PitchRateEG1" +#define CTRL_PR1 81+CTRLOFFSET +#define MAXPR 99 +#define PR2STR "PR2" +#define PR2LONGSTR "PitchRateEG2" +#define CTRL_PR2 82+CTRLOFFSET +#define PR3STR "PR3" +#define PR3LONGSTR "PitchRateEG3" +#define CTRL_PR3 83+CTRLOFFSET +#define PL1STR "PL1" +#define PL1LONGSTR "PitchLevelEG1" +#define CTRL_PL1 84+CTRLOFFSET +#define MAXPL 99 +#define PL2STR "PL2" +#define PL2LONGSTR "PitchLevelEG2" +#define CTRL_PL2 85+CTRLOFFSET +#define PL3STR "PL3" +#define PL3LONGSTR "PitchLevelEG3" +#define CTRL_PL3 86+CTRLOFFSET +#define DECAPAR2 5 +#define FIXSTR "FIX" +#define FIXLONGSTR "FixedFrequency" +#define CTRL_FIX 100+CTRLOFFSET +#define FIXRANGESTR "FixRange" +#define FIXRANGELONGSTR "FixedFrequencyRange" +#define CTRL_FIXRANGE 101+CTRLOFFSET +#define MAXFIXRANGE 255 +#define OSWSTR "OSW" +#define OSWLONGSTR "OperatorWaveform" +#define CTRL_OSW 103+CTRLOFFSET +#define MAXOSW 7 +#define SHFTSTR "SHFT" +#define SHFTLONGSTR "EGShift" +#define CTRL_SHFT 104+CTRLOFFSET +#define MAXSHFT 3 +#define REVERBRATESTR "ReverbRate" +#define CTRL_REVERBRATE 120+CTRLOFFSET +#define MAXREVERBRATE 7 +#define FCPITCHSTR "FCPitch" +#define FCPITCHLONGSTR "FootControllerPitch" +#define CTRL_FCPITCH 121+CTRLOFFSET +#define MAXFCPITCH 99 +#define FCAMPLITUDESTR "FCAmplitude" +#define FCAMPLITUDELONGSTR "FootControllerAmplitude" +#define CTRL_FCAMPLITUDE 122+CTRLOFFSET +#define MAXFCAMPLITUDE 99 +#define CHANNELPANSTR "ChannelPan" +#define CTRL_CHANNELPAN 123+CTRLOFFSET +#define MAXCHANNELPAN 127 +#define CHANNELDETUNESTR "ChannelDetune" +#define CTRL_CHANNELDETUNE 124+CTRLOFFSET +#define MAXCHANNELDETUNE 63 +#define CHANNELVOLUMESTR "ChannelVolume" +#define CTRL_CHANNELVOLUME 125+CTRLOFFSET +#define MAXCHANNELVOLUME 255 +#define FINEBRIGHTNESSSTR "FineBrightness" +#define CTRL_FINEBRIGHTNESS 126+CTRLOFFSET +#define MAXFINEBRIGHTNESS 4095 +#define MIDFINEBRIGHTNESS (MAXFINEBRIGHTNESS+1)/2 +#define BRIGHTNESSSTR "Brightness" +#define MAXBRIGHTNESS 127 +#define MIDBRIGHTNESS 64 +#define MAXMODULATION 127 +#define MODULATIONSTR "Modulation" +#define ATTACKSTR "Attack" +#define MAXATTACK 127 +#define MIDATTACK 64 +#define RELEASESTR "Attack" +#define MAXRELEASE 127 +#define MIDRELEASE 64 +#define NBRVOICESSTR "NumberOfVoices" +#define MINNBRVOICES 1 +#define CTRL_NBRVOICES 127+CTRLOFFSET +#define CHANNELENABLESTR "ChannelEnable" +#define MAXCHANNELENABLE 1 +#define MINCHANNELENABLE 0 +#define CTRL_CHANNELENABLE 128+CTRLOFFSET + +class Preset; +class Subcategory; +class Category; +class Set; + +//--------------------------------------------------------- +// Algorithm +//--------------------------------------------------------- + +enum Algorithm { + FIRST, // Op 0 modulated by Op 1 modulated by Op 2 modulated by Op3 + SECOND, // Op 0 modulated by Op 1 modulated by both Op 2 and Op 3 + THIRD, // Op 0 modulated by both Op 3 and Op 1 modulated by Op 2 + FOURTH, // Op 0 modulated by both Op 1 and Op 2 modulated by Op 3 + FIFTH, // (Op 0 modulated by Op 1) add to (Op 2 modulated by Op 3) + SIXTH, // addition of the three Op 0, 1, 2 all modulated by Op 3 + SEVENTH, // addition of the three Op 0, 1, 2 with 2 modulated by Op3 + EIGHTH // addition of the four Op 0, 1, 2, 3 +}; + +//--------------------------------------------------------- +// Wave of the low frequency modulation +//--------------------------------------------------------- +enum Wave { + SAWUP, + SQUARE, + TRIANGL, + SHOLD +}; + +//--------------------------------------------------------- +// Lfo, low frequency modulation +//--------------------------------------------------------- +struct Lfo { + Wave wave; + unsigned char speed; //0 to 99 + unsigned char delay; //0 to 99 + unsigned char pModDepth; //0 to 99 + unsigned char aModDepth; //0 to 99 + bool sync; +}; + +//--------------------------------------------------------- +// Sensitivity +// of the frequency and amplitude of the lfo +// and the key velocity +//--------------------------------------------------------- +struct Sensitivity { + unsigned char pitch; //0 to 7 + unsigned char amplitude; //0 to 3 + bool ampOn[NBROP]; + unsigned char egBias[NBROP]; //O to 7 + unsigned char keyVelocity[NBROP]; //0 to 7 +}; + +//--------------------------------------------------------- +// Frequency +//--------------------------------------------------------- +struct Frequency { + double ratio; + bool isFix; //if isFix no ratio but frequency + double freq; +}; + +//--------------------------------------------------------- +// OscWave +//--------------------------------------------------------- +enum OscWave { + W1, //sine wave + W2, //sine² relative + W3, //half sine + W4, //half sine² relative + W5, + W6, + W7, + W8 +}; + +enum egShiftValue {VOF, V48, V24, V12}; + +//--------------------------------------------------------- +// Eg +// Envelope +//--------------------------------------------------------- +struct Eg { + unsigned char ar; //0 to 31 speed attack + unsigned char d1r; //0 to 31 speed decay + unsigned char d1l; //0 to 15 level sustain + unsigned char d2r; //0 to 31 speed of sustain + unsigned char rr; //1 to 15 + egShiftValue egShift; +}; + +//--------------------------------------------------------- +// PitchEg +//--------------------------------------------------------- +struct PitchEg { + unsigned char pr1;//0 to 99 + unsigned char pr2;//0 to 99 + unsigned char pr3;//0 to 99 + unsigned char pl1;//0 to 99 + unsigned char pl2;//0 to 99 + unsigned char pl3;//0 to 99 +}; + +//--------------------------------------------------------- +// Scaling +//--------------------------------------------------------- +struct Scaling { + unsigned char rate[NBROP];//0 to 3 + unsigned char level[NBROP];//0 to 99 +}; + +//--------------------------------------------------------- +// Mode +//--------------------------------------------------------- +enum Mode { + POLY, + MONO +}; + +//--------------------------------------------------------- +// Portamento +//--------------------------------------------------------- +enum Portamento { + FINGER, + FULL +}; + +//--------------------------------------------------------- +// FootSw +//--------------------------------------------------------- +enum FootSw { + POR, + SUS +}; +//--------------------------------------------------------- +// Function +//--------------------------------------------------------- +struct Function { + int transpose; + Mode mode; + unsigned char pBendRange;//0 to 12 + Portamento portamento; + unsigned char portamentoTime;//0 to 99 + FootSw footSw; + unsigned char fcVolume;//0 to 99 + unsigned char fcPitch;//0 to 99 + unsigned char fcAmplitude;//0 to 99 + unsigned char mwPitch;//0 to 99 + unsigned char mwAmplitude;//0 to 99 + unsigned char bcPitch;//0 to 99 + unsigned char bcAmplitude;//0 to 99 + signed char bcPitchBias;//-50 to 50 + unsigned char bcEgBias;//0 to 99 + unsigned char atPitch;//0 to 99 + unsigned char atAmplitude;//0 to 99 + signed char atPitchBias;//-50 to 50 + unsigned char atEgBias;//0 to 99 + signed char reverbRate;//O=off, 1 to 7 +}; + +//--------------------------------------------------------- +// Preset class +//--------------------------------------------------------- + +class Preset { + public: + Subcategory* _subcategory; //subcategory parent + bool _isUsed; //false if the preset has never been used or modified, + //in this case the preset is not going to be + //save with the project + //Attributes + Algorithm algorithm; + unsigned char feedback; //0 to 7 + Lfo lfo; + Sensitivity sensitivity; + Frequency frequency[NBROP]; + OscWave oscWave[NBROP]; + signed char detune[NBROP]; //-3 to 3 + Eg eg[NBROP]; + PitchEg pitchEg; + unsigned char outLevel[NBROP]; //0 to 99 + Scaling scaling; + Function function; + //int globalDetune; //-31 to 31 //now to the channel + std::string name; + //unsigned char modulation; //0 to 127 + int prog; //0 to 127 + //Methods + void printPreset(); + void initPreset(); + void readPreset(QDomNode qdn); + void writePreset(Xml* xml, bool onlyUsed); + void linkSubcategory(Subcategory* sub); + void merge(Preset* p); //copy the data of p in the preset + void setIsUsed(bool b); //set flag _isUsed and transmit in the parents + void getHBankLBankProg(int* h, int* l, int* p); //return the hbank, lbank and prog of the preset + //Constructor destructor + Preset(); + Preset(Subcategory* sub); + Preset(Subcategory* sub, int prog); + ~Preset(); +}; + +//--------------------------------------------------------------- +// Bank, organized by a tree of category, subcategory, preset +//--------------------------------------------------------------- +class Subcategory { + public: + Category* _category;//parent category + bool _isUsed; //false if the subcategory has never been used or modified, + //in this case the subcategory is not going to be + //save with the project + std::string _subcategoryName; + int _lbank; //0 to 127 + std::vector _presetVector; + Preset* findPreset(int prog); + void readSubcategory(QDomNode subNode); + void writeSubcategory(Xml* xml, bool onlyUsed); + void printSubcategory(); + void linkCategory(Category* cat); + void unlink(); + bool isFreeProg(int prog); + int firstFreeProg(); + void merge(Preset*); + //Constructor destructor + Subcategory(); + Subcategory(Category* cat); + Subcategory(const std::string name); + Subcategory(Category* cat, const std::string name, int lbank); + ~Subcategory(); +}; + +class Category { + public: + Set* _set;//parent set + bool _isUsed; //false if the category has never been used or modified, + //in this case the category is not going to be + //save with the project + std::string _categoryName; + int _hbank; //0 to 127 + std::vector _subcategoryVector; + Subcategory* findSubcategory(int lbank); + Preset* findPreset(int lbank, int prog); + void readCategory(QDomNode catNode); + void writeCategory(Xml* xml, bool onlyUsed); + void printCategory(); + void linkSet(Set* s); + void unlink(); + bool isFreeLBank(int lbank); + int firstFreeLBank(); //return -1 if no free + void merge(Subcategory*); + //Constructor Destructor + Category(); + Category(Set* s); + Category(Set* s,const std::string name, int hbank); + ~Category(); +}; + +class Set { + public: + std::string _setName; + std::vector _categoryVector; + Preset* findPreset(int hbank, int lbank, int prog); + Subcategory* findSubcategory(int hbank, int lbank); + Category* findCategory(int hbank); + void readSet(QDomNode setNode); + void writeSet(Xml* xml, bool onlyUsed); + void printSet(); + bool isFreeHBank(int hbank); + int firstFreeHBank(); + void merge(Category*); + //Constructor Destructor + Set(const std::string name){_setName=name;} + ~Set() { + while(!_categoryVector.empty()) delete(*_categoryVector.begin()); + } +}; + +#endif /* __DEICSONZE_H */ -- cgit v1.2.3