Skip to content

Commit

Permalink
0.6.5
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastien-bouffier committed May 11, 2018
1 parent 6001cc5 commit ec83c27
Show file tree
Hide file tree
Showing 33 changed files with 2,177 additions and 4,866 deletions.
5 changes: 3 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
RACK_DIR ?= ../..
SLUG = Bidoo
VERSION = 0.6.3
VERSION = 0.6.5
DISTRIBUTABLES += $(wildcard LICENSE*) res

# Static libs
Expand All @@ -19,7 +19,8 @@ $(mpg123):
cd dep/mpg123-1.25.8 && $(MAKE)
cd dep/mpg123-1.25.8 && $(MAKE) install

FLAGS += -DUSE_KISS_FFT -Idep/include -I./src/dep/audiofile -I./src/dep/filters -I./src/dep/freeverb -I./src/dep/gist/libs/kiss_fft130 -I./src/dep/gist/src \
FLAGS += -DUSE_KISS_FFT -Idep/include -I./src/dep/audiofile -I./src/dep/filters -I./src/dep/freeverb \
-I./src/dep/gist/libs/kiss_fft130 -I./src/dep/gist/src \
-I./src/dep/gist/src/mfcc -I./src/dep/gist/src/core -I./src/dep/gist/src/fft \
-I./src/dep/gist/src/onset-detection-functions -I./src/dep/gist/src/pitch

Expand Down
28 changes: 4 additions & 24 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Bidoo's plugins for [VCVRack](https://vcvrack.com)

