add helper function for binding smart-sliders

This commit is contained in:
2026-04-18 21:55:58 -05:00
parent 2590b03756
commit 35663df15c
7 changed files with 32 additions and 68 deletions

View File

@@ -5,9 +5,9 @@
#include <stdint.h>
#include <atomic>
#include "../ConfigInterface.h"
#include "ConfigInterface.h"
#include "Synth.h"
#include "../KeyboardController.h"
#include "KeyboardController.h"
#if defined(_WIN32)
#define AUDIO_API RtAudio::WINDOWS_WASAPI

View File

@@ -1,8 +1,8 @@
#pragma once
#include "../ParameterStore.h"
#include "../NoteQueue.h"
#include "ParameterStore.h"
#include "NoteQueue.h"
#include "Envelope.h"
#include "ScopeBuffer.h"
#include "Filter.h"

View File

@@ -4,7 +4,7 @@
#include "Oscillator.h"
#include "Envelope.h"
#include "Filter.h"
#include "../ParameterStore.h"
#include "ParameterStore.h"
#ifndef M_PI // I hate my stupid chungus life
#define M_PI 3.14159265358979323846

View File

@@ -2,8 +2,7 @@
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include "SmartSlider/SmartSlider.h"
#include "../ParameterStore.h"
#include "ParameterStore.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
@@ -60,65 +59,18 @@ MainWindow::MainWindow(QWidget *parent) :
}
// rogue sliders, TODO: clean these up in a package
connect(ui_->sliderMasterOctave, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::MasterOctaveOffset, value);
ui_->sliderMasterOctave->setResolution();
});
connect(ui_->sliderMasterSemitone, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::MasterSemitoneOffset, value);
ui_->sliderMasterSemitone->setResolution();
});
connect(ui_->sliderMasterPitch, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::MasterPitchOffset, value);
});
connect(ui_->sliderOsc1Octave, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::Osc1OctaveOffset, value);
ui_->sliderOsc1Octave->setResolution();
});
connect(ui_->sliderOsc1Semitone, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::Osc1SemitoneOffset, value);
ui_->sliderOsc1Semitone->setResolution();
});
connect(ui_->sliderOsc1Pitch, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::Osc1PitchOffset, value);
});
connect(ui_->sliderOsc2Octave, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::Osc2OctaveOffset, value);
ui_->sliderOsc2Octave->setResolution();
});
connect(ui_->sliderOsc2Semitone, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::Osc2SemitoneOffset, value);
ui_->sliderOsc2Semitone->setResolution();
});
connect(ui_->sliderOsc2Pitch, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::Osc2PitchOffset, value);
});
connect(ui_->sliderOsc3Octave, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::Osc3OctaveOffset, value);
ui_->sliderOsc3Octave->setResolution();
});
connect(ui_->sliderOsc3Semitone, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::Osc3SemitoneOffset, value);
ui_->sliderOsc3Semitone->setResolution();
});
connect(ui_->sliderOsc3Pitch, &SmartSlider::valueChanged,
this, [this](float value) {
audio_->parameters()->set(ParamId::Osc3PitchOffset, value);
});
bindSlider(ui_->sliderMasterOctave, ParamId::MasterOctaveOffset, true);
bindSlider(ui_->sliderMasterSemitone, ParamId::MasterSemitoneOffset, true);
bindSlider(ui_->sliderMasterPitch, ParamId::MasterPitchOffset);
bindSlider(ui_->sliderOsc1Octave, ParamId::Osc1OctaveOffset, true);
bindSlider(ui_->sliderOsc1Semitone, ParamId::Osc1SemitoneOffset, true);
bindSlider(ui_->sliderOsc1Pitch, ParamId::Osc1PitchOffset);
bindSlider(ui_->sliderOsc2Octave, ParamId::Osc2OctaveOffset, true);
bindSlider(ui_->sliderOsc2Semitone, ParamId::Osc2SemitoneOffset, true);
bindSlider(ui_->sliderOsc2Pitch, ParamId::Osc2PitchOffset);
bindSlider(ui_->sliderOsc3Octave, ParamId::Osc3OctaveOffset, true);
bindSlider(ui_->sliderOsc3Semitone, ParamId::Osc3SemitoneOffset, true);
bindSlider(ui_->sliderOsc3Pitch, ParamId::Osc3PitchOffset);
// synth business
audio_->start();
@@ -209,3 +161,12 @@ void MainWindow::onResetClicked() {
ui_->comboOsc1WaveSelector2->setCurrentIndex(configRoot["OscWaveSelector2"].as<int>());
}
void MainWindow::bindSlider(SmartSlider* slider, ParamId param, bool updateResolution)
{
connect(slider, &SmartSlider::valueChanged, this,
[this](float value, ParamId param, SmartSlider* slider, bool updateResolution) {
audio_->parameters()->set(param, value);
if (updateResolution) slider->setResolution();
});
}

View File

@@ -7,6 +7,7 @@
#include "ConfigInterface.h"
#include "synth/AudioEngine.h"
#include "MidiController.h"
#include "SmartSlider/SmartSlider.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
@@ -29,6 +30,8 @@ private slots:
private:
void bindSlider(SmartSlider* slider, ParamId param, bool updateResolution = false);
Ui::MainWindow *ui_;
ParameterStore params_;

View File

@@ -3,7 +3,7 @@
#include <QWidget>
#include "../../ParameterStore.h"
#include "ParameterStore.h"
QT_BEGIN_NAMESPACE
namespace Ui { class EnvelopeGenerator; }

View File

@@ -3,7 +3,7 @@
#include "ui_Scope.h"
// TODO: fix include directories because what is this
#include "../../../synth/ScopeBuffer.h"
#include "synth/ScopeBuffer.h"
#include <QPainter>
#include <iostream>