#include #include #include "parser.h" #include "programs.h" #include "util.h" #include "../synth/defines.h" #include "../synth/fixed.h" void init_oscs(int n_osc, oscillator_t *osc) { for (int i=0;i=0) && (ind=0) && (ind2=N_LFOS)) throw string("invalid value for tremolo_lfo"); } break; case VIBRATO: osc[ind].vibrato_depth=val; break; case VIB_LFO: if (strval=="snh") osc[ind].vibrato_lfo= SNH_LFO; else { osc[ind].vibrato_lfo= int(val); if ((val<0) || (val>=N_LFOS)) throw string("invalid value for vibrato_lfo"); } break; case ATTACK: env[ind].attack=val; break; case DECAY: env[ind].decay=val; break; case SUSTAIN: env[ind].sustain=val; break; case RELEASE: env[ind].release=val; break; case HOLD: env[ind].hold=(val!=0); break; case KSR: osc[ind].ksr=val; break; case KSL: osc[ind].ksl=val; break; case SYNC: osc[ind].sync=(val!=0); break; case FILTER_ENABLED: filter.enabled=(val!=0); break; case FILTER_ENV_AMOUNT: filter.env_amount=val; break; case FILTER_ATTACK: filter.env_settings.attack=val; break; case FILTER_DECAY: filter.env_settings.decay=val; break; case FILTER_SUSTAIN: filter.env_settings.sustain=val; break; case FILTER_RELEASE: filter.env_settings.release=val; break; case FILTER_HOLD: filter.env_settings.hold=(val!=0); break; case FILTER_OFFSET: filter.freqfactor_offset=val; break; case FILTER_RESONANCE: filter.resonance=val; break; case FILTER_TREMOLO: filter.trem_strength=int(val); break; case FILTER_TREM_LFO: if (strval=="snh") filter.trem_lfo=SNH_LFO; else { filter.trem_lfo=int(val); if ((val<0) || (val>=N_LFOS)) throw string("invalid value for filter_trem_lfo"); } break; case SYNC_FACTOR: sync_factor=val*ONE; break; default: throw string("unknown variable ('"+array+"')"); } break; case 5: //read which params shall be variable, even if //there are currently no controllers which change them case 4: //read velocity-influence over certain params case 2: //read how controllers influence parameters p=param_to_enum(array); ind=extract_array_index(var,1); if ( param_needs_index(p) && (!((ind>=0) && (ind=0) && (ind2100)) //TODO FINDMICH besseres kriterium? env[i].enabled=false; if ( ((filter.env_settings.attack==0) && (filter.env_settings.sustain==1.0) && (filter.env_settings.release>100)) //TODO FINDMICH siehe oben || ((filter.env_amount==0) && (filter.env_amount_const==true)) ) filter.env_settings.enabled=false; bool use_sync=false; for (int i=0;i