diff options
Diffstat (limited to 'host/examples/wavetable.hpp')
-rw-r--r-- | host/examples/wavetable.hpp | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/host/examples/wavetable.hpp b/host/examples/wavetable.hpp index 8fdc8db30..2a1d13f48 100644 --- a/host/examples/wavetable.hpp +++ b/host/examples/wavetable.hpp @@ -5,55 +5,51 @@ // SPDX-License-Identifier: GPL-3.0-or-later // -#include <string> #include <cmath> #include <complex> -#include <vector> #include <stdexcept> +#include <string> +#include <vector> static const size_t wave_table_len = 8192; -class wave_table_class{ +class wave_table_class +{ public: - wave_table_class(const std::string &wave_type, const float ampl): - _wave_table(wave_table_len) + wave_table_class(const std::string& wave_type, const float ampl) + : _wave_table(wave_table_len) { - //compute real wave table with 1.0 amplitude + // compute real wave table with 1.0 amplitude std::vector<float> real_wave_table(wave_table_len); - if (wave_type == "CONST"){ + if (wave_type == "CONST") { for (size_t i = 0; i < wave_table_len; i++) real_wave_table[i] = 1.0; - } - else if (wave_type == "SQUARE"){ + } else if (wave_type == "SQUARE") { for (size_t i = 0; i < wave_table_len; i++) - real_wave_table[i] = (i < wave_table_len/2)? 0.0 : 1.0; - } - else if (wave_type == "RAMP"){ + real_wave_table[i] = (i < wave_table_len / 2) ? 0.0 : 1.0; + } else if (wave_type == "RAMP") { for (size_t i = 0; i < wave_table_len; i++) - real_wave_table[i] = 2.0*i/(wave_table_len-1) - 1.0; - } - else if (wave_type == "SINE"){ - static const double tau = 2*std::acos(-1.0); + real_wave_table[i] = 2.0 * i / (wave_table_len - 1) - 1.0; + } else if (wave_type == "SINE") { + static const double tau = 2 * std::acos(-1.0); for (size_t i = 0; i < wave_table_len; i++) - real_wave_table[i] = std::sin((tau*i)/wave_table_len); - } - else throw std::runtime_error("unknown waveform type: " + wave_type); + real_wave_table[i] = std::sin((tau * i) / wave_table_len); + } else + throw std::runtime_error("unknown waveform type: " + wave_type); - //compute i and q pairs with 90% offset and scale to amplitude - for (size_t i = 0; i < wave_table_len; i++){ - const size_t q = (i+(3*wave_table_len)/4)%wave_table_len; - _wave_table[i] = std::complex<float>( - ampl*real_wave_table[i], - ampl*real_wave_table[q] - ); + // compute i and q pairs with 90% offset and scale to amplitude + for (size_t i = 0; i < wave_table_len; i++) { + const size_t q = (i + (3 * wave_table_len) / 4) % wave_table_len; + _wave_table[i] = + std::complex<float>(ampl * real_wave_table[i], ampl * real_wave_table[q]); } } - inline std::complex<float> operator()(const size_t index) const{ + inline std::complex<float> operator()(const size_t index) const + { return _wave_table[index % wave_table_len]; } private: - std::vector<std::complex<float> > _wave_table; + std::vector<std::complex<float>> _wave_table; }; - |