tone-generator/tones.cpp

46 lines
732 B
C++
Raw Normal View History

2024-08-19 22:43:24 +10:00
#include "util.hpp"
#include "tones.hpp"
#include "tone.hpp"
void tones::clear_all() {
for(int i = 0; i < size(all); i++) {
all[i] = {0, 0, 0};
}
active = 0;
}
void tones::clear(uint8_t index) {
if(index >= size(all)) {
return;
}
all[index] = {0, 0, 0};
if(index == active - 1) {
prune(index);
}
}
void tones::set(uint8_t index, uint16_t frequency, float amplitude) {
if(amplitude == 0) {
return clear(index);
}
if(index >= size(all)) {
return;
}
all[index].frequency = frequency;
all[index].amplitude = amplitude;
if(index >= tones::active) {
tones::active = index + 1;
}
}
void tones::prune(uint8_t index) {
int i;
for(i = index; i >= 0 && all[i].amplitude == 0; i--) {
}
active = i + 1;
}