Files
DrumMachine/widgets/synthisizerwidget.cpp
2022-12-27 21:19:21 +01:00

49 lines
1.3 KiB
C++

#include "synthisizerwidget.h"
#include "ui_synthisizerwidget.h"
#include <cmath>
#include "audioformat.h"
#include "midicontainers.h"
SynthisizerWidget::SynthisizerWidget(QWidget *parent) :
QWidget{parent},
m_ui{std::make_unique<Ui::SynthisizerWidget>()}
{
m_ui->setupUi(this);
connect(m_ui->horizontalSliderVolume, &QSlider::valueChanged,
&m_synthisizer, [&synthisizer=m_synthisizer](int value){ synthisizer.setVolume(float(value) / 100.f); });
}
SynthisizerWidget::~SynthisizerWidget() = default;
void SynthisizerWidget::writeSamples(frame_t *begin, frame_t *end)
{
m_synthisizer.writeSamples(begin, end);
}
void SynthisizerWidget::loadSettings(DrumMachineSettings &settings)
{
Q_UNUSED(settings)
}
void SynthisizerWidget::unsendColors()
{
}
void SynthisizerWidget::sendColors()
{
}
void SynthisizerWidget::midiReceived(const midi::MidiMessage &message)
{
if (message.cmd == midi::Command::NoteOff || (message.cmd == midi::Command::NoteOn && message.velocity == 0))
{
if (m_synthisizer.frequency() == int16_t(440.*std::pow(std::pow(2., 1./12.), message.note-48)))
m_synthisizer.setFrequency(0);
}
else if (message.cmd == midi::Command::NoteOn)
m_synthisizer.setFrequency(440.*std::pow(std::pow(2., 1./12.), message.note-48));
}