#include <lvtk/synth.hpp>
#include "beep.h"
{
public:
BeepVoice (double rate)
: m_key(lvtk::INVALID_KEY), m_rate(rate), m_period(10), m_counter(0)
{ }
void
on (
unsigned char key,
unsigned char velocity)
{
m_key = key;
m_period = m_rate * 4.0 / lvtk::key2hz(m_key);
}
void
off (
unsigned char velocity)
{
m_key = lvtk::INVALID_KEY;
}
unsigned char
{
return m_key;
}
void
render(uint32_t from, uint32_t to)
{
if (m_key == lvtk::INVALID_KEY) return;
for (uint32_t i = from; i < to; ++i)
{
float s = -0.25 + 0.5 * (m_counter > m_period / 2);
m_counter = (m_counter + 1) % m_period;
}
}
protected:
unsigned char m_key;
double m_rate;
uint32_t m_period;
uint32_t m_counter;
};
{
public:
{
add_voices (new BeepVoice(rate), new BeepVoice(rate), new BeepVoice(rate));
add_audio_outputs (p_left, p_right);
}
};
static int _ = Beep::register_class(p_uri);