<!-- Version and License Badges -->
![Version](https://img.shields.io/badge/version-0.6.3-green.svg?style=flat-square)
![Version](https://img.shields.io/badge/version-0.6.5-green.svg?style=flat-square)
![License](https://img.shields.io/badge/license-BSD3-blue.svg?style=flat-square)
![Language](https://img.shields.io/badge/language-C++-yellow.svg?style=flat-square)

Expand All @@ -13,31 +13,11 @@ You can find information on that plugins pack in the [wiki](https://github.com/s

## Last changes

01/05/2018 :
11/05/2018 => 0.6.5

dTrOY pitch quantize has 2 modes i.e. full quantize (meaning root note added in quantization) or partial (pitch is quantized and root note added on top). You can Copy/Paste patterns via the menu.
μ. can be viewed as a step in a sequence. Link some of them and you will build a full sequence path. When moving the cursor over the knobs and ports the display shows a description and the current value of the focused object. As usual black ports are inputs and the red ones outputs. To start experimenting link some units with bpm ports so the first one will become the master tempo for the chain. Link gate and CV at the bottom to create the path for the signal. Link step end ports with step start ones to build the order of steps. At that stage you can use the alternate end of step output port to fork the path and adjust the corresponding probability. Maybe you need that under some circumstances a step is stopped .. use the inhibit port. Once the chain is made set the tempo with the first step (one fast knob and a dedicated one for decimals). Then set the length of each step (two controls too as for bpm) 100% means a quarter for a 4/4 signature, 50% one eighth, 200% an half etc... To introduce swing use decimal values for the step length. Now choose the length of the trigs in percentage of the step length, the CV value, the probability of the trig to be played, the probability of the alternate port to be use instead of the standard end of step port, the trig repeat count and the distance between retrigs. If the trig length is greater than the distance then the trigs will merge. You have two small led buttons between gate and CV in and out ports. They activate the stack mode on those ports. By default a step plays its trigs when active and let the signal pass thru the ports when not active. If you activate the stack mode the incoming signal will be added to the trigs data when the step is active. You can manually launch a step with the left top led button and mute the step with the right one. Modulation ports are available for almost all parameters.

16/04/2018 :

0.6.2

cANARd's zoom by drag up and down is 10% by default and 100% when Shift is pressed. Added a transient detection tool (via menu) the threshold is set by the knob under the End Of Cycle output. Needs improvements.

15/04/2018 : cANARd's waveform display is able to zoom. Left mouse pressed => up (zoom in) & down (zoom out).

04/04/18 : A big thanks to all the people who helped and supported for the 0.6 transition. Let's make music now!!!

0.6.1

LoURdE coefficients display.

dFUZE freeverb portage with first attempt to make a shimmer hack.

TiARE phase calculation fix.

antN sample rate conversion according to engine sample rate ... working ... but needs to be improved.

LoURdE is a gate tool that mixes and compares 3 inputs to a threshold.
This release comes with another module Σ which is a simple merge tool .. essential with μ in order to merge end of steps ports or gate and CV ones.

## License

Expand Down
168 changes: 0 additions & 168 deletions res/LAZAGNE.svg

This file was deleted.

189 changes: 0 additions & 189 deletions res/LAZAGNEtemp.svg

This file was deleted.

449 changes: 449 additions & 0 deletions res/MU.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
550 changes: 550 additions & 0 deletions res/MUtemp.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
228 changes: 228 additions & 0 deletions res/SIGMA.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
331 changes: 331 additions & 0 deletions res/SIGMAtemp.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
109 changes: 92 additions & 17 deletions src/BORDL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -346,11 +346,13 @@ struct BORDL : Module {
int selectedPattern = 0;
int playedPattern = 0;
bool pitchMode = false;
bool pitchQuantizeMode = true;
bool updateFlag = false;
bool probGate = true;
float rndPitch = 0.0f;
float accent = 5.0f;
bool loadedFromJson = false;
int copyPattern = -1;

PatternPlus patterns[16];

Expand Down Expand Up @@ -381,6 +383,7 @@ struct BORDL : Module {
json_object_set_new(rootJ, "playMode", json_integer(playMode));
json_object_set_new(rootJ, "countMode", json_integer(countMode));
json_object_set_new(rootJ, "pitchMode", json_boolean(pitchMode));
json_object_set_new(rootJ, "pitchQuantizeMode", json_boolean(pitchQuantizeMode));
json_object_set_new(rootJ, "selectedPattern", json_integer(selectedPattern));
json_object_set_new(rootJ, "playedPattern", json_integer(playedPattern));

Expand Down Expand Up @@ -446,6 +449,9 @@ struct BORDL : Module {
json_t *pitchModeJ = json_object_get(rootJ, "pitchMode");
if (pitchModeJ)
pitchMode = json_is_true(pitchModeJ);
json_t *pitchQuantizeModeJ = json_object_get(rootJ, "pitchQuantizeMode");
if (pitchQuantizeModeJ)
pitchQuantizeMode = json_is_true(pitchQuantizeModeJ);
json_t *trigsJ = json_object_get(rootJ, "trigs");
if (trigsJ) {
for (int i = 0; i < 8; i++) {
Expand Down Expand Up @@ -621,13 +627,14 @@ struct BORDL : Module {
float closestDist = 10.0f;
int octaveInVolts = int(voltsIn);
for (int i = 0; i < notesInScale; i++) {
float scaleNoteInVolts = octaveInVolts + ((rootNote + curScaleArr[i]) / 12.0f);
float scaleNoteInVolts = octaveInVolts + (((pitchQuantizeMode ? rootNote : 0.0f) + curScaleArr[i]) / 12.0f);
float distAway = fabs(voltsIn - scaleNoteInVolts);
if(distAway < closestDist){
closestVal = scaleNoteInVolts;
closestDist = distAway;
}
}
closestVal += pitchQuantizeMode ? 0.0f : (rootNote / 12.0f);
return closestVal;
}
};
Expand Down Expand Up @@ -1196,19 +1203,30 @@ struct BORDLRandGatesItem : MenuItem {
};

struct BORDLRandSlideSkipItem : MenuItem {
BORDL *dtroyModule;
BORDL *bordlModule;
void onAction(EventAction &e) override {
dtroyModule->randomizeSlidesSkips();
bordlModule->randomizeSlidesSkips();
}
};

struct BORDLPitchModeItem : MenuItem {
BORDL *dtroyModule;
BORDL *bordlModule;
void onAction(EventAction &e) override {
dtroyModule->pitchMode = !dtroyModule->pitchMode;
bordlModule->pitchMode = !bordlModule->pitchMode;
}
void step() override {
rightText = dtroyModule->pitchMode ? "" : "";
rightText = bordlModule->pitchMode ? "" : "";
MenuItem::step();
}
};

struct BORDLPitchQuantizeModeItem : MenuItem {
BORDL *bordlModule;
void onAction(EventAction &e) override {
bordlModule->pitchQuantizeMode = !bordlModule->pitchQuantizeMode;
}
void step() override {
rightText = bordlModule->pitchQuantizeMode ? "" : "";
MenuItem::step();
}
};
Expand All @@ -1222,7 +1240,7 @@ struct DisconnectMenuItem : MenuItem {

struct ResetMenuItem : MenuItem {
BORDLWidget *bordlWidget;
BORDL *dtroy;
BORDL *bordlModule;
void onAction(EventAction &e) override {
for (int i = 0; i < BORDL::NUM_PARAMS; i++){
if (i != BORDL::PATTERN_PARAM) {
Expand All @@ -1234,11 +1252,11 @@ struct ResetMenuItem : MenuItem {
}
}
}
dtroy->updateFlag = false;
dtroy->reset();
dtroy->playMode = 0;
dtroy->countMode = 0;
dtroy->updateFlag = true;
bordlModule->updateFlag = false;
bordlModule->reset();
bordlModule->playMode = 0;
bordlModule->countMode = 0;
bordlModule->updateFlag = true;
}
};

Expand All @@ -1265,12 +1283,50 @@ struct DeleteMenuItem : MenuItem {
}
};

struct BORDLCopyItem : MenuItem {
BORDL *bordlModule;
void onAction(EventAction &e) override {
bordlModule->copyPattern = bordlModule->selectedPattern;
}
};

struct BORDLPasteItem : MenuItem {
BORDL *bordlModule;
BORDLWidget *bordlWidget;
void onAction(EventAction &e) override {
if (bordlModule && bordlWidget && (bordlModule->copyPattern != bordlModule->selectedPattern) && bordlModule->updateFlag)
{
bordlModule->updateFlag = false;
bordlWidget->stepsParam->setValue(bordlModule->patterns[bordlModule->copyPattern].numberOfStepsParam);
bordlWidget->rootNoteParam->setValue(bordlModule->patterns[bordlModule->copyPattern].rootNote);
bordlWidget->scaleParam->setValue(bordlModule->patterns[bordlModule->copyPattern].scale);
bordlWidget->gateTimeParam->setValue(bordlModule->patterns[bordlModule->copyPattern].gateTime);
bordlWidget->slideTimeParam->setValue(bordlModule->patterns[bordlModule->copyPattern].slideTime);
bordlWidget->sensitivityParam->setValue(bordlModule->patterns[bordlModule->copyPattern].sensitivity);
bordlModule->playMode = bordlModule->patterns[bordlModule->copyPattern].playMode;
bordlModule->countMode = bordlModule->patterns[bordlModule->copyPattern].countMode;
for (int i = 0; i < 8; i++) {
bordlWidget->pitchParams[i]->setValue(bordlModule->patterns[bordlModule->copyPattern].steps[i].pitch);
bordlWidget->pulseParams[i]->setValue(bordlModule->patterns[bordlModule->copyPattern].steps[i].pulsesParam);
bordlWidget->typeParams[i]->setValue(bordlModule->patterns[bordlModule->copyPattern].steps[i].type);
bordlModule->skipState[i] = bordlModule->patterns[bordlModule->copyPattern].steps[i].skipParam ? 't' : 'f';
bordlModule->slideState[i] = bordlModule->patterns[bordlModule->copyPattern].steps[i].slide ? 't' : 'f';
bordlWidget->pulseProbParams[i]->setValue(bordlModule->patterns[bordlModule->copyPattern].steps[i].gateProb);
bordlWidget->pitchRndParams[i]->setValue(bordlModule->patterns[bordlModule->copyPattern].steps[i].pitchRnd);
bordlWidget->accentParams[i]->setValue(bordlModule->patterns[bordlModule->copyPattern].steps[i].accent);
bordlWidget->rndAccentParams[i]->setValue(bordlModule->patterns[bordlModule->copyPattern].steps[i].rndAccent);
}
bordlModule->updateFlag = true;
}
}
};

Menu *BORDLWidget::createContextMenu() {
BORDLWidget *bordlWidget = dynamic_cast<BORDLWidget*>(this);
assert(bordlWidget);

BORDL *dtroyModule = dynamic_cast<BORDL*>(module);
assert(dtroyModule);
BORDL *bordlModule = dynamic_cast<BORDL*>(module);
assert(bordlModule);

Menu *menu = gScene->createMenu();

Expand All @@ -1282,7 +1338,7 @@ Menu *BORDLWidget::createContextMenu() {
resetItem->text = "Initialize";
resetItem->rightText = "+I";
resetItem->bordlWidget = this;
resetItem->dtroy = dtroyModule;
resetItem->bordlModule = bordlModule;
menu->addChild(resetItem);

DisconnectMenuItem *disconnectItem = new DisconnectMenuItem();
Expand Down Expand Up @@ -1317,17 +1373,36 @@ Menu *BORDLWidget::createContextMenu() {

BORDLRandSlideSkipItem *randomizeSlideSkipItem = new BORDLRandSlideSkipItem();
randomizeSlideSkipItem->text = "Randomize slides and skips";
randomizeSlideSkipItem->dtroyModule = dtroyModule;
randomizeSlideSkipItem->bordlModule = bordlModule;
menu->addChild(randomizeSlideSkipItem);

MenuLabel *spacerLabel2 = new MenuLabel();
menu->addChild(spacerLabel2);

BORDLCopyItem *copyItem = new BORDLCopyItem();
copyItem->text = "Copy pattern";
copyItem->bordlModule = bordlModule;
menu->addChild(copyItem);

BORDLPasteItem *pasteItem = new BORDLPasteItem();
pasteItem->text = "Paste pattern";
pasteItem->bordlModule = bordlModule;
pasteItem->bordlWidget = bordlWidget;
menu->addChild(pasteItem);

MenuLabel *spacerLabel3 = new MenuLabel();
menu->addChild(spacerLabel3);

BORDLPitchModeItem *pitchModeItem = new BORDLPitchModeItem();
pitchModeItem->text = "Pitch mode continuous/triggered";
pitchModeItem->dtroyModule = dtroyModule;
pitchModeItem->bordlModule = bordlModule;
menu->addChild(pitchModeItem);

BORDLPitchQuantizeModeItem *pitchQuantizeModeItem = new BORDLPitchQuantizeModeItem();
pitchQuantizeModeItem->text = "Pitch full quantize";
pitchQuantizeModeItem->bordlModule = bordlModule;
menu->addChild(pitchQuantizeModeItem);

return menu;
}

Expand Down
3 changes: 2 additions & 1 deletion src/Bidoo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ void init(rack::Plugin *p) {

p->addModel(modelDTROY);
p->addModel(modelBORDL);
p->addModel(modelMU);
p->addModel(modelTOCANTE);
p->addModel(modelCHUTE);
p->addModel(modelLATE);
Expand All @@ -29,5 +30,5 @@ void init(rack::Plugin *p) {
p->addModel(modelZINC);
p->addModel(modelDFUZE);
p->addModel(modelVOID);
p->addModel(modelLAZAGNE);
p->addModel(modelSIGMA);
}
3 changes: 2 additions & 1 deletion src/Bidoo.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,5 @@ extern Model *modelVOID;
extern Model *modelCANARD;
extern Model *modelLOURDE;
extern Model *modelDFUZE;
extern Model *modelLAZAGNE;
extern Model *modelMU;
extern Model *modelSIGMA;
3 changes: 3 additions & 0 deletions src/DTROY.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -419,6 +419,9 @@ struct DTROY : Module {
json_t *pitchModeJ = json_object_get(rootJ, "pitchMode");
if (pitchModeJ)
pitchMode = json_is_true(pitchModeJ);
json_t *pitchQuantizeModeJ = json_object_get(rootJ, "pitchQuantizeMode");
if (pitchQuantizeModeJ)
pitchQuantizeMode = json_is_true(pitchQuantizeModeJ);
json_t *trigsJ = json_object_get(rootJ, "trigs");
if (trigsJ) {
for (int i = 0; i < 8; i++) {
Expand Down
74 changes: 0 additions & 74 deletions src/LAZAGNE.cpp

This file was deleted.

Loading

0 comments on commit ec83c27

Please sign in to comment.