Browse Source

Random sampler : added support for changing gate length randomization

pull/83/head
Xenakios 5 years ago
parent
commit
47e7ad85d9
1 changed files with 45 additions and 4 deletions
  1. +45
    -4
      src/Marbles.cpp

+ 45
- 4
src/Marbles.cpp View File

@@ -211,6 +211,7 @@ struct Marbles : Module {
int y_divider_index;
int x_clock_source_internal;
float _gate_len=0.5f;
float _gate_len_dev = 0.0f;
// Buffers
stmlib::GateFlags t_clocks[BLOCK_SIZE] = {};
stmlib::GateFlags last_t_clock = 0;
@@ -293,6 +294,7 @@ struct Marbles : Module {
json_object_set_new(rootJ, "y_divider_index", json_integer(y_divider_index));
json_object_set_new(rootJ, "x_clock_source_internal", json_integer(x_clock_source_internal));
json_object_set_new(rootJ, "gate_length", json_real(_gate_len));
json_object_set_new(rootJ, "gate_length_dev", json_real(_gate_len_dev));
return rootJ;
}

@@ -340,6 +342,9 @@ struct Marbles : Module {
json_t *gatelenJ = json_object_get(rootJ, "gate_length");
if (gatelenJ)
_gate_len = json_real_value(gatelenJ);
json_t *gatelendevJ = json_object_get(rootJ, "gate_length_dev");
if (gatelendevJ)
_gate_len_dev = json_real_value(gatelendevJ);
}

void process(const ProcessArgs &args) override {
@@ -456,8 +461,7 @@ struct Marbles : Module {
t_generator.set_length(deja_vu_length);
t_generator.set_pulse_width_mean(_gate_len);
// TODO
t_generator.set_pulse_width_std(0.f);
t_generator.set_pulse_width_std(_gate_len_dev);

t_generator.Process(t_external_clock, t_clocks, ramps, gates, BLOCK_SIZE);

@@ -705,11 +709,12 @@ struct MarblesWidget : ModuleWidget {
{"99%",0.99f}
};
for (int i = 0; i < (int) LENGTHOF(gateLens); i++) {
bool checked = rack::math::isNear(gateLens[i].second,module->_gate_len,0.0001);
bool checked = isNear(gateLens[i].second,module->_gate_len,0.0001);
GateLenMenuIndexItem *item = createMenuItem<GateLenMenuIndexItem>(gateLens[i].first,
CHECKMARK(checked));
item->module = module;
item->source = gateLens[i].second;
// The marbles code wants the parameter to be in range 0.0-1.0
item->source = rescale(gateLens[i].second,0.01f,0.99f,0.0f,1.0f);
submenu->addChild(item);
}
return submenu;
@@ -721,6 +726,42 @@ struct MarblesWidget : ModuleWidget {
glitem->module = module;
menu->addChild(glitem);
struct GateLenDevMenuIndexItem : MenuItem {
Marbles *module = nullptr;
float source=0.0f;
void onAction(const event::Action &e) override {
module->_gate_len_dev = source;
}
};

struct GateLenDevMenuItem : MenuItem
{
Marbles* module = nullptr;
Menu *createChildMenu() override {
Menu *submenu = new Menu();
const std::pair<std::string,float> gateLenDevs[] = {
{"None",0.00f},
{"Small",0.1f},
{"Medium",0.5f},
{"Large",0.9f}
};
for (int i = 0; i < (int) LENGTHOF(gateLenDevs); i++) {
bool checked = isNear(gateLenDevs[i].second,module->_gate_len_dev,0.0001);
GateLenDevMenuIndexItem *item = createMenuItem<GateLenDevMenuIndexItem>(gateLenDevs[i].first,
CHECKMARK(checked));
item->module = module;
item->source = gateLenDevs[i].second;
submenu->addChild(item);
}
return submenu;
}
};

menu->addChild(new MenuEntry);
GateLenDevMenuItem* glditem = createMenuItem<GateLenDevMenuItem>("Gate length randomization");
glditem->module = module;
menu->addChild(glditem);

}
};



Loading…
Cancel
Save