From 2e74c3148319a6b77665d38fc5428e975edc8c9c Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Fri, 20 Oct 2017 05:32:19 -0400 Subject: [PATCH] Added Low CPU mode to Braids --- src/Braids.cpp | 50 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/src/Braids.cpp b/src/Braids.cpp index 55e84b1..0f72d1c 100644 --- a/src/Braids.cpp +++ b/src/Braids.cpp @@ -39,6 +39,7 @@ struct Braids : Module { SampleRateConverter<1> src; DoubleRingBuffer, 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(&MenuEntry::text, "META", &BraidsSettingItem::setting, &braids->settings.meta_modulation)); menu->pushChild(construct(&MenuEntry::text, "DRFT", &BraidsSettingItem::setting, &braids->settings.vco_drift, &BraidsSettingItem::onValue, 4)); menu->pushChild(construct(&MenuEntry::text, "SIGN", &BraidsSettingItem::setting, &braids->settings.signature, &BraidsSettingItem::onValue, 4)); + menu->pushChild(construct(&MenuEntry::text, "Low CPU", &BraidsLowCpuItem::braids, braids)); return menu; }