Browse Source

Added Low CPU mode to Braids

tags/v0.5.0
Andrew Belt 7 years ago
parent
commit
2e74c31483
1 changed files with 41 additions and 9 deletions
  1. +41
    -9
      src/Braids.cpp

+ 41
- 9
src/Braids.cpp View File

@@ -39,6 +39,7 @@ struct Braids : Module {
SampleRateConverter<1> src;
DoubleRingBuffer<Frame<1>, 256> outputBuffer;
bool lastTrig = false;
bool lowCpu = false;

Braids();
void step() override;
@@ -53,6 +54,10 @@ struct Braids : Module {
json_array_insert_new(settingsJ, i, settingJ);
}
json_object_set_new(rootJ, "settings", settingsJ);

json_t *lowCpuJ = json_boolean(lowCpu);
json_object_set_new(rootJ, "lowCpu", lowCpuJ);

return rootJ;
}

@@ -66,6 +71,11 @@ struct Braids : Module {
settingsArray[i] = json_integer_value(settingJ);
}
}

json_t *lowCpuJ = json_object_get(rootJ, "lowCpu");
if (lowCpuJ) {
lowCpu = json_boolean_value(lowCpuJ);
}
}
};

@@ -118,6 +128,8 @@ void Braids::step() {
float pitchV = inputs[PITCH_INPUT].value + params[COARSE_PARAM].value + params[FINE_PARAM].value / 12.0;
if (!settings.meta_modulation)
pitchV += fm;
if (lowCpu)
pitchV += log2f(96000.0 / engineGetSampleRate());
int32_t pitch = (pitchV * 12.0 + 60) * 128;
pitch += jitter_source.Render(settings.vco_drift);
pitch = clampi(pitch, 0, 16383);
@@ -138,17 +150,26 @@ void Braids::step() {
render_buffer[i] = stmlib::Mix(sample, warped, signature);
}

// Sample rate convert
Frame<1> in[24];
for (int i = 0; i < 24; i++) {
in[i].samples[0] = render_buffer[i] / 32768.0;
if (lowCpu) {
for (int i = 0; i < 24; i++) {
Frame<1> f;
f.samples[0] = render_buffer[i] / 32768.0;
outputBuffer.push(f);
}
}
src.setRatio(engineGetSampleRate() / 96000.0);
else {
// Sample rate convert
Frame<1> in[24];
for (int i = 0; i < 24; i++) {
in[i].samples[0] = render_buffer[i] / 32768.0;
}
src.setRatio(engineGetSampleRate() / 96000.0);

int inLen = 24;
int outLen = outputBuffer.capacity();
src.process(in, &inLen, outputBuffer.endData(), &outLen);
outputBuffer.endIncr(outLen);
int inLen = 24;
int outLen = outputBuffer.capacity();
src.process(in, &inLen, outputBuffer.endData(), &outLen);
outputBuffer.endIncr(outLen);
}
}

// Output
@@ -302,6 +323,16 @@ struct BraidsSettingItem : MenuItem {
}
};

struct BraidsLowCpuItem : MenuItem {
Braids *braids;
void onAction() override {
braids->lowCpu = !braids->lowCpu;
}
void step() override {
rightText = (braids->lowCpu) ? "✔" : "";
}
};

Menu *BraidsWidget::createContextMenu() {
Menu *menu = ModuleWidget::createContextMenu();

@@ -313,6 +344,7 @@ Menu *BraidsWidget::createContextMenu() {
menu->pushChild(construct<BraidsSettingItem>(&MenuEntry::text, "META", &BraidsSettingItem::setting, &braids->settings.meta_modulation));
menu->pushChild(construct<BraidsSettingItem>(&MenuEntry::text, "DRFT", &BraidsSettingItem::setting, &braids->settings.vco_drift, &BraidsSettingItem::onValue, 4));
menu->pushChild(construct<BraidsSettingItem>(&MenuEntry::text, "SIGN", &BraidsSettingItem::setting, &braids->settings.signature, &BraidsSettingItem::onValue, 4));
menu->pushChild(construct<BraidsLowCpuItem>(&MenuEntry::text, "Low CPU", &BraidsLowCpuItem::braids, braids));

return menu;
}

Loading…
Cancel
Save