Separate out transmogrifier settings

This commit is contained in:
Aleks Rutins 2023-04-16 07:41:11 -04:00
parent 20dfc0c378
commit 7392fcfbdb
3 changed files with 53 additions and 15 deletions

View file

@ -44,7 +44,7 @@
lv2:symbol "drive" ;
lv2:name "Drive" ;
lv2:default 0.0 ;
lv2:minimum -20.0 ;
lv2:minimum -60.0 ;
lv2:maximum 20.0 ;
] ,
[
@ -54,7 +54,7 @@
lv2:name "Threshold" ;
lv2:default 10.0 ;
lv2:minimum -60.0 ;
lv2:maximum 0.0 ;
lv2:maximum 20.0 ;
] ,
[
a lv2:InputPort , lv2:ControlPort ;
@ -62,24 +62,42 @@
lv2:symbol "gain" ;
lv2:name "Level" ;
lv2:default 0.0 ;
lv2:minimum -20.0 ;
lv2:minimum -60.0 ;
lv2:maximum 20.0 ;
] ,
[
a lv2:InputPort , lv2:ControlPort ;
lv2:index 5 ;
lv2:symbol "mix" ;
lv2:name "Mix" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
lv2:symbol "transmogrify_gain" ;
lv2:name "Transmogrifier: Gain" ;
lv2:default -20.0 ;
lv2:minimum -60.0 ;
lv2:maximum 20.0 ;
] ,
[
a lv2:InputPort, lv2:ControlPort ;
lv2:index 6 ;
lv2:symbol "transmogrify_threshold" ;
lv2:name "Transmogrifier: Noise Threshold" ;
lv2:default -40.0 ;
lv2:minimum -60.0 ;
lv2:maximum 20.0 ;
] ,
[
a lv2:InputPort , lv2:ControlPort ;
lv2:index 6 ;
lv2:index 7 ;
lv2:symbol "algorithm_mix" ;
lv2:name "Transmogrify" ;
lv2:default 0.0 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
] ,
[
a lv2:InputPort , lv2:ControlPort ;
lv2:index 8 ;
lv2:symbol "mix" ;
lv2:name "Mix" ;
lv2:default 0.5 ;
lv2:minimum 0.0 ;
lv2:maximum 1.0 ;
] .

22
gui.cc
View file

@ -24,6 +24,8 @@ namespace Dynamite {
Scale *threshold_scale;
Scale *gain_scale;
Scale *mix_scale;
Scale *t_gain_scale;
Scale *t_threshold_scale;
Scale *transmogrify_scale;
Scale *create_scale(p_port_enum nport, Orientation orient = ORIENTATION_VERTICAL) {
auto port = p_ports[nport];
@ -35,18 +37,28 @@ namespace Dynamite {
public:
DriveGUI(const std::string &url) {
auto vbox = manage(new VBox(false, 6));
auto hbox = manage(new HBox(false, 6));
auto notebook = manage(new Notebook);
vbox->add(*manage(new Label("Dynamite")));
auto clip_hbox = manage(new HBox(false, 6));
drive_scale = create_scale(p_drive);
hbox->add(*manage(new LabeledWidget("Drive", *drive_scale)));
clip_hbox->add(*manage(new LabeledWidget("Drive", *drive_scale)));
threshold_scale = create_scale(p_threshold);
hbox->add(*manage(new LabeledWidget("Threshold", *threshold_scale)));
clip_hbox->add(*manage(new LabeledWidget("Threshold", *threshold_scale)));
gain_scale = create_scale(p_gain);
hbox->add(*manage(new LabeledWidget("Gain", *gain_scale)));
clip_hbox->add(*manage(new LabeledWidget("Gain", *gain_scale)));
notebook->append_page(*clip_hbox, "Clipping");
vbox->add(*hbox);
auto transmogrify_hbox = manage(new HBox(false, 6));
t_gain_scale = create_scale(p_transmogrify_gain);
transmogrify_hbox->add(*manage(new LabeledWidget("Gain", *t_gain_scale)));
t_threshold_scale = create_scale(p_transmogrify_threshold);
transmogrify_hbox->add(*manage(new LabeledWidget("Noise Threshold", *t_threshold_scale)));
notebook->append_page(*transmogrify_hbox, "Transmogrifier");
vbox->add(*notebook);
transmogrify_scale = create_scale(p_algorithm_mix, ORIENTATION_HORIZONTAL);
vbox->add(*manage(new LabeledWidget("Transmogrify", *transmogrify_scale)));

View file

@ -1,6 +1,11 @@
#include "plugin.hh"
#include <cmath>
#include "util.hh"
using namespace std;
namespace Dynamite {
void Drive::run(uint32_t n_samples) {
const float coeff = dbCo(*p(p_drive));
@ -8,6 +13,8 @@ namespace Dynamite {
const float gainCoeff = dbCo(*p(p_gain));
const float mix = *p(p_mix);
const float algoMix = *p(p_algorithm_mix);
const float transmogrifier = dbCo(*p(p_transmogrify_gain));
const float transmogrifyThreshold = dbCo(*p(p_transmogrify_threshold));
const float *input = p(p_audio_in);
float *output = p(p_audio_out);
@ -23,9 +30,10 @@ namespace Dynamite {
dist = dist * gainCoeff;
float transmogrifier = threshCoeff * gainCoeff;
float transmogrified = (input[pos] < 0 ? -transmogrifier : transmogrifier);
if(abs(input[pos]) < transmogrifyThreshold) transmogrified = 0;
output[pos] = (mix * ((algoMix * transmogrified) + ((1.0 - algoMix) * dist))) + ((1.0 - mix) * input[pos] * gainCoeff);
}
}