31 lines
425 B
C++
31 lines
425 B
C++
|
|
#pragma once
|
|
|
|
#include <inttypes.h>
|
|
#include <avr/pgmspace.h>
|
|
|
|
struct Tone {
|
|
uint32_t phase;
|
|
uint16_t frequency;
|
|
uint8_t amplitude;
|
|
|
|
inline static int8_t sin_lookup[256];
|
|
|
|
static void init();
|
|
|
|
inline bool active() const {
|
|
return amplitude > 0;
|
|
}
|
|
|
|
inline void update(uint32_t t) {
|
|
phase += t * frequency;
|
|
}
|
|
|
|
inline int get() const {
|
|
uint8_t id = phase >> 12;
|
|
return (int)sin_lookup[id] * amplitude;
|
|
}
|
|
};
|
|
|
|
|