Implemented basic BPM mechanism

This commit is contained in:
2020-04-29 19:48:41 +02:00
parent 2919ca2db6
commit 81cc81fe3a
18 changed files with 426 additions and 122 deletions

View File

@ -8,17 +8,19 @@ constexpr double pi = std::acos(-1);
void Synthisizer::writeSamples(frame_t *begin, frame_t *end)
{
if (m_frequency)
const auto frequency = m_frequency;
if (frequency)
std::transform(begin, end, begin, [&](frame_t frame){
std::transform(std::cbegin(frame), std::cend(frame), std::begin(frame),
[value=std::sin(m_phase)](const sample_t &sample) { return sample + value; });
m_phase += pi*2./sampleRate*m_frequency;
m_phase += pi*2./frameRate*m_actualFrequency;
if (m_phase >= pi*2.)
m_phase -= pi*2.;
return frame;
});
m_actualFrequency = float(m_actualFrequency+m_frequency)/2.f;
}
void Synthisizer::messageReceived(const midi::MidiMessage &message)