Browse Source

PD: implements display from pd patch and changes message sending method to lists

tags/v1.3.0
clwe 4 years ago
parent
commit
1ae8bdbc36
2 changed files with 153 additions and 109 deletions
  1. +106
    -104
      examples/gain.pd
  2. +47
    -5
      src/LibPDEngine.cpp

+ 106
- 104
examples/gain.pd View File

@@ -1,106 +1,108 @@
#N canvas 2220 331 805 580 12;
#X obj 112 43 adc~ 1 2 3 4 5 6, f 47;
#X obj 113 281 dac~ 1 2 3 4 5 6, f 47;
#X obj 112 127 *~ 1;
#X obj 137 94 r K1;
#X obj 178 126 *~ 1;
#X obj 242 128 *~ 1;
#X obj 308 127 *~ 1;
#X obj 372 127 *~ 1;
#X obj 438 126 *~ 1;
#X obj 203 93 r K2;
#X obj 267 93 r K3;
#X obj 333 94 r K4;
#X obj 397 93 r K5;
#X obj 463 93 r K6;
#X obj 290 502 print toVCV;
#X msg 267 315 L3 \$1 0 0;
#X msg 333 347 L4 \$1 0 0;
#X msg 463 348 L6 \$1 0 0;
#X msg 136 314 L1 \$1 0 0;
#X msg 203 346 L2 \$1 0 0;
#X msg 397 317 L5 \$1 0 0;
#X obj 112 230 *~ 1;
#X obj 178 229 *~ 1;
#X obj 242 231 *~ 1;
#X obj 308 230 *~ 1;
#X obj 372 230 *~ 1;
#X obj 438 229 *~ 1;
#X obj 147 158 r S1;
#X obj 213 157 r S2;
#X obj 277 157 r S3;
#X obj 343 158 r S4;
#X obj 407 157 r S5;
#X obj 473 158 r S6;
#X obj 473 197 - 1;
#X obj 407 196 - 1;
#X obj 343 194 - 1;
#X obj 277 195 - 1;
#X obj 213 196 - 1;
#X obj 147 195 - 1;
#X msg 146 404 S1 \$1 0 0;
#X msg 213 436 S2 \$1 0 0;
#X msg 277 405 S3 \$1 0 0;
#X msg 343 438 S4 \$1 0 0;
#X msg 407 407 S5 \$1 0 0;
#X msg 473 437 S6 \$1 0 0;
#N canvas 1187 297 729 742 12;
#X obj 153 257 adc~ 1 2 3 4 5 6, f 47;
#X obj 153 427 dac~ 1 2 3 4 5 6, f 47;
#X obj 154 297 *~ 1;
#X obj 218 296 *~ 1;
#X obj 282 298 *~ 1;
#X obj 348 297 *~ 1;
#X obj 412 297 *~ 1;
#X obj 478 296 *~ 1;
#X obj 330 663 print toVCV;
#X msg 307 476 L3 \$1 0 0;
#X msg 373 508 L4 \$1 0 0;
#X msg 503 509 L6 \$1 0 0;
#X msg 176 475 L1 \$1 0 0;
#X msg 243 507 L2 \$1 0 0;
#X msg 437 478 L5 \$1 0 0;
#X obj 154 376 *~ 1;
#X obj 218 375 *~ 1;
#X obj 282 377 *~ 1;
#X obj 348 376 *~ 1;
#X obj 412 376 *~ 1;
#X obj 478 375 *~ 1;
#X msg 186 565 S1 \$1 0 0;
#X msg 253 597 S2 \$1 0 0;
#X msg 317 566 S3 \$1 0 0;
#X msg 383 599 S4 \$1 0 0;
#X msg 447 568 S5 \$1 0 0;
#X msg 513 598 S6 \$1 0 0;
#X obj 179 104 r fromVCV;
#X obj 179 143 route K1 K2 K3 K4 K5 K6, f 56;
#X obj 188 198 route S1 S2 S3 S4 S5 S6, f 56;
#X obj 187 341 == 0;
#X obj 253 342 == 0;
#X obj 317 341 == 0;
#X obj 383 340 == 0;
#X obj 447 342 == 0;
#X obj 513 343 == 0;
#X msg 89 622 display \$1 \$2;
#X obj 80 582 pack f f;
#X obj 107 526 t b f;
#X connect 0 0 2 0;
#X connect 0 1 4 0;
#X connect 0 2 5 0;
#X connect 0 3 6 0;
#X connect 0 4 7 0;
#X connect 0 5 8 0;
#X connect 2 0 21 0;
#X connect 3 0 2 1;
#X connect 3 0 18 0;
#X connect 4 0 22 0;
#X connect 5 0 23 0;
#X connect 6 0 24 0;
#X connect 7 0 25 0;
#X connect 8 0 26 0;
#X connect 9 0 4 1;
#X connect 9 0 19 0;
#X connect 10 0 5 1;
#X connect 10 0 15 0;
#X connect 11 0 6 1;
#X connect 11 0 16 0;
#X connect 12 0 7 1;
#X connect 12 0 20 0;
#X connect 13 0 8 1;
#X connect 13 0 17 0;
#X connect 15 0 14 0;
#X connect 16 0 14 0;
#X connect 17 0 14 0;
#X connect 18 0 14 0;
#X connect 19 0 14 0;
#X connect 20 0 14 0;
#X connect 21 0 1 0;
#X connect 22 0 1 1;
#X connect 23 0 1 2;
#X connect 24 0 1 3;
#X connect 25 0 1 4;
#X connect 26 0 1 5;
#X connect 27 0 38 0;
#X connect 27 0 39 0;
#X connect 0 1 3 0;
#X connect 0 2 4 0;
#X connect 0 3 5 0;
#X connect 0 4 6 0;
#X connect 0 5 7 0;
#X connect 2 0 15 0;
#X connect 3 0 16 0;
#X connect 4 0 17 0;
#X connect 5 0 18 0;
#X connect 6 0 19 0;
#X connect 7 0 20 0;
#X connect 9 0 8 0;
#X connect 10 0 8 0;
#X connect 11 0 8 0;
#X connect 12 0 8 0;
#X connect 13 0 8 0;
#X connect 14 0 8 0;
#X connect 15 0 1 0;
#X connect 16 0 1 1;
#X connect 17 0 1 2;
#X connect 18 0 1 3;
#X connect 19 0 1 4;
#X connect 20 0 1 5;
#X connect 21 0 8 0;
#X connect 22 0 8 0;
#X connect 23 0 8 0;
#X connect 24 0 8 0;
#X connect 25 0 8 0;
#X connect 26 0 8 0;
#X connect 27 0 28 0;
#X connect 28 0 2 1;
#X connect 28 0 12 0;
#X connect 28 0 37 0;
#X connect 28 0 40 0;
#X connect 29 0 36 0;
#X connect 29 0 41 0;
#X connect 30 0 35 0;
#X connect 30 0 42 0;
#X connect 31 0 34 0;
#X connect 31 0 43 0;
#X connect 32 0 33 0;
#X connect 32 0 44 0;
#X connect 33 0 26 1;
#X connect 34 0 25 1;
#X connect 35 0 24 1;
#X connect 36 0 23 1;
#X connect 37 0 22 1;
#X connect 38 0 21 1;
#X connect 39 0 14 0;
#X connect 40 0 14 0;
#X connect 41 0 14 0;
#X connect 42 0 14 0;
#X connect 43 0 14 0;
#X connect 44 0 14 0;
#X connect 28 1 3 1;
#X connect 28 1 13 0;
#X connect 28 1 38 0;
#X connect 28 2 4 1;
#X connect 28 2 9 0;
#X connect 28 3 5 1;
#X connect 28 3 10 0;
#X connect 28 4 6 1;
#X connect 28 4 14 0;
#X connect 28 5 7 1;
#X connect 28 5 11 0;
#X connect 28 6 29 0;
#X connect 29 0 30 0;
#X connect 29 0 21 0;
#X connect 29 1 31 0;
#X connect 29 1 22 0;
#X connect 29 2 32 0;
#X connect 29 2 23 0;
#X connect 29 3 33 0;
#X connect 29 3 24 0;
#X connect 29 4 34 0;
#X connect 29 4 25 0;
#X connect 29 5 35 0;
#X connect 29 5 26 0;
#X connect 30 0 15 1;
#X connect 31 0 16 1;
#X connect 32 0 17 1;
#X connect 33 0 18 1;
#X connect 34 0 19 1;
#X connect 35 0 20 1;
#X connect 36 0 8 0;
#X connect 37 0 36 0;
#X connect 38 0 37 0;
#X connect 38 1 37 1;

