diff options
Diffstat (limited to 'note_compiler/parser.cpp')
-rw-r--r-- | note_compiler/parser.cpp | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/note_compiler/parser.cpp b/note_compiler/parser.cpp index 98c65ac..3f142bd 100644 --- a/note_compiler/parser.cpp +++ b/note_compiler/parser.cpp @@ -37,6 +37,8 @@ void init_oscs(int n_osc, oscillator_t *osc) osc[i].vibrato_lfo=0; osc[i].vibrato_lfo_const=true; osc[i].have_custom_wave=false; + osc[i].sync=false; + osc[i].sync_const=true; } } @@ -44,11 +46,12 @@ void init_envs(int n_osc, env_settings_t *env) { for (int i=0;i<n_osc;i++) { + env[i].enabled=true; env[i].attack=0; env[i].attack_const=true; env[i].decay=0; env[i].decay_const=true; - env[i].sustain=ONE; + env[i].sustain=1.0; env[i].sustain_const=true; env[i].release=0; env[i].release_const=true; @@ -118,9 +121,11 @@ program_t parse(string fn) oscillator_t *osc=NULL; env_settings_t *env=NULL; filter_params_t filter; - fixed_t sync_factor; + fixed_t sync_factor=0; bool sync_factor_const=true; + bool use_pfactor=false; + char buf[2000]; string line; string var; @@ -351,6 +356,7 @@ program_t parse(string fn) default: // other params than the above may not be influenced! throw string("velocity cannot influence parameter '"+array+"'"); } + use_pfactor=true; } @@ -432,13 +438,42 @@ program_t parse(string fn) } } + + //some optimizations + + for (int i=0;i<n_osc;i++) + if ((env[i].attack==0) && (env[i].sustain==1.0) + && (env[i].release>100)) //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<n_osc;i++) + if ((osc[i].sync==true) || (osc[i].sync_const==false)) + { + use_sync=true; + break; + } + + if (!use_sync) + { + sync_factor=0; + sync_factor_const=true; + } + + //end optimizations + result.n_osc=n_osc; result.osc=osc; result.env=env; result.filter=filter; result.sync_factor=sync_factor; result.sync_factor_const=sync_factor_const; - + result.use_pfactor=use_pfactor; } else throw string ("could not open '"+fn+"'"); |