diff options
Diffstat (limited to 'note_compiler')
-rw-r--r-- | note_compiler/main.cpp | 7 | ||||
-rw-r--r-- | note_compiler/parser.cpp | 95 | ||||
-rw-r--r-- | note_compiler/parser.h | 26 |
3 files changed, 48 insertions, 80 deletions
diff --git a/note_compiler/main.cpp b/note_compiler/main.cpp index 3d59c3b..cd83eee 100644 --- a/note_compiler/main.cpp +++ b/note_compiler/main.cpp @@ -9,13 +9,8 @@ using namespace std; int main(int argc, char** argv) { - Parser parser; - program_t p; - - parser.parse("../../velotest.prog"); + program_t p=parse("../../velotest.prog"); - p=parser.get_result(); - cout << "n_osc="<<p.n_osc<<endl; for (int i=0;i<p.n_osc;i++) { diff --git a/note_compiler/parser.cpp b/note_compiler/parser.cpp index 05985de..98c65ac 100644 --- a/note_compiler/parser.cpp +++ b/note_compiler/parser.cpp @@ -5,24 +5,11 @@ #include "programs.h" #include "util.h" #include "../synth/defines.h" +#include "../synth/fixed.h" -Parser::Parser() +void init_oscs(int n_osc, oscillator_t *osc) { - n_osc=0; - osc=NULL; - env=NULL; -} - -Parser::~Parser() -{ - uninit_stuff(); -} - -void Parser::init_stuff() -{ - env=new env_settings_t[n_osc]; - osc=new oscillator_t[n_osc]; for (int i=0;i<n_osc;i++) { osc[i].n_osc=n_osc; @@ -50,8 +37,13 @@ void Parser::init_stuff() osc[i].vibrato_lfo=0; osc[i].vibrato_lfo_const=true; osc[i].have_custom_wave=false; - - + } +} + +void init_envs(int n_osc, env_settings_t *env) +{ + for (int i=0;i<n_osc;i++) + { env[i].attack=0; env[i].attack_const=true; env[i].decay=0; @@ -63,7 +55,10 @@ void Parser::init_stuff() env[i].hold=true; env[i].hold_const=true; } +} +void init_filter(filter_params_t &filter) +{ filter.enabled=false; filter.enabled_const=true; filter.env_amount=0; @@ -88,21 +83,9 @@ void Parser::init_stuff() filter.trem_lfo=0; filter.trem_lfo_const=true; } -void Parser::uninit_stuff() -{ - if (osc) - { - for (int i=0;i<n_osc;i++) - delete [] osc[i].fm_strength; - - delete [] osc; - osc=NULL; - } - if (env) - delete [] env; -} -string Parser::extract_array_name(string s) + +string extract_array_name(string s) { size_t p; p=s.find('['); @@ -112,7 +95,7 @@ string Parser::extract_array_name(string s) return s; } -int Parser::extract_array_index(string s, int dim) +int extract_array_index(string s, int dim) { size_t p=-1,p2; for (int i=0;i<dim;i++) @@ -127,8 +110,17 @@ int Parser::extract_array_index(string s, int dim) return atoi(s.substr(p+1,p2-p-1).c_str()); } -void Parser::parse(string fn) + + +program_t parse(string fn) { + int n_osc=0; + oscillator_t *osc=NULL; + env_settings_t *env=NULL; + filter_params_t filter; + fixed_t sync_factor; + bool sync_factor_const=true; + char buf[2000]; string line; string var; @@ -141,8 +133,9 @@ void Parser::parse(string fn) int ind,ind2=0; int state; - - uninit_stuff(); + + program_t result; + ifstream f; f.open(fn.c_str()); @@ -192,7 +185,12 @@ void Parser::parse(string fn) if (n_osc<=0) throw string("invalid number of oscillators"); - init_stuff(); + //init stuff + env=new env_settings_t[n_osc]; + osc=new oscillator_t[n_osc]; + init_oscs(n_osc, osc); + init_envs(n_osc, env); + init_filter(filter); state=1; break; @@ -433,22 +431,21 @@ void Parser::parse(string fn) } } } + + 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; + } else throw string ("could not open '"+fn+"'"); + + return result; + //no uninit / free of osc and env here, as it must be done by the caller } -program_t Parser::get_result() -{ - program_t r; - - r.n_osc=n_osc; - r.osc=osc; - r.env=env; - r.filter=filter; - r.sync_factor=sync_factor; - r.sync_factor_const=sync_factor_const; - - return r; -} + diff --git a/note_compiler/parser.h b/note_compiler/parser.h index 3e60051..71e7545 100644 --- a/note_compiler/parser.h +++ b/note_compiler/parser.h @@ -7,34 +7,10 @@ #include <list> #include <string> -#include "../synth/fixed.h" #include "programs.h" using namespace std; -class Parser -{ - public: - Parser(); - ~Parser(); - void parse(string fn); - - program_t get_result(); - - private: - void init_stuff(); - void uninit_stuff(); - static string extract_array_name(string s); - static int extract_array_index(string s, int dim); - - int n_osc; - oscillator_t *osc; - env_settings_t *env; - filter_params_t filter; - - fixed_t sync_factor; - bool sync_factor_const; -}; - +program_t parse(string fn); #endif |