diff --git a/src/generators.cpp b/src/generators.cpp index 3e91586..4933980 100644 --- a/src/generators.cpp +++ b/src/generators.cpp @@ -49,7 +49,28 @@ sample_table_t gen_saw() return saw_vals; } -sample_table_t gen_isaw() { +sample_table_t gen_tri() +{ + sample_table_t tri_vals = {0}; + uint16_t half_samples = DEFAULT_N_SAMPLES / 2; + float_t step = 2.0 / half_samples; // calculate our incremental step size + float_t val = 0; // place to store calculate value + + // Start low go high then low [0, 1, 0] + for (uint16_t i = 0; i < DEFAULT_N_SAMPLES; i++) { + tri_vals[i] = val; + if (i < half_samples) { + val += step; + } else { + val -= step; + } + } + + return tri_vals; +} + +sample_table_t gen_isaw() +{ sample_table_t isaw_vals = {0}; float_t step = 2.0 / DEFAULT_N_SAMPLES; // calculate our incremental step size float_t val = 1; // place to store calculate value diff --git a/src/wtpp.cpp b/src/wtpp.cpp index 547e57e..e6150ab 100644 --- a/src/wtpp.cpp +++ b/src/wtpp.cpp @@ -25,18 +25,20 @@ static void log(std::string message) int main() { log("Generating wave cycle lookup tables"); - Wave sin_wave, squ_wave, saw_wave, isaw_wave; + Wave sin_wave, squ_wave, saw_wave, tri_wave, isaw_wave; // Calculate fundamental wave values sample_table_t sin_vals = gen_sin(); sample_table_t squ_vals = gen_squ(); sample_table_t saw_vals = gen_saw(); + sample_table_t tri_vals = gen_tri(); sample_table_t isaw_vals = gen_isaw(); // Set wave lookup table values sin_wave.setTable(sin_vals); squ_wave.setTable(squ_vals); saw_wave.setTable(saw_vals); + tri_wave.setTable(tri_vals); isaw_wave.setTable(isaw_vals); log("Printing head of sine table"); @@ -45,6 +47,8 @@ int main() squ_wave.print_head(); log("Printing head of saw table"); saw_wave.print_head(); + log("Printing head of triangle table"); + tri_wave.print_head(); log("Printing head of inverse saw table"); isaw_wave.print_head();