Files
metabalus/src/ui/widgets/EnvelopeGenerator/EnvelopeGenerator.cpp

95 lines
2.3 KiB
C++

#include "EnvelopeGenerator.h"
#include "ui_EnvelopeGenerator.h"
#include <iostream>
EnvelopeGenerator::EnvelopeGenerator(QWidget* parent) : QWidget(parent), ui_(new Ui::EnvelopeGenerator) {
ui_->setupUi(this);
auto connectSlider = [this](SmartSlider* s) {
connect(s, &SmartSlider::valueChanged,
this, &EnvelopeGenerator::emitEnvelope);
};
connectSlider(ui_->sliderDepth);
connectSlider(ui_->sliderAttack);
connectSlider(ui_->sliderDecay);
connectSlider(ui_->sliderSustain);
connectSlider(ui_->sliderRelease);
}
EnvelopeGenerator::~EnvelopeGenerator() {
delete ui_;
}
// getters are here to separate ui from header
float EnvelopeGenerator::depth() const {
return ui_->sliderDepth->value();
}
float EnvelopeGenerator::attack() const {
return ui_->sliderAttack->value();
}
float EnvelopeGenerator::decay() const {
return ui_->sliderDecay->value();
}
float EnvelopeGenerator::sustain() const {
return ui_->sliderSustain->value();
}
float EnvelopeGenerator::release() const {
return ui_->sliderRelease->value();
}
void EnvelopeGenerator::setDepth(float v) {
ui_->sliderDepth->setValue(v);
}
void EnvelopeGenerator::setAttack(float v) {
ui_->sliderAttack->setValue(v);
}
void EnvelopeGenerator::setDecay(float v) {
ui_->sliderDecay->setValue(v);
}
void EnvelopeGenerator::setSustain(float v) {
ui_->sliderSustain->setValue(v);
}
void EnvelopeGenerator::setRelease(float v) {
ui_->sliderRelease->setValue(v);
}
void EnvelopeGenerator::emitEnvelope() {
emit envelopeChanged(
depth(),
attack(),
decay(),
sustain(),
release()
);
}
void EnvelopeGenerator::init(EnvelopeId id, std::array<ParamDefault, 5> profile) {
EnvelopeParam params = ENV_PARAMS[static_cast<size_t>(id)];
ui_->sliderDepth->setRange(profile[0].min, profile[0].max);
ui_->sliderAttack->setRange(profile[1].min, profile[1].max);
ui_->sliderDecay->setRange(profile[2].min, profile[2].max);
ui_->sliderSustain->setRange(profile[3].min, profile[3].max);
ui_->sliderRelease->setRange(profile[4].min, profile[4].max);
setDepth(profile[0].def);
setAttack(profile[1].def);
setDecay(profile[2].def);
setSustain(profile[3].def);
setRelease(profile[4].def);
}