diff --git a/Makefile b/Makefile index 8ae9ad0..afa1ea1 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,7 @@ -ARCH ?= lin -FLAGS = -fPIC -g -Wall -O3 -msse -mfpmath=sse -ffast-math \ +FLAGS += \ -fshort-enums -DTEST \ - -I./src -I../../include -I./eurorack \ + -I./eurorack \ -Wno-unused-local-typedefs @@ -45,33 +44,4 @@ SOURCES = $(wildcard src/*.cpp) \ eurorack/warps/dsp/filter_bank.cc \ eurorack/warps/resources.cc - -ifeq ($(ARCH), lin) -LDFLAGS += -shared -TARGET = plugin.so -endif - -ifeq ($(ARCH), mac) -LDFLAGS += -shared -undefined dynamic_lookup -TARGET = plugin.dylib -endif - -ifeq ($(ARCH), win) -LDFLAGS += -shared -L../../ -lRack -TARGET = plugin.dll -endif - - -all: $(TARGET) - -dist: $(TARGET) - mkdir -p dist/AudibleInstruments - cp LICENSE* dist/AudibleInstruments/ - cp plugin.* dist/AudibleInstruments/ - cp -R res dist/AudibleInstruments/ - -clean: - rm -rfv build $(TARGET) dist - - -include ../../Makefile.inc +include ../../plugin.mk diff --git a/src/Braids.cpp b/src/Braids.cpp index 13fc743..df4b5b0 100644 --- a/src/Braids.cpp +++ b/src/Braids.cpp @@ -71,8 +71,8 @@ void Braids::step() { // Set timbre/modulation float timbre = params[TIMBRE_PARAM] + params[MODULATION_PARAM] * getf(inputs[TIMBRE_INPUT]) / 5.0; float modulation = params[COLOR_PARAM] + getf(inputs[COLOR_INPUT]) / 5.0; - int16_t param1 = mapf(clampf(timbre, 0.0, 1.0), 0.0, 1.0, 0, INT16_MAX); - int16_t param2 = mapf(clampf(modulation, 0.0, 1.0), 0.0, 1.0, 0, INT16_MAX); + int16_t param1 = rescalef(clampf(timbre, 0.0, 1.0), 0.0, 1.0, 0, INT16_MAX); + int16_t param2 = rescalef(clampf(modulation, 0.0, 1.0), 0.0, 1.0, 0, INT16_MAX); osc->set_parameters(param1, param2); // Set pitch diff --git a/src/Rings.cpp b/src/Rings.cpp index a298a92..0db9d59 100644 --- a/src/Rings.cpp +++ b/src/Rings.cpp @@ -54,33 +54,44 @@ struct Rings : Module { bool strum = false; bool lastStrum = false; float lights[2] = {}; - Trigger polyphonyTrigger; - Trigger modelTrigger; + SchmittTrigger polyphonyTrigger; + SchmittTrigger modelTrigger; int polyphonyMode = 0; int model = 0; Rings(); void step(); - json_t *toJsonData() { - json_t *root = json_object(); + json_t *toJson() { + json_t *rootJ = json_object(); - json_object_set_new(root, "polyphony", json_integer(polyphonyMode)); - json_object_set_new(root, "model", json_integer(model)); + json_object_set_new(rootJ, "polyphony", json_integer(polyphonyMode)); + json_object_set_new(rootJ, "model", json_integer(model)); - return root; + return rootJ; } - void fromJsonData(json_t *root) { - json_t *polyphonyJ = json_object_get(root, "polyphony"); + + void fromJson(json_t *rootJ) { + json_t *polyphonyJ = json_object_get(rootJ, "polyphony"); if (polyphonyJ) { polyphonyMode = json_integer_value(polyphonyJ); } - json_t *modelJ = json_object_get(root, "model"); + json_t *modelJ = json_object_get(rootJ, "model"); if (modelJ) { model = json_integer_value(modelJ); } } + + void initialize() { + polyphonyMode = 0; + model = 0; + } + + void randomize() { + polyphonyMode = randomu32() % 3; + model = randomu32() % 3; + } }; @@ -96,6 +107,9 @@ Rings::Rings() { strummer.Init(0.01, 44100.0 / 24); part.Init(reverb_buffer); string_synth.Init(reverb_buffer); + + polyphonyTrigger.setThresholds(0.0, 1.0); + modelTrigger.setThresholds(0.0, 1.0); } void Rings::step() { diff --git a/src/Tides.cpp b/src/Tides.cpp index a7b439b..e85ca26 100644 --- a/src/Tides.cpp +++ b/src/Tides.cpp @@ -42,31 +42,42 @@ struct Tides : Module { float lights[3] = {}; int frame = 0; uint8_t lastGate; - Trigger modeTrigger; - Trigger rangeTrigger; + SchmittTrigger modeTrigger; + SchmittTrigger rangeTrigger; Tides(); void step(); - json_t *toJsonData() { - json_t *root = json_object(); + json_t *toJson() { + json_t *rootJ = json_object(); - json_object_set_new(root, "mode", json_integer((int)generator.mode())); - json_object_set_new(root, "range", json_integer((int)generator.range())); + json_object_set_new(rootJ, "mode", json_integer((int) generator.mode())); + json_object_set_new(rootJ, "range", json_integer((int) generator.range())); - return root; + return rootJ; } - void fromJsonData(json_t *root) { - json_t *modeJ = json_object_get(root, "mode"); + + void fromJson(json_t *rootJ) { + json_t *modeJ = json_object_get(rootJ, "mode"); if (modeJ) { - generator.set_mode((tides::GeneratorMode)json_integer_value(modeJ)); + generator.set_mode((tides::GeneratorMode) json_integer_value(modeJ)); } - json_t *rangeJ = json_object_get(root, "range"); + json_t *rangeJ = json_object_get(rootJ, "range"); if (rangeJ) { - generator.set_range((tides::GeneratorRange)json_integer_value(rangeJ)); + generator.set_range((tides::GeneratorRange) json_integer_value(rangeJ)); } } + + void initialize() { + generator.set_range(tides::GENERATOR_RANGE_MEDIUM); + generator.set_mode(tides::GENERATOR_MODE_LOOPING); + } + + void randomize() { + generator.set_range((tides::GeneratorRange) (randomu32() % 3)); + generator.set_mode((tides::GeneratorMode) (randomu32() % 3)); + } }; @@ -77,23 +88,22 @@ Tides::Tides() { memset(&generator, 0, sizeof(generator)); generator.Init(); - generator.set_range(tides::GENERATOR_RANGE_MEDIUM); - generator.set_mode(tides::GENERATOR_MODE_LOOPING); generator.set_sync(false); + initialize(); } void Tides::step() { // TODO Save / load the state of MODE and RANGE to JSON tides::GeneratorMode mode = generator.mode(); if (modeTrigger.process(params[MODE_PARAM])) { - mode = (tides::GeneratorMode) (((int)mode + 2) % 3); + mode = (tides::GeneratorMode) (((int)mode - 1 + 3) % 3); generator.set_mode(mode); } lights[0] = (float)mode; tides::GeneratorRange range = generator.range(); if (rangeTrigger.process(params[RANGE_PARAM])) { - range = (tides::GeneratorRange) (((int)range + 2) % 3); + range = (tides::GeneratorRange) (((int)range - 1 + 3) % 3); generator.set_range(range); } lights[2] = (float)range; @@ -104,12 +114,12 @@ void Tides::step() { // Pitch float pitch = params[FREQUENCY_PARAM]; - pitch += 12.0*getf(inputs[PITCH_INPUT]); + pitch += 12.0 * getf(inputs[PITCH_INPUT]); pitch += params[FM_PARAM] * getf(inputs[FM_INPUT], 0.1) / 5.0; pitch += 60.0; // Scale to the global sample rate pitch += log2f(48000.0 / gSampleRate) * 12.0; - generator.set_pitch(clampf(pitch*0x80, -0x8000, 0x7fff)); + generator.set_pitch(clampf(pitch * 0x80, -0x8000, 0x7fff)); // Slope, smoothness, pitch int16_t shape = clampf(params[SHAPE_PARAM] + getf(inputs[SHAPE_INPUT]) / 5.0, -1.0, 1.0) * 0x7fff; @@ -154,8 +164,8 @@ void Tides::step() { uni = uni * level >> 16; bi = -bi * level >> 16; - float unif = mapf(uni, 0, 0xffff, 0.0, 8.0); - float bif = mapf(bi, -0x8000, 0x7fff, -5.0, 5.0); + float unif = rescalef(uni, 0, 0xffff, 0.0, 8.0); + float bif = rescalef(bi, -0x8000, 0x7fff, -5.0, 5.0); setf(outputs[HIGH_OUTPUT], sample.flags & tides::FLAG_END_OF_ATTACK ? 0.0 : 5.0); setf(outputs[LOW_OUTPUT], sample.flags & tides::FLAG_END_OF_RELEASE ? 0.0 : 5.0); @@ -178,7 +188,7 @@ struct TidesModeLight : ModeValueLight { TidesWidget::TidesWidget() { Tides *module = new Tides(); setModule(module); - box.size = Vec(15*14, 380); + box.size = Vec(15 * 14, 380); { Panel *panel = new LightPanel(); diff --git a/src/Warps.cpp b/src/Warps.cpp index d764efc..44e80ad 100644 --- a/src/Warps.cpp +++ b/src/Warps.cpp @@ -32,24 +32,35 @@ struct Warps : Module { warps::ShortFrame inputFrames[60] = {}; warps::ShortFrame outputFrames[60] = {}; float lights[1] = {}; - Trigger stateTrigger; + SchmittTrigger stateTrigger; Warps(); void step(); - json_t *toJsonData() { - json_t *root = json_object(); + json_t *toJson() { + json_t *rootJ = json_object(); warps::Parameters *p = modulator.mutable_parameters(); - json_object_set_new(root, "shape", json_integer(p->carrier_shape)); - return root; + json_object_set_new(rootJ, "shape", json_integer(p->carrier_shape)); + return rootJ; } - void fromJsonData(json_t *root) { - json_t *shapeJ = json_object_get(root, "shape"); + + void fromJson(json_t *rootJ) { + json_t *shapeJ = json_object_get(rootJ, "shape"); warps::Parameters *p = modulator.mutable_parameters(); if (shapeJ) { p->carrier_shape = json_integer_value(shapeJ); } } + + void initialize() { + warps::Parameters *p = modulator.mutable_parameters(); + p->carrier_shape = 0; + } + + void randomize() { + warps::Parameters *p = modulator.mutable_parameters(); + p->carrier_shape = randomu32() % 4; + } }; @@ -60,6 +71,8 @@ Warps::Warps() { memset(&modulator, 0, sizeof(modulator)); modulator.Init(96000.0f); + + stateTrigger.setThresholds(0.0, 1.0); } void Warps::step() {