+ 47
- 5
src/LibPDEngine.cpp View File

@@ -11,6 +11,8 @@ using namespace rack;

float g_lights[NUM_ROWS][3] = {};
float g_switchLights[NUM_ROWS][3] = {};
std::string g_utility[2] = {};
bool g_display_is_valid = false;

std::vector<std::string> split (const std::string &s, char delim) {
std::vector<std::string> result;
@@ -52,6 +54,7 @@ struct LibPDEngine : ScriptEngine {
float _input[BUFFERSIZE] = {};// = (float*)malloc(1024*2*sizeof(float));
const static std::map<std::string, int> _light_map;
const static std::map<std::string, int> _switchLight_map;
const static std::map<std::string, int> _utility_map;

std::string getEngineName() override {
return "Pure Data";
@@ -131,6 +134,11 @@ struct LibPDEngine : ScriptEngine {
sendSwitch(i, block->switches[i]);
}
}

// display
if(g_display_is_valid){
display(g_utility[1]);
}
// process samples in libpd
_ticks = 1;
libpd_process_float(_ticks, _input, _output);
@@ -158,7 +166,7 @@ void LibPDEngine::receiveLights(const char *s) {
std::vector<std::string> atoms = split (str, ' ');

if(atoms[0]=="toVCV:"){
// light list
// parse lights list
bool light_is_valid = true;
int light_idx = -1;
try {
@@ -177,7 +185,7 @@ void LibPDEngine::receiveLights(const char *s) {
else {
// error
}
// parse switch lights list
bool switchLight_is_valid = true;
int switchLight_idx = -1;
try {
@@ -196,9 +204,34 @@ void LibPDEngine::receiveLights(const char *s) {
else {
// error
}

// parse switch lights list
bool utility_is_valid = true;
int utility_idx = -1;
try {
utility_idx = _utility_map.at(atoms[1]); // map::at throws an out-of-range
}
catch (const std::out_of_range& oor) {
utility_is_valid = false;
//g_display_is_valid = true;
//display("Warning:"+atoms[1]+" not found!");
}
//std::cout << v[1] << ", " << g_led_map[v[1]] << std::endl;
if(utility_is_valid && atoms.size()>=3){
g_utility[0] = atoms[1]; // display
g_utility[1] = {""};
for(int i=0; i<atoms.size()-2; i++){
g_utility[1] += " " +atoms[i+2]; // concatenate message
}
g_display_is_valid = true;
}
else {
// error
}
}
else {
// do nothing
// print out on command line
std::cout << std::string(s) << std::endl;
}
}

@@ -238,14 +271,23 @@ const std::map<std::string, int> LibPDEngine::_switchLight_map{
{ "S6", 5 }
};

const std::map<std::string, int> LibPDEngine::_utility_map{
{ "display", 0 }
};


void LibPDEngine::sendKnob(const int idx, const float value){
std::string knob = "K"+std::to_string(idx+1);
libpd_float(knob.c_str(), value);
libpd_start_message(1);
libpd_add_float(value);
libpd_finish_message("fromVCV", knob.c_str());
}

void LibPDEngine::sendSwitch(const int idx, const bool value){
std::string sw = "S"+std::to_string(idx+1);
libpd_float(sw.c_str(), value);
libpd_start_message(1);
libpd_add_float(value);
libpd_finish_message("fromVCV", sw.c_str());
}

void LibPDEngine::sendInitialStates(const ProcessBlock* block){


Loading…
Cancel
Save