Slight improvement of the tone generator.

This commit is contained in:
teixeluis 2021-06-11 00:13:56 +01:00
parent edcd780402
commit c2dc7d1cf5
6 changed files with 99 additions and 38 deletions

View file

@ -23,18 +23,55 @@
#include "tone_gen.hpp"
#include "sine_table_int8.hpp"
int32_t ToneGen::tone_from_sine_table() {
int32_t tone_sample = sine_table_i8[(tone_phase_ & 0xFF000000U) >> 24] << 24;
tone_phase_ += delta_;
return tone_sample;
}
int32_t ToneGen::tone_square() {
int32_t tone_sample = 0;
if(tone_phase_ < (UINT32_MAX / 2)) {
tone_sample = INT32_MAX;
}
else {
tone_sample = INT32_MIN;
}
tone_phase_ += delta_;
return tone_sample;
}
void ToneGen::configure(const uint32_t delta, const float tone_mix_weight) {
delta_ = delta;
tone_mix_weight_ = tone_mix_weight;
input_mix_weight_ = 1.0 - tone_mix_weight;
current_tone_type_ = sine;
}
void ToneGen::configure(const uint32_t delta, const float tone_mix_weight, const tone_type tone_type) {
delta_ = delta;
tone_mix_weight_ = tone_mix_weight;
input_mix_weight_ = 1.0 - tone_mix_weight;
current_tone_type_ = tone_type;
}
int32_t ToneGen::process(const int32_t sample_in) {
if (!delta_)
return sample_in;
int32_t tone_sample = sine_table_i8[(tone_phase_ & 0xFF000000U) >> 24];
tone_phase_ += delta_;
int32_t tone_sample = 0;
if(current_tone_type_ == sine) {
tone_sample = tone_from_sine_table();
}
else if(current_tone_type_ == square) {
tone_sample = tone_square();
}
return (sample_in * input_mix_weight_) + (tone_sample * tone_mix_weight_);
}