summaryrefslogtreecommitdiff
path: root/note_compiler/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'note_compiler/main.cpp')
-rw-r--r--note_compiler/main.cpp51
1 files changed, 49 insertions, 2 deletions
diff --git a/note_compiler/main.cpp b/note_compiler/main.cpp
index 4d3fcae..ee69471 100644
--- a/note_compiler/main.cpp
+++ b/note_compiler/main.cpp
@@ -36,6 +36,15 @@ void include_file(string file)
}
}
+void write_freqenv_decs()
+{
+ out << "\t\tdouble freqfactor_factor["<<prog.n_osc<<"];\n";
+ for (int i=0;i<prog.n_osc;i++)
+ if ((prog.osc[i].freq_env_amount!=0) || (prog.osc[i].freq_env_amount==false))
+ out << "\t\tEnvelope* freq_env"<<i<<";\n";
+ else
+ comment << "\t\t//freq-envelope #"<<i<<" is unused\n";
+}
void write_env_decs()
{
for (int i=0;i<prog.n_osc;i++)
@@ -122,14 +131,25 @@ void write_ctor()
"\tpfactor.fm=new fixed_t* ["<<prog.n_osc<<"];\n"
"\tfor (int i=0;i<"<<prog.n_osc<<";i++)\n"
"\t\tpfactor.fm[i]=new fixed_t ["<<prog.n_osc<<"];\n"
+ "\t\n"
+ "\t\tpfactor.freq_env_amount=new fixed_t ["<<prog.n_osc<<"];\n"
"\t\n";
for (i=0;i<prog.n_osc;i++)
if (prog.env[i].enabled)
- out << "\tenv"<<i<<"=new Envelope (prg.env_settings["<<i<<"]);\n";
+ out << "\tenv"<<i<<"=new Envelope (prg.env_settings["<<i<<"], envelope_update_frames);\n";
else
comment << "\t//envelope"<<i<<" is disabled\n";
+ for (i=0;i<prog.n_osc;i++)
+ {
+ out << "\tfreqfactor_factor["<<i<<"]=1.0;\n";
+ if ((prog.osc[i].freq_env_amount!=0) || (prog.osc[i].freq_env_amount==false))
+ out << "\tfreq_env"<<i<<"=new Envelope (prg.osc_settings["<<i<<"].freq_env, envelope_update_frames);\n";
+ else
+ comment << "\t//freq-env #"<<i<<" is disabled\n";
+ }
+
out << "\t\n";
for (i=0;i<prog.n_osc;i++)
@@ -204,6 +224,11 @@ void write_dtor()
else
comment << "\t//envelope"<<i<<" is disabled\n";
+ if ((prog.osc[i].freq_env_amount!=0) || (prog.osc[i].freq_env_amount==false))
+ out << "\tdelete freq_env"<<i<<",\n";
+ else
+ comment << "\t//freq-env #"<<i<<" is disabled\n";
+
out << "\tdelete pfactor.fm["<<i<<"];\n";
out << "\t\n";
@@ -215,6 +240,7 @@ void write_dtor()
"\t\n"
"\tdelete [] pfactor.out;\n"
"\tdelete [] pfactor.fm;\n"
+ "\tdelete [] pfactor.freq_env_amount;\n"
"}\n";
}
@@ -238,6 +264,8 @@ void write_recalc_factors()
"\t\t\n"
"\t\tfor (int j=0;j<"<<prog.n_osc<<";j++)\n"
"\t\t\tpfactor.fm[i][j]=calc_pfactor(curr_prg->pfactor.fm[i][j], vel);\n"
+ "\t\t\n"
+ "\t\tpfactor.freq_env_amount[i]=calc_pfactor(curr_prg->pfactor.freq_env_amount[i], vel);\n"
"\t}\n";
out << "}\n";
@@ -258,7 +286,8 @@ void write_apply_pfactor()
{
out << "\tosc"<<i<<".output=orig.osc"<<i<<".output*pfactor.out["<<i<<"] >>SCALE;\n"
"\tfor (int i=0;i<"<<prog.n_osc<<";i++)\n"
- "\t\tosc"<<i<<".fm_strength[i]=orig.osc"<<i<<".fm_strength[i]*pfactor.fm["<<i<<"][i] >>SCALE;\n";
+ "\t\tosc"<<i<<".fm_strength[i]=orig.osc"<<i<<".fm_strength[i]*pfactor.fm["<<i<<"][i] >>SCALE;\n"
+ "\tosc"<<i<<".freq_env_amount=orig.osc"<<i<<".freq_env_amount*pfactor.freq_env_amount["<<i<<"] /ONE;\n";
}
out << "}\n";
@@ -303,6 +332,11 @@ void write_release()
out << "\tenv"<<i<<"->release_key();\n";
else
comment << "\t//envelope"<<i<<" is disabled\n";
+
+ if ((prog.osc[i].freq_env_amount!=0) || (prog.osc[i].freq_env_amount==false))
+ out << "\tfreq_env"<<i<<"->release_key();\n";
+ else
+ comment << "\t//freq-env #"<<i<<" is disabled\n";
}
@@ -346,6 +380,11 @@ void write_reattack()
out << "\tenv"<<i<<"->reattack();\n";
else
comment << "\t//envelope"<<i<<" is disabled\n";
+
+ if ((prog.osc[i].freq_env_amount!=0) || (prog.osc[i].freq_env_amount==false))
+ out << "\tfreq_env"<<i<<"->reattack();\n";
+ else
+ comment << "\t//freq-env #"<<i<<" is disabled\n";
}
@@ -646,6 +685,7 @@ void write_set_param()
"\toscillator_t* sel_osc=NULL;\n"
"\toscillator_t* sel_orig_osc=NULL;\n"
"\tEnvelope* sel_env=NULL;\n"
+ "\tEnvelope* sel_factor_env=NULL;\n"
"\t\n"
"\tswitch (p.osc)\n"
"\t{\n";
@@ -659,6 +699,11 @@ void write_set_param()
else
comment << "/* envelope"<<i<<" is disabled */ ";
+ if ((prog.osc[i].freq_env_amount!=0) || (prog.osc[i].freq_env_amount==false))
+ out << "sel_factor_env=freq_env"<<i<<"; ";
+ else
+ comment << "/* freq-env #"<<i<<" is disabled */ ";
+
out << "break;\n";
}
@@ -720,6 +765,8 @@ void generate_source()
write_empty_line();
write_osc_decs();
write_empty_line();
+ write_freqenv_decs();
+ write_empty_line();
write_sync_decs();
write_empty_line();
write_filter_decs();