46 lines
732 B
C++
46 lines
732 B
C++
|
|
||
|
#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;
|
||
|
}
|
||
|
|