2024-08-19 22:43:24 +10:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <inttypes.h>
|
2024-10-01 13:39:28 +10:00
|
|
|
#include "util.hpp"
|
2024-08-19 22:43:24 +10:00
|
|
|
|
|
|
|
struct Tone {
|
|
|
|
uint32_t phase;
|
|
|
|
uint16_t frequency;
|
2024-08-26 13:02:17 +10:00
|
|
|
uint8_t amplitude;
|
|
|
|
|
|
|
|
inline static int8_t sin_lookup[256];
|
|
|
|
|
|
|
|
static void init();
|
2024-08-19 22:43:24 +10:00
|
|
|
|
2024-10-01 13:39:28 +10:00
|
|
|
inline bool active() const AW_IN {
|
2024-08-19 22:43:24 +10:00
|
|
|
return amplitude > 0;
|
|
|
|
}
|
|
|
|
|
2024-10-01 13:39:28 +10:00
|
|
|
inline void update(uint32_t t) AW_IN {
|
2024-08-19 22:43:24 +10:00
|
|
|
phase += t * frequency;
|
|
|
|
}
|
|
|
|
|
2024-10-01 13:39:28 +10:00
|
|
|
inline int get() const AW_IN {
|
2024-08-19 22:43:24 +10:00
|
|
|
uint8_t id = phase >> 12;
|
2024-08-26 13:02:17 +10:00
|
|
|
return (int)sin_lookup[id] * amplitude;
|
2024-08-19 22:43:24 +10:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|