|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792 |
- /*
- ZynAddSubFX - a software synthesizer
-
- ADnoteParameters.cpp - 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
-
- */
-
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
-
- #include "ADnoteParameters.h"
- #include "EnvelopeParams.h"
- #include "LFOParams.h"
- #include "../Misc/XMLwrapper.h"
- #include "../DSP/FFTwrapper.h"
- #include "../Synth/OscilGen.h"
- #include "../Synth/Resonance.h"
- #include "FilterParams.h"
-
- int ADnote_unison_sizes[] =
- {1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 25, 30, 40, 50, 0};
-
- ADnoteParameters::ADnoteParameters(FFTwrapper *fft_)
- :PresetsArray()
- {
- setpresettype("Padsynth");
- fft = fft_;
-
-
- for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice)
- EnableVoice(nvoice);
-
- defaults();
- }
-
- ADnoteGlobalParam::ADnoteGlobalParam()
- {
- FreqEnvelope = new EnvelopeParams(0, 0);
- FreqEnvelope->ASRinit(64, 50, 64, 60);
- FreqLfo = new LFOParams(70, 0, 64, 0, 0, 0, 0, 0);
-
- AmpEnvelope = new EnvelopeParams(64, 1);
- AmpEnvelope->ADSRinit_dB(0, 40, 127, 25);
- AmpLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 1);
-
- GlobalFilter = new FilterParams(2, 94, 40);
- FilterEnvelope = new EnvelopeParams(0, 1);
- FilterEnvelope->ADSRinit_filter(64, 40, 64, 70, 60, 64);
- FilterLfo = new LFOParams(80, 0, 64, 0, 0, 0, 0, 2);
- Reson = new Resonance();
- }
-
- void ADnoteParameters::defaults()
- {
- //Default Parameters
- GlobalPar.defaults();
-
- for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice)
- defaults(nvoice);
-
- VoicePar[0].Enabled = 1;
- }
-
- void ADnoteGlobalParam::defaults()
- {
- /* Frequency Global Parameters */
- PStereo = 1; //stereo
- PDetune = 8192; //zero
- PCoarseDetune = 0;
- PDetuneType = 1;
- FreqEnvelope->defaults();
- FreqLfo->defaults();
- PBandwidth = 64;
-
- /* Amplitude Global Parameters */
- PVolume = 90;
- PPanning = 64; //center
- PAmpVelocityScaleFunction = 64;
- AmpEnvelope->defaults();
- AmpLfo->defaults();
- PPunchStrength = 0;
- PPunchTime = 60;
- PPunchStretch = 64;
- PPunchVelocitySensing = 72;
- Hrandgrouping = 0;
-
- /* Filter Global Parameters*/
- PFilterVelocityScale = 64;
- PFilterVelocityScaleFunction = 64;
- GlobalFilter->defaults();
- FilterEnvelope->defaults();
- FilterLfo->defaults();
- Reson->defaults();
- }
-
- /*
- * Defaults a voice
- */
- void ADnoteParameters::defaults(int n)
- {
- VoicePar[n].defaults();
- }
-
- void ADnoteVoiceParam::defaults()
- {
- Enabled = 0;
-
- Unison_size = 1;
- Unison_frequency_spread = 60;
- Unison_stereo_spread = 64;
- Unison_vibratto = 64;
- Unison_vibratto_speed = 64;
- Unison_invert_phase = 0;
-
- Type = 0;
- Pfixedfreq = 0;
- PfixedfreqET = 0;
- Presonance = 1;
- Pfilterbypass = 0;
- Pextoscil = -1;
- PextFMoscil = -1;
- Poscilphase = 64;
- PFMoscilphase = 64;
- PDelay = 0;
- PVolume = 100;
- PVolumeminus = 0;
- PPanning = 64; //center
- PDetune = 8192; //8192=0
- PCoarseDetune = 0;
- PDetuneType = 0;
- PFreqLfoEnabled = 0;
- PFreqEnvelopeEnabled = 0;
- PAmpEnvelopeEnabled = 0;
- PAmpLfoEnabled = 0;
- PAmpVelocityScaleFunction = 127;
- PFilterEnabled = 0;
- PFilterEnvelopeEnabled = 0;
- PFilterLfoEnabled = 0;
- PFMEnabled = 0;
-
- //I use the internal oscillator (-1)
- PFMVoice = -1;
-
- PFMVolume = 90;
- PFMVolumeDamp = 64;
- PFMDetune = 8192;
- PFMCoarseDetune = 0;
- PFMDetuneType = 0;
- PFMFreqEnvelopeEnabled = 0;
- PFMAmpEnvelopeEnabled = 0;
- PFMVelocityScaleFunction = 64;
-
- OscilSmp->defaults();
- FMSmp->defaults();
-
- AmpEnvelope->defaults();
- AmpLfo->defaults();
-
- FreqEnvelope->defaults();
- FreqLfo->defaults();
-
- VoiceFilter->defaults();
- FilterEnvelope->defaults();
- FilterLfo->defaults();
-
- FMFreqEnvelope->defaults();
- FMAmpEnvelope->defaults();
- }
-
-
-
- /*
- * Init the voice parameters
- */
- void ADnoteParameters::EnableVoice(int nvoice)
- {
- VoicePar[nvoice].enable(fft, GlobalPar.Reson);
- }
-
- void ADnoteVoiceParam::enable(FFTwrapper *fft, Resonance *Reson)
- {
- OscilSmp = new OscilGen(fft, Reson);
- FMSmp = new OscilGen(fft, NULL);
-
- AmpEnvelope = new EnvelopeParams(64, 1);
- AmpEnvelope->ADSRinit_dB(0, 100, 127, 100);
- AmpLfo = new LFOParams(90, 32, 64, 0, 0, 30, 0, 1);
-
- FreqEnvelope = new EnvelopeParams(0, 0);
- FreqEnvelope->ASRinit(30, 40, 64, 60);
- FreqLfo = new LFOParams(50, 40, 0, 0, 0, 0, 0, 0);
-
- VoiceFilter = new FilterParams(2, 50, 60);
- FilterEnvelope = new EnvelopeParams(0, 0);
- FilterEnvelope->ADSRinit_filter(90, 70, 40, 70, 10, 40);
- FilterLfo = new LFOParams(50, 20, 64, 0, 0, 0, 0, 2);
-
- FMFreqEnvelope = new EnvelopeParams(0, 0);
- FMFreqEnvelope->ASRinit(20, 90, 40, 80);
- FMAmpEnvelope = new EnvelopeParams(64, 1);
- FMAmpEnvelope->ADSRinit(80, 90, 127, 100);
- }
-
- /*
- * Get the Multiplier of the fine detunes of the voices
- */
- float ADnoteParameters::getBandwidthDetuneMultiplier()
- {
- float bw = (GlobalPar.PBandwidth - 64.0f) / 64.0f;
- bw = powf(2.0f, bw * powf(fabs(bw), 0.2f) * 5.0f);
-
- return bw;
- }
-
- /*
- * Get the unison spread in cents for a voice
- */
-
- float ADnoteParameters::getUnisonFrequencySpreadCents(int nvoice) {
- float unison_spread = VoicePar[nvoice].Unison_frequency_spread / 127.0f;
- unison_spread = powf(unison_spread * 2.0f, 2.0f) * 50.0f; //cents
- return unison_spread;
- }
-
- /*
- * Kill the voice
- */
- void ADnoteParameters::KillVoice(int nvoice)
- {
- VoicePar[nvoice].kill();
- }
-
- void ADnoteVoiceParam::kill()
- {
- delete OscilSmp;
- delete FMSmp;
-
- delete AmpEnvelope;
- delete AmpLfo;
-
- delete FreqEnvelope;
- delete FreqLfo;
-
- delete VoiceFilter;
- delete FilterEnvelope;
- delete FilterLfo;
-
- delete FMFreqEnvelope;
- delete FMAmpEnvelope;
- }
-
-
- ADnoteGlobalParam::~ADnoteGlobalParam()
- {
- delete FreqEnvelope;
- delete FreqLfo;
- delete AmpEnvelope;
- delete AmpLfo;
- delete GlobalFilter;
- delete FilterEnvelope;
- delete FilterLfo;
- delete Reson;
- }
-
- ADnoteParameters::~ADnoteParameters()
- {
- for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice)
- KillVoice(nvoice);
- }
-
- int ADnoteParameters::get_unison_size_index(int nvoice) {
- int index = 0;
- if(nvoice >= NUM_VOICES)
- return 0;
- int unison = VoicePar[nvoice].Unison_size;
-
- while(1) {
- if(ADnote_unison_sizes[index] >= unison)
- return index;
-
- if(ADnote_unison_sizes[index] == 0)
- return index - 1;
-
- index++;
- }
- return 0;
- }
-
- void ADnoteParameters::set_unison_size_index(int nvoice, int index) {
- int unison = 1;
- for(int i = 0; i <= index; ++i) {
- unison = ADnote_unison_sizes[i];
- if(unison == 0) {
- unison = ADnote_unison_sizes[i - 1];
- break;
- }
- }
-
- VoicePar[nvoice].Unison_size = unison;
- }
-
-
-
- void ADnoteParameters::add2XMLsection(XMLwrapper *xml, int n)
- {
- int nvoice = n;
- if(nvoice >= NUM_VOICES)
- return;
-
- int oscilused = 0, fmoscilused = 0; //if the oscil or fmoscil are used by another voice
-
- for(int i = 0; i < NUM_VOICES; ++i) {
- if(VoicePar[i].Pextoscil == nvoice)
- oscilused = 1;
- if(VoicePar[i].PextFMoscil == nvoice)
- fmoscilused = 1;
- }
-
- xml->addparbool("enabled", VoicePar[nvoice].Enabled);
- if(((VoicePar[nvoice].Enabled == 0) && (oscilused == 0)
- && (fmoscilused == 0)) && (xml->minimal))
- return;
-
- VoicePar[nvoice].add2XML(xml, fmoscilused);
- }
-
- void ADnoteVoiceParam::add2XML(XMLwrapper *xml, bool fmoscilused)
- {
- xml->addpar("type", Type);
-
- xml->addpar("unison_size", Unison_size);
- xml->addpar("unison_frequency_spread",
- Unison_frequency_spread);
- xml->addpar("unison_stereo_spread", Unison_stereo_spread);
- xml->addpar("unison_vibratto", Unison_vibratto);
- xml->addpar("unison_vibratto_speed", Unison_vibratto_speed);
- xml->addpar("unison_invert_phase", Unison_invert_phase);
-
- xml->addpar("delay", PDelay);
- xml->addparbool("resonance", Presonance);
-
- xml->addpar("ext_oscil", Pextoscil);
- xml->addpar("ext_fm_oscil", PextFMoscil);
-
- xml->addpar("oscil_phase", Poscilphase);
- xml->addpar("oscil_fm_phase", PFMoscilphase);
-
- xml->addparbool("filter_enabled", PFilterEnabled);
- xml->addparbool("filter_bypass", Pfilterbypass);
-
- xml->addpar("fm_enabled", PFMEnabled);
-
- xml->beginbranch("OSCIL");
- OscilSmp->add2XML(xml);
- xml->endbranch();
-
-
- xml->beginbranch("AMPLITUDE_PARAMETERS");
- xml->addpar("panning", PPanning);
- xml->addpar("volume", PVolume);
- xml->addparbool("volume_minus", PVolumeminus);
- xml->addpar("velocity_sensing", PAmpVelocityScaleFunction);
-
- xml->addparbool("amp_envelope_enabled",
- PAmpEnvelopeEnabled);
- if((PAmpEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("AMPLITUDE_ENVELOPE");
- AmpEnvelope->add2XML(xml);
- xml->endbranch();
- }
- xml->addparbool("amp_lfo_enabled", PAmpLfoEnabled);
- if((PAmpLfoEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("AMPLITUDE_LFO");
- AmpLfo->add2XML(xml);
- xml->endbranch();
- }
- xml->endbranch();
-
- xml->beginbranch("FREQUENCY_PARAMETERS");
- xml->addparbool("fixed_freq", Pfixedfreq);
- xml->addpar("fixed_freq_et", PfixedfreqET);
- xml->addpar("detune", PDetune);
- xml->addpar("coarse_detune", PCoarseDetune);
- xml->addpar("detune_type", PDetuneType);
-
- xml->addparbool("freq_envelope_enabled",
- PFreqEnvelopeEnabled);
- if((PFreqEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FREQUENCY_ENVELOPE");
- FreqEnvelope->add2XML(xml);
- xml->endbranch();
- }
- xml->addparbool("freq_lfo_enabled", PFreqLfoEnabled);
- if((PFreqLfoEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FREQUENCY_LFO");
- FreqLfo->add2XML(xml);
- xml->endbranch();
- }
- xml->endbranch();
-
-
- if((PFilterEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FILTER_PARAMETERS");
- xml->beginbranch("FILTER");
- VoiceFilter->add2XML(xml);
- xml->endbranch();
-
- xml->addparbool("filter_envelope_enabled",
- PFilterEnvelopeEnabled);
- if((PFilterEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FILTER_ENVELOPE");
- FilterEnvelope->add2XML(xml);
- xml->endbranch();
- }
-
- xml->addparbool("filter_lfo_enabled",
- PFilterLfoEnabled);
- if((PFilterLfoEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FILTER_LFO");
- FilterLfo->add2XML(xml);
- xml->endbranch();
- }
- xml->endbranch();
- }
-
- if((PFMEnabled != 0) || (fmoscilused != 0)
- || (!xml->minimal)) {
- xml->beginbranch("FM_PARAMETERS");
- xml->addpar("input_voice", PFMVoice);
-
- xml->addpar("volume", PFMVolume);
- xml->addpar("volume_damp", PFMVolumeDamp);
- xml->addpar("velocity_sensing",
- PFMVelocityScaleFunction);
-
- xml->addparbool("amp_envelope_enabled",
- PFMAmpEnvelopeEnabled);
- if((PFMAmpEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("AMPLITUDE_ENVELOPE");
- FMAmpEnvelope->add2XML(xml);
- xml->endbranch();
- }
- xml->beginbranch("MODULATOR");
- xml->addpar("detune", PFMDetune);
- xml->addpar("coarse_detune", PFMCoarseDetune);
- xml->addpar("detune_type", PFMDetuneType);
-
- xml->addparbool("freq_envelope_enabled",
- PFMFreqEnvelopeEnabled);
- if((PFMFreqEnvelopeEnabled != 0) || (!xml->minimal)) {
- xml->beginbranch("FREQUENCY_ENVELOPE");
- FMFreqEnvelope->add2XML(xml);
- xml->endbranch();
- }
-
- xml->beginbranch("OSCIL");
- FMSmp->add2XML(xml);
- xml->endbranch();
-
- xml->endbranch();
- xml->endbranch();
- }
- }
-
- void ADnoteGlobalParam::add2XML(XMLwrapper *xml)
- {
- xml->addparbool("stereo", PStereo);
-
- xml->beginbranch("AMPLITUDE_PARAMETERS");
- xml->addpar("volume", PVolume);
- xml->addpar("panning", PPanning);
- xml->addpar("velocity_sensing", PAmpVelocityScaleFunction);
- xml->addpar("punch_strength", PPunchStrength);
- xml->addpar("punch_time", PPunchTime);
- xml->addpar("punch_stretch", PPunchStretch);
- xml->addpar("punch_velocity_sensing", PPunchVelocitySensing);
- xml->addpar("harmonic_randomness_grouping", Hrandgrouping);
-
- xml->beginbranch("AMPLITUDE_ENVELOPE");
- AmpEnvelope->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("AMPLITUDE_LFO");
- AmpLfo->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
-
- xml->beginbranch("FREQUENCY_PARAMETERS");
- xml->addpar("detune", PDetune);
-
- xml->addpar("coarse_detune", PCoarseDetune);
- xml->addpar("detune_type", PDetuneType);
-
- xml->addpar("bandwidth", PBandwidth);
-
- xml->beginbranch("FREQUENCY_ENVELOPE");
- FreqEnvelope->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("FREQUENCY_LFO");
- FreqLfo->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
-
-
- xml->beginbranch("FILTER_PARAMETERS");
- xml->addpar("velocity_sensing_amplitude", PFilterVelocityScale);
- xml->addpar("velocity_sensing", PFilterVelocityScaleFunction);
-
- xml->beginbranch("FILTER");
- GlobalFilter->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("FILTER_ENVELOPE");
- FilterEnvelope->add2XML(xml);
- xml->endbranch();
-
- xml->beginbranch("FILTER_LFO");
- FilterLfo->add2XML(xml);
- xml->endbranch();
- xml->endbranch();
-
- xml->beginbranch("RESONANCE");
- Reson->add2XML(xml);
- xml->endbranch();
- }
-
- void ADnoteParameters::add2XML(XMLwrapper *xml)
- {
- GlobalPar.add2XML(xml);
- for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
- xml->beginbranch("VOICE", nvoice);
- add2XMLsection(xml, nvoice);
- xml->endbranch();
- }
- }
-
-
- void ADnoteGlobalParam::getfromXML(XMLwrapper *xml)
- {
- PStereo = xml->getparbool("stereo", PStereo);
-
- if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
- PVolume = xml->getpar127("volume", PVolume);
- PPanning = xml->getpar127("panning", PPanning);
- PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing",
- PAmpVelocityScaleFunction);
-
- PPunchStrength = xml->getpar127("punch_strength", PPunchStrength);
- PPunchTime = xml->getpar127("punch_time", PPunchTime);
- PPunchStretch = xml->getpar127("punch_stretch", PPunchStretch);
- PPunchVelocitySensing = xml->getpar127("punch_velocity_sensing",
- PPunchVelocitySensing);
- Hrandgrouping = xml->getpar127("harmonic_randomness_grouping",
- Hrandgrouping);
-
- if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
- AmpEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("AMPLITUDE_LFO")) {
- AmpLfo->getfromXML(xml);
- xml->exitbranch();
- }
-
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
- PDetune = xml->getpar("detune", PDetune, 0, 16383);
- PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383);
- PDetuneType = xml->getpar127("detune_type", PDetuneType);
- PBandwidth = xml->getpar127("bandwidth", PBandwidth);
-
- xml->enterbranch("FREQUENCY_ENVELOPE");
- FreqEnvelope->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("FREQUENCY_LFO");
- FreqLfo->getfromXML(xml);
- xml->exitbranch();
-
- xml->exitbranch();
- }
-
-
- if(xml->enterbranch("FILTER_PARAMETERS")) {
- PFilterVelocityScale = xml->getpar127("velocity_sensing_amplitude",
- PFilterVelocityScale);
- PFilterVelocityScaleFunction = xml->getpar127(
- "velocity_sensing",
- PFilterVelocityScaleFunction);
-
- xml->enterbranch("FILTER");
- GlobalFilter->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("FILTER_ENVELOPE");
- FilterEnvelope->getfromXML(xml);
- xml->exitbranch();
-
- xml->enterbranch("FILTER_LFO");
- FilterLfo->getfromXML(xml);
- xml->exitbranch();
- xml->exitbranch();
- }
-
- if(xml->enterbranch("RESONANCE")) {
- Reson->getfromXML(xml);
- xml->exitbranch();
- }
- }
-
- void ADnoteParameters::getfromXML(XMLwrapper *xml)
- {
- GlobalPar.getfromXML(xml);
-
- for(int nvoice = 0; nvoice < NUM_VOICES; ++nvoice) {
- VoicePar[nvoice].Enabled = 0;
- if(xml->enterbranch("VOICE", nvoice) == 0)
- continue;
- getfromXMLsection(xml, nvoice);
- xml->exitbranch();
- }
- }
-
- void ADnoteParameters::getfromXMLsection(XMLwrapper *xml, int n)
- {
- int nvoice = n;
- if(nvoice >= NUM_VOICES)
- return;
-
- VoicePar[nvoice].getfromXML(xml, nvoice);
- }
-
-
- void ADnoteVoiceParam::getfromXML(XMLwrapper *xml, unsigned nvoice)
- {
- Enabled = xml->getparbool("enabled", 0);
- Unison_size = xml->getpar127("unison_size", Unison_size);
- Unison_frequency_spread = xml->getpar127("unison_frequency_spread",
- Unison_frequency_spread);
- Unison_stereo_spread = xml->getpar127("unison_stereo_spread",
- Unison_stereo_spread);
- Unison_vibratto = xml->getpar127("unison_vibratto", Unison_vibratto);
- Unison_vibratto_speed = xml->getpar127("unison_vibratto_speed",
- Unison_vibratto_speed);
- Unison_invert_phase = xml->getpar127("unison_invert_phase",
- Unison_invert_phase);
-
- Type = xml->getpar127("type", Type);
- PDelay = xml->getpar127("delay", PDelay);
- Presonance = xml->getparbool("resonance", Presonance);
-
- Pextoscil = xml->getpar("ext_oscil", -1, -1, nvoice - 1);
- PextFMoscil = xml->getpar("ext_fm_oscil", -1, -1, nvoice - 1);
-
- Poscilphase = xml->getpar127("oscil_phase", Poscilphase);
- PFMoscilphase = xml->getpar127("oscil_fm_phase", PFMoscilphase);
- PFilterEnabled = xml->getparbool("filter_enabled", PFilterEnabled);
- Pfilterbypass = xml->getparbool("filter_bypass", Pfilterbypass);
- PFMEnabled = xml->getpar127("fm_enabled", PFMEnabled);
-
- if(xml->enterbranch("OSCIL")) {
- OscilSmp->getfromXML(xml);
- xml->exitbranch();
- }
-
-
- if(xml->enterbranch("AMPLITUDE_PARAMETERS")) {
- PPanning = xml->getpar127("panning", PPanning);
- PVolume = xml->getpar127("volume", PVolume);
- PVolumeminus = xml->getparbool("volume_minus", PVolumeminus);
- PAmpVelocityScaleFunction = xml->getpar127("velocity_sensing",
- PAmpVelocityScaleFunction);
-
- PAmpEnvelopeEnabled = xml->getparbool("amp_envelope_enabled",
- PAmpEnvelopeEnabled);
- if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
- AmpEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- PAmpLfoEnabled = xml->getparbool("amp_lfo_enabled", PAmpLfoEnabled);
- if(xml->enterbranch("AMPLITUDE_LFO")) {
- AmpLfo->getfromXML(xml);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FREQUENCY_PARAMETERS")) {
- Pfixedfreq = xml->getparbool("fixed_freq", Pfixedfreq);
- PfixedfreqET = xml->getpar127("fixed_freq_et", PfixedfreqET);
- PDetune = xml->getpar("detune", PDetune, 0, 16383);
- PCoarseDetune = xml->getpar("coarse_detune", PCoarseDetune, 0, 16383);
- PDetuneType = xml->getpar127("detune_type", PDetuneType);
- PFreqEnvelopeEnabled = xml->getparbool("freq_envelope_enabled",
- PFreqEnvelopeEnabled);
-
- if(xml->enterbranch("FREQUENCY_ENVELOPE")) {
- FreqEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- PFreqLfoEnabled = xml->getparbool("freq_lfo_enabled", PFreqLfoEnabled);
-
- if(xml->enterbranch("FREQUENCY_LFO")) {
- FreqLfo->getfromXML(xml);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FILTER_PARAMETERS")) {
- if(xml->enterbranch("FILTER")) {
- VoiceFilter->getfromXML(xml);
- xml->exitbranch();
- }
-
- PFilterEnvelopeEnabled = xml->getparbool("filter_envelope_enabled",
- PFilterEnvelopeEnabled);
- if(xml->enterbranch("FILTER_ENVELOPE")) {
- FilterEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- PFilterLfoEnabled = xml->getparbool("filter_lfo_enabled",
- PFilterLfoEnabled);
- if(xml->enterbranch("FILTER_LFO")) {
- FilterLfo->getfromXML(xml);
- xml->exitbranch();
- }
- xml->exitbranch();
- }
-
- if(xml->enterbranch("FM_PARAMETERS")) {
- PFMVoice = xml->getpar("input_voice", PFMVoice, -1, nvoice - 1);
- PFMVolume = xml->getpar127("volume", PFMVolume);
- PFMVolumeDamp = xml->getpar127("volume_damp", PFMVolumeDamp);
- PFMVelocityScaleFunction = xml->getpar127("velocity_sensing",
- PFMVelocityScaleFunction);
-
- PFMAmpEnvelopeEnabled = xml->getparbool("amp_envelope_enabled",
- PFMAmpEnvelopeEnabled);
- if(xml->enterbranch("AMPLITUDE_ENVELOPE")) {
- FMAmpEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("MODULATOR")) {
- PFMDetune = xml->getpar("detune", PFMDetune, 0, 16383);
- PFMCoarseDetune = xml->getpar("coarse_detune",
- PFMCoarseDetune,
- 0,
- 16383);
- PFMDetuneType = xml->getpar127("detune_type", PFMDetuneType);
-
- PFMFreqEnvelopeEnabled = xml->getparbool("freq_envelope_enabled",
- PFMFreqEnvelopeEnabled);
- if(xml->enterbranch("FREQUENCY_ENVELOPE")) {
- FMFreqEnvelope->getfromXML(xml);
- xml->exitbranch();
- }
-
- if(xml->enterbranch("OSCIL")) {
- FMSmp->getfromXML(xml);
- xml->exitbranch();
- }
-
- xml->exitbranch();
- }
- xml->exitbranch();
- }
- }
|