/* Copyright (C) 2010-2012 Florian Jung This file is part of flo's FM synth. flo's FM synth 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 3 of the License, or (at your option) any later version. flo's FM synth 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 flo's FM synth. If not, see . */ #include #include #include "util.h" #include "globals.h" string IntToStr(int i) { ostringstream s; s<=0;--i) if ((result[i]!=' ') && (result[i]!='\t')) break; if (i>=0) return result.substr(0,i+1); else return ""; } else { return ""; } } void output_warning(string s) { cout << s << endl; if (fatal_warnings) throw string(s); } void output_note(string s) { if (!quiet) cout << s << endl; } void output_verbose(string s) { if (verbose) cout << s << endl; } bool param_needs_index(parameter_enum p) { switch (p) { case FILTER_ENABLED: case FILTER_ATTACK: case FILTER_DECAY: case FILTER_SUSTAIN: case FILTER_RELEASE: case FILTER_HOLD: case FILTER_ENV_AMOUNT: case FILTER_OFFSET: case FILTER_RESONANCE: case FILTER_TREMOLO: case FILTER_TREM_LFO: case SYNC_FACTOR: return false; default: return true; } } parameter_enum param_to_enum(string param) { if (param=="mod") return MODULATION; else if (param=="out") return OUTPUT; else if (param=="waveform") return WAVEFORM; else if (param=="sync") return SYNC; else if (param=="factor") return FACTOR; else if (param=="trem") return TREMOLO; else if (param=="trem_lfo") return TREM_LFO; else if (param=="vib") return VIBRATO; else if (param=="vib_lfo") return VIB_LFO; else if (param=="attack") return ATTACK; else if (param=="decay") return DECAY; else if (param=="sustain") return SUSTAIN; else if (param=="release") return RELEASE; else if (param=="hold") return HOLD; else if (param=="ksl") return KSL; else if (param=="ksr") return KSR; else if (param=="filter.enabled") return FILTER_ENABLED; else if (param=="filter.env_amount") return FILTER_ENV_AMOUNT; else if (param=="filter.attack") return FILTER_ATTACK; else if (param=="filter.decay") return FILTER_DECAY; else if (param=="filter.sustain") return FILTER_SUSTAIN; else if (param=="filter.release") return FILTER_RELEASE; else if (param=="filter.hold") return FILTER_HOLD; else if (param=="filter.offset") return FILTER_OFFSET; else if (param=="filter.resonance") return FILTER_RESONANCE; else if (param=="filter.trem") return FILTER_TREMOLO; else if (param=="filter.trem_lfo") return FILTER_TREM_LFO; else if (param=="sync_factor") return SYNC_FACTOR; else if (param=="freq.env_amount") return FREQ_ENV_AMOUNT; else if (param=="freq.attack") return FREQ_ATTACK; else if (param=="freq.decay") return FREQ_DECAY; else if (param=="freq.sustain") return FREQ_SUSTAIN; else if (param=="freq.release") return FREQ_RELEASE; else if (param=="freq.hold") return FREQ_HOLD; else return UNKNOWN; } string str_before(string s, char delim, string onfail) { size_t p; p=s.find(delim); if (p!=string::npos) return s.substr(0,p); else return onfail; } string str_after(string s, char delim, string onfail) { size_t p; p=s.find(delim); if (p!=string::npos) return s.substr(p+1); else return onfail; } string extract_var(string s) { return str_before(s,'=',""); } string extract_val(string s) { return str_after(s,'=',s); } string fileext(string f) { size_t pos; pos=f.rfind('.'); if (pos!=string::npos) return f.substr(pos+1); else return ""; }