void Presets::copy(const char *name) { XMLwrapper *xml = new XMLwrapper(); //used only for the clipboard if(name == NULL) xml->minimal = false; char type[MAX_PRESETTYPE_SIZE]; strcpy(type, this->type); //strcat(type, "n"); if(name == NULL) if(strstr(type, "Plfo") != NULL) strcpy(type, "Plfo"); xml->beginbranch(type); add2XML(xml); xml->endbranch(); if(name == NULL) presetsstore.copyclipboard(xml, type); else presetsstore.copypreset(xml, type, name); delete (xml); }
void doArrayPaste(MiddleWare &mw, int field, string url, string type, XMLwrapper &xml, Ts&&... args) { //Generate a new object T *t = new T(std::forward<Ts>(args)...); if(xml.enterbranch(type+"n") == 0) { delete t; return; } t->defaults(field); t->getfromXMLsection(xml, field); xml.exitbranch(); //Send the pointer string path = url+"paste-array"; char buffer[1024]; rtosc_message(buffer, 1024, path.c_str(), "bi", sizeof(void*), &t, field); if(!Master::ports.apropos(path.c_str())) fprintf(stderr, "Warning: Missing Paste URL: '%s'\n", path.c_str()); //printf("Sending info to '%s'<%d>\n", buffer, field); mw.transmitMsg(buffer); //Let the pointer be reclaimed later }
static bvec loadCache(void) { bvec cache; XMLwrapper xml; xml.loadXMLfile(getCacheName()); if(xml.enterbranch("bank-cache")) { auto nodes = xml.getBranch(); for(auto node:nodes) { BankEntry be; #define bind(x,y) if(node.has(#x)) {be.x = y(node[#x].c_str());} bind(file, string); bind(bank, string); bind(name, string); bind(comments, string); bind(author, string); bind(type, atoi); bind(id, atoi); bind(add, atoi); bind(pad, atoi); bind(sub, atoi); bind(time, atoi); #undef bind cache.push_back(be); } } return cache; }
bool Bank::addtobank(size_t rootID, size_t bankID, int pos, const string filename, const string name) { BankEntry &bank = roots [rootID].banks [bankID]; if (pos >= 0 && pos < BANK_SIZE) { if (bank.instruments [pos].used) { pos = -1; // force it to find a new free position } } else if (pos >= BANK_SIZE) pos = -1; if (pos < 0) { if(!bank.instruments.empty() && bank.instruments.size() > BANK_SIZE) { pos = bank.instruments.rbegin()->first + 1; } else { pos = BANK_SIZE-1; while (!emptyslotWithID(rootID, bankID, pos)) { pos -= 1; if(pos < 0) { break; } } } } if (pos < 0) return -1; // the bank is full deletefrombank(rootID, bankID, pos); InstrumentEntry &instrRef = getInstrumentReference(rootID, bankID, pos); instrRef.used = true; instrRef.name = name; instrRef.filename = filename; instrRef.PADsynth_used = false; instrRef.ADDsynth_used = false; instrRef.SUBsynth_used = false; // see which engines are used if (synth->getRuntime().checksynthengines) { XMLwrapper *xml = new XMLwrapper(synth); xml->checkfileinformation(getFullPath(rootID, bankID, pos)); instrRef.PADsynth_used = xml->information.PADsynth_used; instrRef.ADDsynth_used = xml->information.ADDsynth_used; instrRef.SUBsynth_used = xml->information.SUBsynth_used; delete xml; } return 0; }
int Microtonal::saveXML(const char *filename) const { XMLwrapper xml; xml.beginbranch("MICROTONAL"); add2XML(xml); xml.endbranch(); return xml.saveXMLfile(filename, gzip_compression); }
void FilterParams::add2XMLsection(XMLwrapper& xml, int n) { int nvowel = n; for(int nformant = 0; nformant < FF_MAX_FORMANTS; ++nformant) { xml.beginbranch("FORMANT", nformant); xml.addpar("freq", Pvowels[nvowel].formants[nformant].freq); xml.addpar("amp", Pvowels[nvowel].formants[nformant].amp); xml.addpar("q", Pvowels[nvowel].formants[nformant].q); xml.endbranch(); } }
int Part::saveXML(const char *filename) { XMLwrapper xml; xml.beginbranch("INSTRUMENT"); add2XMLinstrument(&xml); xml.endbranch(); int result = xml.saveXMLfile(filename, gzip_compression); return result; }
int Microtonal::saveXML(const char *filename) const { XMLwrapper *xml = new XMLwrapper(); xml->beginbranch("MICROTONAL"); add2XML(xml); xml->endbranch(); int result = xml->saveXMLfile(filename); delete (xml); return result; }
int Part::loadXMLinstrument(const char *filename) { XMLwrapper xml; if(xml.loadXMLfile(filename) < 0) { return -1; } if(xml.enterbranch("INSTRUMENT") == 0) return -10; getfromXMLinstrument(&xml); xml.exitbranch(); return 0; }
int Bank::addtobank(int pos, const char *filename, const char *name) { if((pos >= 0) && (pos < BANK_SIZE)) { if(ins[pos].used) pos = -1; //force it to find a new free position } else if(pos >= BANK_SIZE) pos = -1; if(pos < 0) { //find a free position for(int i = BANK_SIZE - 1; i >= 0; i--) if(!ins[i].used) { pos = i; break; } ; } if(pos < 0) return -1; //the bank is full // printf("%s %d\n",filename,pos); deletefrombank(pos); ins[pos].used = true; snprintf(ins[pos].name, PART_MAX_NAME_LEN, "%s", name); snprintf(tmpinsname[pos], PART_MAX_NAME_LEN + 10, " "); int len = strlen(filename) + 1 + strlen(dirname); ins[pos].filename = new char[len + 2]; ins[pos].filename[len + 1] = 0; snprintf(ins[pos].filename, len + 1, "%s/%s", dirname, filename); //see if PADsynth is used if(config.cfg.CheckPADsynth) { XMLwrapper *xml = new XMLwrapper(); xml->loadXMLfile(ins[pos].filename); ins[pos].info.PADsynth_used = xml->hasPadSynth(); delete xml; } else ins[pos].info.PADsynth_used = false; return 0; }
int Microtonal::loadXML(const char *filename) { XMLwrapper xml; if(xml.loadXMLfile(filename) < 0) { return -1; } if(xml.enterbranch("MICROTONAL") == 0) return -10; getfromXML(xml); xml.exitbranch(); return 0; }
void LFOParams::getfromXML(XMLwrapper& xml) { Pfreq = xml.getparreal("freq", Pfreq, 0.0f, 1.0f); Pintensity = xml.getpar127("intensity", Pintensity); Pstartphase = xml.getpar127("start_phase", Pstartphase); PLFOtype = xml.getpar127("lfo_type", PLFOtype); Prandomness = xml.getpar127("randomness_amplitude", Prandomness); Pfreqrand = xml.getpar127("randomness_frequency", Pfreqrand); Pdelay = xml.getpar127("delay", Pdelay); Pstretch = xml.getpar127("stretch", Pstretch); Pcontinous = xml.getparbool("continous", Pcontinous); }
void LFOParams::add2XML(XMLwrapper& xml) { xml.addparreal("freq", Pfreq); xml.addpar("intensity", Pintensity); xml.addpar("start_phase", Pstartphase); xml.addpar("lfo_type", PLFOtype); xml.addpar("randomness_amplitude", Prandomness); xml.addpar("randomness_frequency", Pfreqrand); xml.addpar("delay", Pdelay); xml.addpar("stretch", Pstretch); xml.addparbool("continous", Pcontinous); }
int Microtonal::loadXML(const char *filename) { XMLwrapper *xml = new XMLwrapper(); if(xml->loadXMLfile(filename) < 0) { delete (xml); return -1; } if(xml->enterbranch("MICROTONAL") == 0) return -10; getfromXML(xml); xml->exitbranch(); delete (xml); return 0; }
void doPaste(MiddleWare &mw, string url, string type, XMLwrapper &xml, Ts&&... args) { //Generate a new object T *t = new T(std::forward<Ts>(args)...); //Old workaround for LFO parameters if(strstr(type.c_str(), "Plfo")) type = "Plfo"; if(xml.enterbranch(type) == 0) return; t->getfromXML(xml); //Send the pointer string path = url+"paste"; char buffer[1024]; rtosc_message(buffer, 1024, path.c_str(), "b", sizeof(void*), &t); if(!Master::ports.apropos(path.c_str())) fprintf(stderr, "Warning: Missing Paste URL: '%s'\n", path.c_str()); //printf("Sending info to '%s'\n", buffer); mw.transmitMsg(buffer); //Let the pointer be reclaimed later }
void FilterParams::getfromXMLsection(XMLwrapper& xml, int n) { int nvowel = n; for(int nformant = 0; nformant < FF_MAX_FORMANTS; ++nformant) { if(xml.enterbranch("FORMANT", nformant) == 0) continue; Pvowels[nvowel].formants[nformant].freq = xml.getpar127( "freq", Pvowels[nvowel ].formants[nformant].freq); Pvowels[nvowel].formants[nformant].amp = xml.getpar127( "amp", Pvowels[nvowel ].formants[nformant].amp); Pvowels[nvowel].formants[nformant].q = xml.getpar127("q", Pvowels[nvowel].formants[nformant].q); xml.exitbranch(); } }
void presetPasteArray(MiddleWare &mw, std::string url, int field, std::string name) { (void) name; //printf("PresetArrayPaste()\n"); string data = ""; XMLwrapper xml; if(name.empty()) { data = mw.getPresetsStore().clipboard.data; if(data.length() < 20) return; if(!xml.putXMLdata(data.c_str())) return; } else { if(xml.loadXMLfile(name)) return; } //printf("Performing Paste...\n"); doClassArrayPaste(getUrlType(url), getUrlPresetType(url, mw), field, mw, url, xml); }
void Resonance::add2XML(XMLwrapper& xml) { xml.addparbool("enabled", Penabled); if((Penabled == 0) && (xml.minimal)) return; xml.addpar("max_db", PmaxdB); xml.addpar("center_freq", Pcenterfreq); xml.addpar("octaves_freq", Poctavesfreq); xml.addparbool("protect_fundamental_frequency", Pprotectthefundamental); xml.addpar("resonance_points", N_RES_POINTS); for(int i = 0; i < N_RES_POINTS; ++i) { xml.beginbranch("RESPOINT", i); xml.addpar("val", Prespoints[i]); xml.endbranch(); } }
int Bank::addtobank(int pos, string filename, string name) { if((pos >= 0) && (pos < BANK_SIZE)) { if(ins[pos].used) pos = -1; //force it to find a new free position } else if(pos >= BANK_SIZE) pos = -1; if(pos < 0) //find a free position for(int i = BANK_SIZE - 1; i >= 0; i--) if(!ins[i].used) { pos = i; break; } if(pos < 0) return -1; //the bank is full deletefrombank(pos); ins[pos].used = true; ins[pos].name = name; ins[pos].filename = dirname + '/' + filename; //see if PADsynth is used if(config.cfg.CheckPADsynth) { XMLwrapper xml; xml.loadXMLfile(ins[pos].filename); ins[pos].info.PADsynth_used = xml.hasPadSynth(); } else ins[pos].info.PADsynth_used = false; return 0; }
void Resonance::getfromXML(XMLwrapper& xml) { Penabled = xml.getparbool("enabled", Penabled); PmaxdB = xml.getpar127("max_db", PmaxdB); Pcenterfreq = xml.getpar127("center_freq", Pcenterfreq); Poctavesfreq = xml.getpar127("octaves_freq", Poctavesfreq); Pprotectthefundamental = xml.getparbool("protect_fundamental_frequency", Pprotectthefundamental); for(int i = 0; i < N_RES_POINTS; ++i) { if(xml.enterbranch("RESPOINT", i) == 0) continue; Prespoints[i] = xml.getpar127("val", Prespoints[i]); xml.exitbranch(); } }
void Presets::paste(int npreset) { char type[MAX_PRESETTYPE_SIZE]; strcpy(type, this->type); //strcat(type, "n"); if(npreset == 0) if(strstr(type, "Plfo") != NULL) strcpy(type, "Plfo"); XMLwrapper *xml = new XMLwrapper(); if(npreset == 0) { if(!checkclipboardtype()) { delete (xml); return; } if(!presetsstore.pasteclipboard(xml)) { delete (xml); return; } } else if(!presetsstore.pastepreset(xml, npreset)) { delete (xml); return; } if(xml->enterbranch(type) == 0) return; defaults(); getfromXML(xml); xml->exitbranch(); delete (xml); }
static void saveCache(bvec vec) { XMLwrapper xml; xml.beginbranch("bank-cache"); for(auto value:vec) { XmlNode binding("instrument-entry"); #define bind(x) binding[#x] = to_s(value.x); bind(file); bind(bank); bind(name); bind(comments); bind(author); bind(type); bind(id); bind(add); bind(pad); bind(sub); bind(time); #undef bind xml.add(binding); } xml.endbranch(); xml.saveXMLfile(getCacheName(), 0); }
void Microtonal::getfromXML(XMLwrapper& xml) { xml.getparstr("name", (char *) Pname, MICROTONAL_MAX_NAME_LEN); xml.getparstr("comment", (char *) Pcomment, MICROTONAL_MAX_NAME_LEN); Pinvertupdown = xml.getparbool("invert_up_down", Pinvertupdown); Pinvertupdowncenter = xml.getpar127("invert_up_down_center", Pinvertupdowncenter); Penabled = xml.getparbool("enabled", Penabled); Pglobalfinedetune = xml.getpar127("global_fine_detune", Pglobalfinedetune); PAnote = xml.getpar127("a_note", PAnote); PAfreq = xml.getparreal("a_freq", PAfreq, 1.0f, 10000.0f); if(xml.enterbranch("SCALE")) { Pscaleshift = xml.getpar127("scale_shift", Pscaleshift); Pfirstkey = xml.getpar127("first_key", Pfirstkey); Plastkey = xml.getpar127("last_key", Plastkey); Pmiddlenote = xml.getpar127("middle_note", Pmiddlenote); if(xml.enterbranch("OCTAVE")) { octavesize = xml.getpar127("octave_size", octavesize); for(int i = 0; i < octavesize; ++i) { if(xml.enterbranch("DEGREE", i) == 0) continue; octave[i].x2 = 0; octave[i].tuning = xml.getparreal("cents", octave[i].tuning); octave[i].x1 = xml.getpar127("numerator", octave[i].x1); octave[i].x2 = xml.getpar127("denominator", octave[i].x2); if(octave[i].x2 != 0) octave[i].type = 2; else { octave[i].type = 1; //populate fields for display float x = logf(octave[i].tuning) / LOG_2 * 1200.0f; octave[i].x1 = (int) floor(x); octave[i].x2 = (int) (floor((x-octave[i].x1) * 1.0e6)); } xml.exitbranch(); } xml.exitbranch(); } if(xml.enterbranch("KEYBOARD_MAPPING")) { Pmapsize = xml.getpar127("map_size", Pmapsize); Pmappingenabled = xml.getpar127("mapping_enabled", Pmappingenabled); for(int i = 0; i < Pmapsize; ++i) { if(xml.enterbranch("KEYMAP", i) == 0) continue; Pmapping[i] = xml.getpar127("degree", Pmapping[i]); xml.exitbranch(); } xml.exitbranch(); } xml.exitbranch(); } apply(); }
void Microtonal::add2XML(XMLwrapper& xml) const { xml.addparstr("name", (char *) Pname); xml.addparstr("comment", (char *) Pcomment); xml.addparbool("invert_up_down", Pinvertupdown); xml.addpar("invert_up_down_center", Pinvertupdowncenter); xml.addparbool("enabled", Penabled); xml.addpar("global_fine_detune", Pglobalfinedetune); xml.addpar("a_note", PAnote); xml.addparreal("a_freq", PAfreq); if((Penabled == 0) && (xml.minimal)) return; xml.beginbranch("SCALE"); xml.addpar("scale_shift", Pscaleshift); xml.addpar("first_key", Pfirstkey); xml.addpar("last_key", Plastkey); xml.addpar("middle_note", Pmiddlenote); xml.beginbranch("OCTAVE"); xml.addpar("octave_size", octavesize); for(int i = 0; i < octavesize; ++i) { xml.beginbranch("DEGREE", i); if(octave[i].type == 1) xml.addparreal("cents", octave[i].tuning); ; if(octave[i].type == 2) { xml.addpar("numerator", octave[i].x1); xml.addpar("denominator", octave[i].x2); } xml.endbranch(); } xml.endbranch(); xml.beginbranch("KEYBOARD_MAPPING"); xml.addpar("map_size", Pmapsize); xml.addpar("mapping_enabled", Pmappingenabled); for(int i = 0; i < Pmapsize; ++i) { xml.beginbranch("KEYMAP", i); xml.addpar("degree", Pmapping[i]); xml.endbranch(); } xml.endbranch(); xml.endbranch(); }
void Config::saveConfig(const char *filename) const { XMLwrapper *xmlcfg = new XMLwrapper(); xmlcfg->beginbranch("CONFIGURATION"); xmlcfg->addpar("sample_rate", cfg.SampleRate); xmlcfg->addpar("sound_buffer_size", cfg.SoundBufferSize); xmlcfg->addpar("oscil_size", cfg.OscilSize); xmlcfg->addpar("swap_stereo", cfg.SwapStereo); xmlcfg->addpar("bank_window_auto_close", cfg.BankUIAutoClose); xmlcfg->addpar("gzip_compression", cfg.GzipCompression); xmlcfg->addpar("check_pad_synth", cfg.CheckPADsynth); xmlcfg->addpar("ignore_program_change", cfg.IgnoreProgramChange); xmlcfg->addparstr("bank_current", cfg.currentBankDir); xmlcfg->addpar("user_interface_mode", cfg.UserInterfaceMode); xmlcfg->addpar("virtual_keyboard_layout", cfg.VirKeybLayout); for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) if(!cfg.bankRootDirList[i].empty()) { xmlcfg->beginbranch("BANKROOT", i); xmlcfg->addparstr("bank_root", cfg.bankRootDirList[i]); xmlcfg->endbranch(); } for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) if(!cfg.presetsDirList[i].empty()) { xmlcfg->beginbranch("PRESETSROOT", i); xmlcfg->addparstr("presets_root", cfg.presetsDirList[i]); xmlcfg->endbranch(); } xmlcfg->addpar("interpolation", cfg.Interpolation); //linux stuff xmlcfg->addparstr("linux_oss_wave_out_dev", cfg.oss_devs.linux_wave_out); xmlcfg->addparstr("linux_oss_seq_in_dev", cfg.oss_devs.linux_seq_in); //windows stuff xmlcfg->addpar("windows_wave_out_id", cfg.WindowsWaveOutId); xmlcfg->addpar("windows_midi_in_id", cfg.WindowsMidiInId); xmlcfg->endbranch(); // for some reason (which one?), the gzip compression is bashed to 0 xmlcfg->saveXMLfile(filename, 0); delete (xmlcfg); }
void Config::readConfig(const char *filename) { XMLwrapper xmlcfg; if(xmlcfg.loadXMLfile(filename) < 0) return; if(xmlcfg.enterbranch("CONFIGURATION")) { cfg.SampleRate = xmlcfg.getpar("sample_rate", cfg.SampleRate, 4000, 1024000); cfg.SoundBufferSize = xmlcfg.getpar("sound_buffer_size", cfg.SoundBufferSize, 16, 8192); cfg.OscilSize = xmlcfg.getpar("oscil_size", cfg.OscilSize, MAX_AD_HARMONICS * 2, 131072); cfg.SwapStereo = xmlcfg.getpar("swap_stereo", cfg.SwapStereo, 0, 1); cfg.BankUIAutoClose = xmlcfg.getpar("bank_window_auto_close", cfg.BankUIAutoClose, 0, 1); cfg.GzipCompression = xmlcfg.getpar("gzip_compression", cfg.GzipCompression, 0, 9); cfg.currentBankDir = xmlcfg.getparstr("bank_current", ""); cfg.Interpolation = xmlcfg.getpar("interpolation", cfg.Interpolation, 0, 1); cfg.CheckPADsynth = xmlcfg.getpar("check_pad_synth", cfg.CheckPADsynth, 0, 1); cfg.IgnoreProgramChange = xmlcfg.getpar("ignore_program_change", cfg.IgnoreProgramChange, 0, 1); cfg.UserInterfaceMode = xmlcfg.getpar("user_interface_mode", cfg.UserInterfaceMode, 0, 2); cfg.VirKeybLayout = xmlcfg.getpar("virtual_keyboard_layout", cfg.VirKeybLayout, 0, 10); //get bankroot dirs for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) if(xmlcfg.enterbranch("BANKROOT", i)) { cfg.bankRootDirList[i] = xmlcfg.getparstr("bank_root", ""); xmlcfg.exitbranch(); } //get preset root dirs for(int i = 0; i < MAX_BANK_ROOT_DIRS; ++i) if(xmlcfg.enterbranch("PRESETSROOT", i)) { cfg.presetsDirList[i] = xmlcfg.getparstr("presets_root", ""); xmlcfg.exitbranch(); } //linux stuff xmlcfg.getparstr("linux_oss_wave_out_dev", cfg.oss_devs.linux_wave_out, MAX_STRING_SIZE); xmlcfg.getparstr("linux_oss_seq_in_dev", cfg.oss_devs.linux_seq_in, MAX_STRING_SIZE); //windows stuff cfg.WindowsWaveOutId = xmlcfg.getpar("windows_wave_out_id", cfg.WindowsWaveOutId, 0, winwavemax); cfg.WindowsMidiInId = xmlcfg.getpar("windows_midi_in_id", cfg.WindowsMidiInId, 0, winmidimax); xmlcfg.exitbranch(); } cfg.OscilSize = (int) powf(2, ceil(logf(cfg.OscilSize - 1.0f) / logf(2.0f))); }
void SUBnoteParameters::getfromXML(XMLwrapper& xml) { Pnumstages = xml.getpar127("num_stages", Pnumstages); Phmagtype = xml.getpar127("harmonic_mag_type", Phmagtype); Pstart = xml.getpar127("start", Pstart); if(xml.enterbranch("HARMONICS")) { Phmag[0] = 0; for(int i = 0; i < MAX_SUB_HARMONICS; ++i) { if(xml.enterbranch("HARMONIC", i) == 0) continue; Phmag[i] = xml.getpar127("mag", Phmag[i]); Phrelbw[i] = xml.getpar127("relbw", Phrelbw[i]); xml.exitbranch(); } xml.exitbranch(); } if(xml.enterbranch("AMPLITUDE_PARAMETERS")) { Pstereo = xml.getparbool("stereo", Pstereo); PVolume = xml.getpar127("volume", PVolume); PPanning = xml.getpar127("panning", PPanning); PAmpVelocityScaleFunction = xml.getpar127("velocity_sensing", PAmpVelocityScaleFunction); if(xml.enterbranch("AMPLITUDE_ENVELOPE")) { AmpEnvelope->getfromXML(xml); xml.exitbranch(); } xml.exitbranch(); } if(xml.enterbranch("FREQUENCY_PARAMETERS")) { Pfixedfreq = xml.getparbool("fixed_freq", Pfixedfreq); PfixedfreqET = xml.getpar127("fixed_freq_et", PfixedfreqET); PBendAdjust = xml.getpar127("bend_adjust", PBendAdjust); POffsetHz = xml.getpar127("offset_hz", POffsetHz); PDetune = xml.getpar("detune", PDetune, 0, 16383); PCoarseDetune = xml.getpar("coarse_detune", PCoarseDetune, 0, 16383); POvertoneSpread.type = xml.getpar127("overtone_spread_type", POvertoneSpread.type); POvertoneSpread.par1 = xml.getpar("overtone_spread_par1", POvertoneSpread.par1, 0, 255); POvertoneSpread.par2 = xml.getpar("overtone_spread_par2", POvertoneSpread.par2, 0, 255); POvertoneSpread.par3 = xml.getpar("overtone_spread_par3", POvertoneSpread.par3, 0, 255); updateFrequencyMultipliers(); PDetuneType = xml.getpar127("detune_type", PDetuneType); Pbandwidth = xml.getpar127("bandwidth", Pbandwidth); Pbwscale = xml.getpar127("bandwidth_scale", Pbwscale); PFreqEnvelopeEnabled = xml.getparbool("freq_envelope_enabled", PFreqEnvelopeEnabled); if(xml.enterbranch("FREQUENCY_ENVELOPE")) { FreqEnvelope->getfromXML(xml); xml.exitbranch(); } PBandWidthEnvelopeEnabled = xml.getparbool( "band_width_envelope_enabled", PBandWidthEnvelopeEnabled); if(xml.enterbranch("BANDWIDTH_ENVELOPE")) { BandWidthEnvelope->getfromXML(xml); xml.exitbranch(); } xml.exitbranch(); } if(xml.enterbranch("FILTER_PARAMETERS")) { PGlobalFilterEnabled = xml.getparbool("enabled", PGlobalFilterEnabled); if(xml.enterbranch("FILTER")) { GlobalFilter->getfromXML(xml); xml.exitbranch(); } PGlobalFilterVelocityScaleFunction = xml.getpar127( "filter_velocity_sensing", PGlobalFilterVelocityScaleFunction); PGlobalFilterVelocityScale = xml.getpar127( "filter_velocity_sensing_amplitude", PGlobalFilterVelocityScale); if(xml.enterbranch("FILTER_ENVELOPE")) { GlobalFilterEnvelope->getfromXML(xml); xml.exitbranch(); } xml.exitbranch(); } }
void FilterParams::add2XML(XMLwrapper& xml) { //filter parameters xml.addpar("category", Pcategory); xml.addpar("type", Ptype); xml.addpar("freq", Pfreq); xml.addpar("q", Pq); xml.addpar("stages", Pstages); xml.addpar("freq_track", Pfreqtrack); xml.addpar("gain", Pgain); //formant filter parameters if((Pcategory == 1) || (!xml.minimal)) { xml.beginbranch("FORMANT_FILTER"); xml.addpar("num_formants", Pnumformants); xml.addpar("formant_slowness", Pformantslowness); xml.addpar("vowel_clearness", Pvowelclearness); xml.addpar("center_freq", Pcenterfreq); xml.addpar("octaves_freq", Poctavesfreq); for(int nvowel = 0; nvowel < FF_MAX_VOWELS; ++nvowel) { xml.beginbranch("VOWEL", nvowel); add2XMLsection(xml, nvowel); xml.endbranch(); } xml.addpar("sequence_size", Psequencesize); xml.addpar("sequence_stretch", Psequencestretch); xml.addparbool("sequence_reversed", Psequencereversed); for(int nseq = 0; nseq < FF_MAX_SEQUENCE; ++nseq) { xml.beginbranch("SEQUENCE_POS", nseq); xml.addpar("vowel_id", Psequence[nseq].nvowel); xml.endbranch(); } xml.endbranch(); } }
void FilterParams::getfromXML(XMLwrapper& xml) { //filter parameters Pcategory = xml.getpar127("category", Pcategory); Ptype = xml.getpar127("type", Ptype); Pfreq = xml.getpar127("freq", Pfreq); Pq = xml.getpar127("q", Pq); Pstages = xml.getpar127("stages", Pstages); Pfreqtrack = xml.getpar127("freq_track", Pfreqtrack); Pgain = xml.getpar127("gain", Pgain); //formant filter parameters if(xml.enterbranch("FORMANT_FILTER")) { Pnumformants = xml.getpar127("num_formants", Pnumformants); Pformantslowness = xml.getpar127("formant_slowness", Pformantslowness); Pvowelclearness = xml.getpar127("vowel_clearness", Pvowelclearness); Pcenterfreq = xml.getpar127("center_freq", Pcenterfreq); Poctavesfreq = xml.getpar127("octaves_freq", Poctavesfreq); for(int nvowel = 0; nvowel < FF_MAX_VOWELS; ++nvowel) { if(xml.enterbranch("VOWEL", nvowel) == 0) continue; getfromXMLsection(xml, nvowel); xml.exitbranch(); } Psequencesize = xml.getpar127("sequence_size", Psequencesize); Psequencestretch = xml.getpar127("sequence_stretch", Psequencestretch); Psequencereversed = xml.getparbool("sequence_reversed", Psequencereversed); for(int nseq = 0; nseq < FF_MAX_SEQUENCE; ++nseq) { if(xml.enterbranch("SEQUENCE_POS", nseq) == 0) continue; Psequence[nseq].nvowel = xml.getpar("vowel_id", Psequence[nseq].nvowel, 0, FF_MAX_VOWELS - 1); xml.exitbranch(); } xml.exitbranch(); } }
void SUBnoteParameters::add2XML(XMLwrapper& xml) { xml.addpar("num_stages", Pnumstages); xml.addpar("harmonic_mag_type", Phmagtype); xml.addpar("start", Pstart); xml.beginbranch("HARMONICS"); for(int i = 0; i < MAX_SUB_HARMONICS; ++i) { if((Phmag[i] == 0) && (xml.minimal)) continue; xml.beginbranch("HARMONIC", i); xml.addpar("mag", Phmag[i]); xml.addpar("relbw", Phrelbw[i]); xml.endbranch(); } xml.endbranch(); xml.beginbranch("AMPLITUDE_PARAMETERS"); xml.addparbool("stereo", Pstereo); xml.addpar("volume", PVolume); xml.addpar("panning", PPanning); xml.addpar("velocity_sensing", PAmpVelocityScaleFunction); xml.beginbranch("AMPLITUDE_ENVELOPE"); AmpEnvelope->add2XML(xml); xml.endbranch(); xml.endbranch(); xml.beginbranch("FREQUENCY_PARAMETERS"); xml.addparbool("fixed_freq", Pfixedfreq); xml.addpar("fixed_freq_et", PfixedfreqET); xml.addpar("bend_adjust", PBendAdjust); xml.addpar("offset_hz", POffsetHz); xml.addpar("detune", PDetune); xml.addpar("coarse_detune", PCoarseDetune); xml.addpar("overtone_spread_type", POvertoneSpread.type); xml.addpar("overtone_spread_par1", POvertoneSpread.par1); xml.addpar("overtone_spread_par2", POvertoneSpread.par2); xml.addpar("overtone_spread_par3", POvertoneSpread.par3); xml.addpar("detune_type", PDetuneType); xml.addpar("bandwidth", Pbandwidth); xml.addpar("bandwidth_scale", Pbwscale); xml.addparbool("freq_envelope_enabled", PFreqEnvelopeEnabled); if((PFreqEnvelopeEnabled != 0) || (!xml.minimal)) { xml.beginbranch("FREQUENCY_ENVELOPE"); FreqEnvelope->add2XML(xml); xml.endbranch(); } xml.addparbool("band_width_envelope_enabled", PBandWidthEnvelopeEnabled); if((PBandWidthEnvelopeEnabled != 0) || (!xml.minimal)) { xml.beginbranch("BANDWIDTH_ENVELOPE"); BandWidthEnvelope->add2XML(xml); xml.endbranch(); } xml.endbranch(); xml.beginbranch("FILTER_PARAMETERS"); xml.addparbool("enabled", PGlobalFilterEnabled); if((PGlobalFilterEnabled != 0) || (!xml.minimal)) { xml.beginbranch("FILTER"); GlobalFilter->add2XML(xml); xml.endbranch(); xml.addpar("filter_velocity_sensing", PGlobalFilterVelocityScaleFunction); xml.addpar("filter_velocity_sensing_amplitude", PGlobalFilterVelocityScale); xml.beginbranch("FILTER_ENVELOPE"); GlobalFilterEnvelope->add2XML(xml); xml.endbranch(); } xml.endbranch(); }