/* ZynAddSubFX - a software synthesizer Config.C - Configuration file functions Copyright (C) 2003-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) 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 #include #include #include #ifdef OS_WINDOWS #include #include #endif #include "Config.h" #include "XMLwrapper.h" #include "config.h" Config::Config(){ }; void Config::init(){ maxstringsize=MAX_STRING_SIZE;//for ui //defaults cfg.SampleRate=44100; cfg.SoundBufferSize=256; cfg.OscilSize=512; cfg.SwapStereo=0; cfg.LinuxOSSWaveOutDev=new char[MAX_STRING_SIZE]; snprintf(cfg.LinuxOSSWaveOutDev,MAX_STRING_SIZE,"/dev/dsp"); cfg.LinuxOSSSeqInDev=new char[MAX_STRING_SIZE]; snprintf(cfg.LinuxOSSSeqInDev,MAX_STRING_SIZE,"/dev/sequencer"); cfg.DumpFile=new char[MAX_STRING_SIZE]; snprintf(cfg.DumpFile,MAX_STRING_SIZE,"zynaddsubfx_dump.txt"); cfg.WindowsWaveOutId=0; cfg.WindowsMidiInId=0; cfg.BankUIAutoClose=0; cfg.DumpNotesToFile=0; cfg.DumpAppend=1; cfg.GzipCompression=3; cfg.Interpolation=0; cfg.CheckPADsynth=1; cfg.UserInterfaceMode=1; cfg.VirKeybLayout=1; winwavemax=1;winmidimax=1; //try to find out how many input midi devices are there winmididevices=new winmidionedevice[winmidimax]; for (int i=0;iloadXMLfile(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.DumpNotesToFile=xmlcfg->getpar("dump_notes_to_file",cfg.DumpNotesToFile,0,1); cfg.DumpAppend=xmlcfg->getpar("dump_append",cfg.DumpAppend,0,1); xmlcfg->getparstr("dump_file",cfg.DumpFile,MAX_STRING_SIZE); cfg.GzipCompression=xmlcfg->getpar("gzip_compression",cfg.GzipCompression,0,9); xmlcfg->getparstr("bank_current",cfg.currentBankDir,MAX_STRING_SIZE); cfg.Interpolation=xmlcfg->getpar("interpolation",cfg.Interpolation,0,1); cfg.CheckPADsynth=xmlcfg->getpar("check_pad_synth",cfg.CheckPADsynth,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;ienterbranch("BANKROOT",i)){ cfg.bankRootDirList[i]=new char[MAX_STRING_SIZE]; xmlcfg->getparstr("bank_root",cfg.bankRootDirList[i],MAX_STRING_SIZE); xmlcfg->exitbranch(); }; }; //get preset root dirs for (int i=0;ienterbranch("PRESETSROOT",i)){ cfg.presetsDirList[i]=new char[MAX_STRING_SIZE]; xmlcfg->getparstr("presets_root",cfg.presetsDirList[i],MAX_STRING_SIZE); xmlcfg->exitbranch(); }; }; //linux stuff xmlcfg->getparstr("linux_oss_wave_out_dev",cfg.LinuxOSSWaveOutDev,MAX_STRING_SIZE); xmlcfg->getparstr("linux_oss_seq_in_dev",cfg.LinuxOSSSeqInDev,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(); }; delete(xmlcfg); cfg.OscilSize=(int) pow(2,ceil(log (cfg.OscilSize-1.0)/log(2.0))); }; void Config::saveConfig(char *filename){ 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("dump_notes_to_file",cfg.DumpNotesToFile); xmlcfg->addpar("dump_append",cfg.DumpAppend); xmlcfg->addparstr("dump_file",cfg.DumpFile); xmlcfg->addpar("gzip_compression",cfg.GzipCompression); xmlcfg->addpar("check_pad_synth",cfg.CheckPADsynth); xmlcfg->addparstr("bank_current",cfg.currentBankDir); xmlcfg->addpar("user_interface_mode",cfg.UserInterfaceMode); xmlcfg->addpar("virtual_keyboard_layout",cfg.VirKeybLayout); for (int i=0;ibeginbranch("BANKROOT",i); xmlcfg->addparstr("bank_root",cfg.bankRootDirList[i]); xmlcfg->endbranch(); }; for (int i=0;ibeginbranch("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.LinuxOSSWaveOutDev); xmlcfg->addparstr("linux_oss_seq_in_dev",cfg.LinuxOSSSeqInDev); //windows stuff xmlcfg->addpar("windows_wave_out_id",cfg.WindowsWaveOutId); xmlcfg->addpar("windows_midi_in_id",cfg.WindowsMidiInId); xmlcfg->endbranch(); int tmp=cfg.GzipCompression; cfg.GzipCompression=0; xmlcfg->saveXMLfile(filename); cfg.GzipCompression=tmp; delete(xmlcfg); }; void Config::getConfigFileName(char *name, int namesize){ name[0]=0; #ifdef OS_LINUX snprintf(name,namesize,"%s%s",getenv("HOME"),"/.zynaddsubfxXML.cfg"); #else snprintf(name,namesize,"%s","zynaddsubfxXML.cfg"); #endif };