add
This commit is contained in:
parent
ba1720f74d
commit
752b1f1bc3
3 changed files with 377 additions and 267 deletions
|
|
@ -1 +0,0 @@
|
|||
src/rainboard.ino
|
||||
198
arduino/rainboard/rainboard.ino
Normal file
198
arduino/rainboard/rainboard.ino
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
//
|
||||
// a 2-dimensional ringringrain touch-pad(board)
|
||||
//
|
||||
// D. Yi @ 2023 4 9
|
||||
//
|
||||
|
||||
////network!
|
||||
|
||||
#include <ConfigurableFirmata.h>
|
||||
|
||||
const char* ssid = "nolink2";
|
||||
const char* password = "2222277777";
|
||||
const int NETWORK_PORT = 27016;
|
||||
|
||||
#include <WiFi.h>
|
||||
#include "utility/WiFiClientStream.h"
|
||||
#include "utility/WiFiServerStream.h"
|
||||
WiFiServerStream serverStream(NETWORK_PORT);
|
||||
|
||||
#include <ArduinoOTA.h>
|
||||
|
||||
////pad structure
|
||||
|
||||
// #define FLIPPED
|
||||
// --> comment/uncomment for horizontal flipping of the installation.
|
||||
|
||||
#define NUMKEYS 42 // columns : 14, rows : 3
|
||||
// --> how many keys are available for this pad
|
||||
|
||||
int keystat[NUMKEYS] = {0, };
|
||||
// --> a buffer to store statuses of all keys
|
||||
// --> needed to extract only 'the change' of key statuses
|
||||
|
||||
#define MAXCHANGES 10
|
||||
int keychanges[MAXCHANGES] = {0, };
|
||||
int n_keychg = 0;
|
||||
// --> for monitoring only 'changed' keys.
|
||||
|
||||
#define NUMCOLS 14
|
||||
#ifdef FLIPPED
|
||||
int pins_cols[NUMCOLS] = {16, 15, 17, 18, 20, 19, 33, 34, 35, 36, 37, 38, 39, 40}; //14
|
||||
// --> cols is horizontal offsets on the board
|
||||
// --> to be read as input.
|
||||
#else
|
||||
int pins_cols[NUMCOLS] = {40, 39, 38, 37, 36, 35, 34, 33, 19, 20, 18, 17, 15, 16}; //14
|
||||
// --> cols is horizontal offsets on the board
|
||||
// --> to be read as input.
|
||||
#endif
|
||||
|
||||
#define NUMROWS 2
|
||||
int pins_rows[NUMROWS] = {7, 6}; //2
|
||||
// #define NUMROWS 3
|
||||
// int pins_rows[NUMROWS] = {8, 7, 6}; //3
|
||||
// --> rows is vertical offsets on the board
|
||||
// --> to be driven as output (or high impedance)
|
||||
|
||||
void setup()
|
||||
{
|
||||
//serial
|
||||
Serial.begin(115200);
|
||||
|
||||
//pinmodes
|
||||
// cols : to be read as input. (PULL-UP)
|
||||
for (int idx = 0; idx < NUMCOLS; idx++) {
|
||||
pinMode(pins_cols[idx], INPUT_PULLUP);
|
||||
}
|
||||
|
||||
//wifi
|
||||
WiFi.mode(WIFI_STA);
|
||||
// Connect to WiFi network
|
||||
Serial.println();
|
||||
Serial.println();
|
||||
Serial.print("Connecting to ");
|
||||
Serial.println(ssid);
|
||||
WiFi.begin(ssid, password);
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
Serial.print(".");
|
||||
}
|
||||
Serial.println("");
|
||||
|
||||
Serial.println("WiFi connected");
|
||||
Serial.println("IP address: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
Serial.println("Mac address: " + WiFi.macAddress());
|
||||
|
||||
//firmata
|
||||
Firmata.disableBlinkVersion();
|
||||
Firmata.begin(serverStream);
|
||||
|
||||
//ota
|
||||
ArduinoOTA.onStart([]() {
|
||||
Serial.println("Start");
|
||||
});
|
||||
ArduinoOTA.onEnd([]() {
|
||||
Serial.println("\nEnd");
|
||||
});
|
||||
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
|
||||
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
|
||||
});
|
||||
ArduinoOTA.onError([](ota_error_t error) {
|
||||
Serial.printf("Error[%u]: ", error);
|
||||
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
|
||||
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
|
||||
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
|
||||
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
|
||||
else if (error == OTA_END_ERROR) Serial.println("End Failed");
|
||||
});
|
||||
ArduinoOTA.begin();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
// perform a full scan of the key statuses!
|
||||
|
||||
// update row voltages
|
||||
static int row = 0;
|
||||
pinMode(pins_rows[row], INPUT); // let old 'on' row goes 'hi-z' first.
|
||||
row++;
|
||||
if (row >= NUMROWS) {
|
||||
row = 0;
|
||||
}
|
||||
pinMode(pins_rows[row], OUTPUT);
|
||||
digitalWrite(pins_rows[row], LOW); // let new 'hi-z' row goes 'on'.. -> ready to scan.
|
||||
|
||||
// 100us ~ 200us, waiting for the electricity ready...
|
||||
//delayMicroseconds(200);
|
||||
delay(2); // 2000us == 2ms
|
||||
|
||||
// read all cols
|
||||
for (int col = 0; col < NUMCOLS; col++) {
|
||||
int key = row * NUMCOLS + col;
|
||||
if (key < NUMKEYS) {
|
||||
int cur_key = !digitalRead(pins_cols[col]); //logic inversion. (HIGH = noteoff, LOW = noteon.)
|
||||
|
||||
// if it is 'changed',
|
||||
if (cur_key != keystat[key]) {
|
||||
// if there is a room to record this change,
|
||||
if (n_keychg < MAXCHANGES) {
|
||||
// make a memo.
|
||||
int keycoded = (key) * 10 + cur_key; // for example : C4 note-on --> 601 ( == 60*10 + 1)
|
||||
keychanges[n_keychg] = keycoded;
|
||||
n_keychg++;
|
||||
// send Firmata msg. over WIFI.
|
||||
Firmata.sendAnalog(0, keycoded);
|
||||
//@Pd
|
||||
//[pduino/arduino] will divide this by 1023.0 to map 0-1023 -> 0.0-1.0
|
||||
//so, to recover original values, multiply back by 1023.0.
|
||||
}
|
||||
}
|
||||
|
||||
// okay. good. now, apply the change.
|
||||
keystat[key] = cur_key;
|
||||
}
|
||||
}
|
||||
|
||||
// at the moment of 'full scan done'
|
||||
if (row == NUMROWS - 1) {
|
||||
|
||||
// // print out the buffer status.
|
||||
// for (int key = 0; key < NUMKEYS; key++) {
|
||||
// Serial.print(keystat[key]); Serial.print(" ");
|
||||
// }
|
||||
// Serial.println();
|
||||
|
||||
// print out the changes.
|
||||
for (int chg = 0; chg < n_keychg; chg++) {
|
||||
Serial.print(keychanges[chg]);
|
||||
Serial.print(" ");
|
||||
}
|
||||
|
||||
// clear 'keychanges' array
|
||||
for (int idx = 0; idx < MAXCHANGES; idx++) {
|
||||
keychanges[idx] = 0;
|
||||
n_keychg = 0;
|
||||
}
|
||||
|
||||
// send out alive counter
|
||||
static int loopcounter = 0;
|
||||
static int alivecounter = 0;
|
||||
loopcounter++;
|
||||
if (loopcounter % 100 == 0) {
|
||||
Firmata.sendAnalog(1, alivecounter);
|
||||
alivecounter++;
|
||||
if (alivecounter == 1000) {
|
||||
alivecounter = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
// // discard all incoming MIDI msgs.
|
||||
// while (usbMIDI.read()) { }
|
||||
|
||||
serverStream.maintain();
|
||||
|
||||
//
|
||||
ArduinoOTA.handle();
|
||||
}
|
||||
|
|
@ -1,198 +0,0 @@
|
|||
//
|
||||
// a 2-dimensional ringringrain touch-pad(board)
|
||||
//
|
||||
// D. Yi @ 2023 4 9
|
||||
//
|
||||
|
||||
////network!
|
||||
|
||||
#include <ConfigurableFirmata.h>
|
||||
|
||||
const char* ssid = "nolink2";
|
||||
const char* password = "2222277777";
|
||||
const int NETWORK_PORT = 27016;
|
||||
|
||||
#include <WiFi.h>
|
||||
#include "utility/WiFiClientStream.h"
|
||||
#include "utility/WiFiServerStream.h"
|
||||
WiFiServerStream serverStream(NETWORK_PORT);
|
||||
|
||||
#include <ArduinoOTA.h>
|
||||
|
||||
////pad structure
|
||||
|
||||
// #define FLIPPED
|
||||
// --> comment/uncomment for horizontal flipping of the installation.
|
||||
|
||||
#define NUMKEYS 42 // columns : 14, rows : 3
|
||||
// --> how many keys are available for this pad
|
||||
|
||||
int keystat[NUMKEYS] = {0, };
|
||||
// --> a buffer to store statuses of all keys
|
||||
// --> needed to extract only 'the change' of key statuses
|
||||
|
||||
#define MAXCHANGES 10
|
||||
int keychanges[MAXCHANGES] = {0, };
|
||||
int n_keychg = 0;
|
||||
// --> for monitoring only 'changed' keys.
|
||||
|
||||
#define NUMCOLS 14
|
||||
#ifdef FLIPPED
|
||||
int pins_cols[NUMCOLS] = {16, 15, 17, 18, 20, 19, 33, 34, 35, 36, 37, 38, 39, 40}; //14
|
||||
// --> cols is horizontal offsets on the board
|
||||
// --> to be read as input.
|
||||
#else
|
||||
int pins_cols[NUMCOLS] = {40, 39, 38, 37, 36, 35, 34, 33, 19, 20, 18, 17, 15, 16}; //14
|
||||
// --> cols is horizontal offsets on the board
|
||||
// --> to be read as input.
|
||||
#endif
|
||||
|
||||
#define NUMROWS 2
|
||||
int pins_rows[NUMROWS] = {7, 6}; //2
|
||||
// #define NUMROWS 3
|
||||
// int pins_rows[NUMROWS] = {8, 7, 6}; //3
|
||||
// --> rows is vertical offsets on the board
|
||||
// --> to be driven as output (or high impedance)
|
||||
|
||||
void setup()
|
||||
{
|
||||
//serial
|
||||
Serial.begin(115200);
|
||||
|
||||
//pinmodes
|
||||
// cols : to be read as input. (PULL-UP)
|
||||
for (int idx = 0; idx < NUMCOLS; idx++) {
|
||||
pinMode(pins_cols[idx], INPUT_PULLUP);
|
||||
}
|
||||
|
||||
//wifi
|
||||
WiFi.mode(WIFI_STA);
|
||||
// Connect to WiFi network
|
||||
Serial.println();
|
||||
Serial.println();
|
||||
Serial.print("Connecting to ");
|
||||
Serial.println(ssid);
|
||||
WiFi.begin(ssid, password);
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
Serial.print(".");
|
||||
}
|
||||
Serial.println("");
|
||||
|
||||
Serial.println("WiFi connected");
|
||||
Serial.println("IP address: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
Serial.println("Mac address: " + WiFi.macAddress());
|
||||
|
||||
//firmata
|
||||
Firmata.disableBlinkVersion();
|
||||
Firmata.begin(serverStream);
|
||||
|
||||
//ota
|
||||
ArduinoOTA.onStart([]() {
|
||||
Serial.println("Start");
|
||||
});
|
||||
ArduinoOTA.onEnd([]() {
|
||||
Serial.println("\nEnd");
|
||||
});
|
||||
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
|
||||
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
|
||||
});
|
||||
ArduinoOTA.onError([](ota_error_t error) {
|
||||
Serial.printf("Error[%u]: ", error);
|
||||
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
|
||||
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
|
||||
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
|
||||
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
|
||||
else if (error == OTA_END_ERROR) Serial.println("End Failed");
|
||||
});
|
||||
ArduinoOTA.begin();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
// perform a full scan of the key statuses!
|
||||
|
||||
// update row voltages
|
||||
static int row = 0;
|
||||
pinMode(pins_rows[row], INPUT); // let old 'on' row goes 'hi-z' first.
|
||||
row++;
|
||||
if (row >= NUMROWS) {
|
||||
row = 0;
|
||||
}
|
||||
pinMode(pins_rows[row], OUTPUT);
|
||||
digitalWrite(pins_rows[row], LOW); // let new 'hi-z' row goes 'on'.. -> ready to scan.
|
||||
|
||||
// 100us ~ 200us, waiting for the electricity ready...
|
||||
//delayMicroseconds(200);
|
||||
delay(2); // 2000us == 2ms
|
||||
|
||||
// read all cols
|
||||
for (int col = 0; col < NUMCOLS; col++) {
|
||||
int key = row * NUMCOLS + col;
|
||||
if (key < NUMKEYS) {
|
||||
int cur_key = !digitalRead(pins_cols[col]); //logic inversion. (HIGH = noteoff, LOW = noteon.)
|
||||
|
||||
// if it is 'changed',
|
||||
if (cur_key != keystat[key]) {
|
||||
// if there is a room to record this change,
|
||||
if (n_keychg < MAXCHANGES) {
|
||||
// make a memo.
|
||||
int keycoded = (key) * 10 + cur_key; // for example : C4 note-on --> 601 ( == 60*10 + 1)
|
||||
keychanges[n_keychg] = keycoded;
|
||||
n_keychg++;
|
||||
// send Firmata msg. over WIFI.
|
||||
Firmata.sendAnalog(0, keycoded);
|
||||
//@Pd
|
||||
//[pduino/arduino] will divide this by 1023.0 to map 0-1023 -> 0.0-1.0
|
||||
//so, to recover original values, multiply back by 1023.0.
|
||||
}
|
||||
}
|
||||
|
||||
// okay. good. now, apply the change.
|
||||
keystat[key] = cur_key;
|
||||
}
|
||||
}
|
||||
|
||||
// at the moment of 'full scan done'
|
||||
if (row == NUMROWS - 1) {
|
||||
|
||||
// // print out the buffer status.
|
||||
// for (int key = 0; key < NUMKEYS; key++) {
|
||||
// Serial.print(keystat[key]); Serial.print(" ");
|
||||
// }
|
||||
// Serial.println();
|
||||
|
||||
// print out the changes.
|
||||
for (int chg = 0; chg < n_keychg; chg++) {
|
||||
Serial.print(keychanges[chg]);
|
||||
Serial.print(" ");
|
||||
}
|
||||
|
||||
// clear 'keychanges' array
|
||||
for (int idx = 0; idx < MAXCHANGES; idx++) {
|
||||
keychanges[idx] = 0;
|
||||
n_keychg = 0;
|
||||
}
|
||||
|
||||
// send out alive counter
|
||||
static int loopcounter = 0;
|
||||
static int alivecounter = 0;
|
||||
loopcounter++;
|
||||
if (loopcounter % 100 == 0) {
|
||||
Firmata.sendAnalog(1, alivecounter);
|
||||
alivecounter++;
|
||||
if (alivecounter == 1000) {
|
||||
alivecounter = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
//
|
||||
// // discard all incoming MIDI msgs.
|
||||
// while (usbMIDI.read()) { }
|
||||
|
||||
serverStream.maintain();
|
||||
|
||||
//
|
||||
ArduinoOTA.handle();
|
||||
}
|
||||
1
arduino/rainboard/src/rainboard.ino
Symbolic link
1
arduino/rainboard/src/rainboard.ino
Symbolic link
|
|
@ -0,0 +1 @@
|
|||
../rainboard.ino
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#N canvas 0 33 1006 580 10;
|
||||
#N canvas 4 23 1006 580 10;
|
||||
#X obj 924 484 loadbang;
|
||||
#X obj 21 181 pack f f;
|
||||
#X obj 128 274 clone ringringrain_piano_node 10;
|
||||
|
|
@ -16,7 +16,8 @@
|
|||
#X floatatom 21 120 5 0 0 0 - - - 0;
|
||||
#X msg 924 530 \; pd dsp 1;
|
||||
#X obj 924 507 del 5000;
|
||||
#X msg 19 515 \; pitches 0 60 62 64 65 67 69 71 72 74 76 77 79 81 83 84 86 88 89 91 93 95 96 98 100 101 103 105 107 108;
|
||||
#X msg 19 515 \; pitches 0 60 62 64 65 67 69 71 72 74 76 77 79 81 83
|
||||
84 86 88 89 91 93 95 96 98 100 101 103 105 107 108;
|
||||
#X obj 21 68 unpack f f;
|
||||
#X listbox 21 220 7 0 0 0 - - - 0;
|
||||
#X obj 235 181 pack f f;
|
||||
|
|
@ -39,10 +40,13 @@
|
|||
#X obj 169 392 *~;
|
||||
#X obj 169 431 hip~ 5;
|
||||
#X msg 42 284 bang;
|
||||
#X obj 120 331 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 27 186 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 120 331 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X obj 27 186 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
|
||||
#000000;
|
||||
#X obj 42 210 delay 2000;
|
||||
#X obj 42 234 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 42 234 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
|
||||
#000000;
|
||||
#X obj 184 290 * 6;
|
||||
#X text 32 21 sound generators - sample sound;
|
||||
#X floatatom 184 220 5 0 0 1 hands - - 0;
|
||||
|
|
@ -72,7 +76,8 @@
|
|||
#X restore 89 215 pd pan;
|
||||
#X obj 153 107 snapshot~;
|
||||
#X floatatom 228 147 5 0 0 0 - - - 0;
|
||||
#X obj 36 42 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 36 42 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
|
||||
#000000;
|
||||
#X obj 160 50 +~ 1;
|
||||
#X obj 160 77 *~ 0.5;
|
||||
#X obj 160 22 osc~ 0.1;
|
||||
|
|
@ -99,18 +104,20 @@
|
|||
#X obj 182 267 +;
|
||||
#X obj 152 267 f;
|
||||
#X obj 152 238 t b a;
|
||||
#X obj 117 217 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 117 217 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X msg 199 113 0;
|
||||
#X obj 152 72 t b a b;
|
||||
#X obj 133 76 t b a b;
|
||||
#X obj 152 215 tabread hands;
|
||||
#X obj 18 65 metro 100;
|
||||
#X obj 18 45 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 18 45 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000
|
||||
0 1;
|
||||
#X obj 117 285 f;
|
||||
#X obj 18 22 loadbang;
|
||||
#X floatatom 117 308 5 0 0 0 - - - 0;
|
||||
#X obj 117 330 outlet;
|
||||
#X obj 228 21 table hands 60;
|
||||
#X msg 152 49 60;
|
||||
#X msg 133 53 60;
|
||||
#X msg 275 80 \; hands const 0;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 2 0;
|
||||
|
|
@ -207,16 +214,19 @@
|
|||
#X obj 955 390 + 40;
|
||||
#N canvas 40 465 713 292 main 0;
|
||||
#X obj 377 175 env~;
|
||||
#X obj 427 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0;
|
||||
#X obj 427 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0
|
||||
;
|
||||
#X obj 377 199 - 100;
|
||||
#X obj 377 75 catch~ front;
|
||||
#X obj 306 129 dac~ 4 7 8;
|
||||
#X obj 587 175 env~;
|
||||
#X obj 637 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0;
|
||||
#X obj 637 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0
|
||||
;
|
||||
#X obj 587 199 - 100;
|
||||
#X obj 516 129 dac~ 2 5 6;
|
||||
#X obj 157 175 env~;
|
||||
#X obj 207 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0;
|
||||
#X obj 207 126 vu 15 120 empty empty -1 -8 0 10 #404040 #000000 1 0
|
||||
;
|
||||
#X obj 157 199 - 100;
|
||||
#X obj 16 129 dac~ 1 2 3 4 5 6 7 8;
|
||||
#X obj 157 75 catch~ rain;
|
||||
|
|
@ -259,44 +269,55 @@
|
|||
#X msg 473 508 4.8;
|
||||
#X msg 632 508 2.4;
|
||||
#X msg 579 508 1.8;
|
||||
#N canvas 586 33 852 598 ringringrain_A 0;
|
||||
#N canvas 503 23 852 598 ringringrain_A 0;
|
||||
#X obj 388 102 arduino-wifi;
|
||||
#X msg 478 102 disconnect;
|
||||
#X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 388 165 route analog;
|
||||
#X obj 182 326 t a a;
|
||||
#X obj 182 349 / 10;
|
||||
#X obj 182 372 int;
|
||||
#X obj 227 349 mod 10;
|
||||
#X obj 227 372 int;
|
||||
#X obj 110 390 pack f f;
|
||||
#X floatatom 182 298 5 0 0 1 interlaced - - 0;
|
||||
#X listbox 110 413 7 0 0 0 midi-like - - 0;
|
||||
#X obj 182 421 moses 28;
|
||||
#X floatatom 182 444 5 0 0 0 - - - 0;
|
||||
#X obj 182 336 t a a;
|
||||
#X obj 182 359 / 10;
|
||||
#X obj 182 382 int;
|
||||
#X obj 227 359 mod 10;
|
||||
#X obj 227 382 int;
|
||||
#X obj 110 400 pack f f;
|
||||
#X floatatom 108 278 5 0 0 1 interlaced - - 0;
|
||||
#X listbox 110 423 7 0 0 0 midi-like - - 0;
|
||||
#X obj 182 431 moses 28;
|
||||
#X floatatom 182 454 5 0 0 0 - - - 0;
|
||||
#X floatatom 385 445 5 0 0 0 - - - 0;
|
||||
#X obj 385 500 pack f f;
|
||||
#X listbox 385 523 7 0 0 1 synth(lower) - - 0;
|
||||
#X obj 182 500 pack f f;
|
||||
#X listbox 182 523 7 0 0 0 synth(upper) - - 0;
|
||||
#X obj 182 510 pack f f;
|
||||
#X listbox 182 533 7 0 0 0 synth(upper) - - 0;
|
||||
#X obj 385 472 - 28;
|
||||
#X obj 108 250 expr if($f1 < 140 \, $f1 \, $f1+140);
|
||||
#X obj 388 250 expr if($f1 < 140 \, $f1+140 \, $f1+280);
|
||||
#N canvas 273 125 970 258 simulation 0;
|
||||
#X obj 35 48 tgl 15 0 empty empty on/off\ (normal:z\ to\ i\ 28keys) 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 515 48 tgl 15 0 empty empty on/off\ (+shift:Z\ to\ I\ 28keys) 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 35 48 tgl 15 0 empty empty on/off\\\ (normal:z\\\ to\\\ i\\\ 28keys)
|
||||
17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 515 48 tgl 15 0 empty empty on/off\\\ (+shift:Z\\\ to\\\ I\\\ 28keys)
|
||||
17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 515 150 keyhands;
|
||||
#X floatatom 515 173 5 0 0 0 - - - 0;
|
||||
#X obj 562 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 562 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X obj 49 69 loadbang;
|
||||
#X msg 49 91 keys 122 \\\; 120 \\\; 99 \\\; 118 \\\; 98 \\\; 110 \\\; 109 \\\; 44 \\\; 46 \\\; 47 \\\; 97 \\\; 115 \\\; 100 \\\; 102 \\\; 103 \\\; 104 \\\; 106 \\\; 107 \\\; 108 \\\; 59 \\\; 113 \\\; 119 \\\; 101 \\\; 114 \\\; 116 \\\; 121 \\\; 117 \\\; 105 \\\;, f 66;
|
||||
#X msg 49 91 keys 122 \\\; 120 \\\; 99 \\\; 118 \\\; 98 \\\; 110 \\\;
|
||||
109 \\\; 44 \\\; 46 \\\; 47 \\\; 97 \\\; 115 \\\; 100 \\\; 102 \\\;
|
||||
103 \\\; 104 \\\; 106 \\\; 107 \\\; 108 \\\; 59 \\\; 113 \\\; 119 \\\;
|
||||
101 \\\; 114 \\\; 116 \\\; 121 \\\; 117 \\\; 105 \\\;, f 66;
|
||||
#X obj 866 19 key;
|
||||
#X floatatom 866 42 5 0 0 0 - - - 0;
|
||||
#X msg 529 91 keys 90 \\\; 88 \\\; 67 \\\; 86 \\\; 66 \\\; 78 \\\; 77 \\\; 60 \\\; 62 \\\; 63 \\\; 65 \\\; 83 \\\; 68 \\\; 70 \\\; 71 \\\; 72 \\\; 74 \\\; 75 \\\; 76 \\\; 58 \\\; 81 \\\; 87 \\\; 69 \\\; 82 \\\; 84 \\\; 89 \\\; 85 \\\; 73 \\\;, f 66;
|
||||
#X msg 529 91 keys 90 \\\; 88 \\\; 67 \\\; 86 \\\; 66 \\\; 78 \\\;
|
||||
77 \\\; 60 \\\; 62 \\\; 63 \\\; 65 \\\; 83 \\\; 68 \\\; 70 \\\; 71
|
||||
\\\; 72 \\\; 74 \\\; 75 \\\; 76 \\\; 58 \\\; 81 \\\; 87 \\\; 69 \\\;
|
||||
82 \\\; 84 \\\; 89 \\\; 85 \\\; 73 \\\;, f 66;
|
||||
#X obj 529 69 loadbang;
|
||||
#X obj 35 150 keyhands;
|
||||
#X floatatom 35 173 5 0 0 0 - - - 0;
|
||||
#X obj 82 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 82 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000
|
||||
#000000;
|
||||
#X obj 35 211 outlet;
|
||||
#X obj 515 211 outlet;
|
||||
#X obj 272 9 inlet;
|
||||
|
|
@ -316,43 +337,57 @@
|
|||
#X connect 16 0 0 0;
|
||||
#X connect 16 0 1 0;
|
||||
#X restore 650 234 pd simulation left right paper;
|
||||
#X obj 650 214 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 650 214 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 108 102 arduino-wifi;
|
||||
#X msg 198 102 disconnect;
|
||||
#X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 108 165 route analog;
|
||||
#X obj 108 211 * 1023;
|
||||
#X text 22 251 interlace ==>;
|
||||
#X text 253 421 <== split: upper/lower;
|
||||
#X text 253 431 <== split: upper/lower;
|
||||
#X obj 182 561 outlet;
|
||||
#X obj 385 561 outlet;
|
||||
#X obj 108 188 route 0 1, f 17;
|
||||
#X floatatom 221 189 5 0 0 2 alivecounter - - 0;
|
||||
#X obj 221 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 221 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X obj 303 188 timer;
|
||||
#X obj 303 165 t b b;
|
||||
#X floatatom 303 211 5 0 0 0 - - - 0;
|
||||
#X obj 308 323 del 1000;
|
||||
#X obj 308 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 308 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X msg 308 300 stop \, bang;
|
||||
#X obj 157 211 * 1023;
|
||||
#X obj 308 561 outlet;
|
||||
#X obj 501 561 outlet;
|
||||
#X obj 501 323 del 1000;
|
||||
#X obj 501 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 501 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X msg 501 300 stop \, bang;
|
||||
#X obj 388 211 * 1023;
|
||||
#X obj 388 188 route 0 1, f 17;
|
||||
#X floatatom 501 189 5 0 0 2 alivecounter - - 0;
|
||||
#X obj 501 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 501 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X obj 583 188 timer;
|
||||
#X obj 583 165 t b b;
|
||||
#X floatatom 583 211 5 0 0 0 - - - 0;
|
||||
#X obj 437 211 * 1023;
|
||||
#X msg 177 77 connect 192.168.88.111 27016;
|
||||
#X msg 457 77 connect 192.168.88.112 27016;
|
||||
#X obj 331 19 loadbang;
|
||||
#X obj 331 42 del 5000;
|
||||
#X obj 110 464 swap;
|
||||
#X obj 110 443 unpack f f;
|
||||
#X obj 110 506 route 1;
|
||||
#X obj 110 485 pack f f;
|
||||
#X obj 20 560 print noteon;
|
||||
#X obj 273 13 tgl 15 0 empty ONOFF r:ONOFF 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 273 33 sel 1 0;
|
||||
#X floatatom 219 319 5 0 0 0 - - - 0;
|
||||
#X obj 108 298 sel 401 431 121 151;
|
||||
#X connect 0 0 3 0;
|
||||
#X connect 0 1 2 0;
|
||||
#X connect 1 0 0 1;
|
||||
|
|
@ -367,9 +402,9 @@
|
|||
#X connect 8 0 15 1;
|
||||
#X connect 8 0 17 1;
|
||||
#X connect 9 0 11 0;
|
||||
#X connect 10 0 4 0;
|
||||
#X connect 10 0 66 0;
|
||||
#X connect 11 0 59 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 12 1 14 0;
|
||||
#X connect 13 0 17 0;
|
||||
#X connect 14 0 19 0;
|
||||
#X connect 15 0 16 0;
|
||||
|
|
@ -396,10 +431,12 @@
|
|||
#X connect 37 0 36 0;
|
||||
#X connect 37 1 36 1;
|
||||
#X connect 39 0 40 0;
|
||||
#X connect 39 0 46 0;
|
||||
#X connect 40 0 43 0;
|
||||
#X connect 41 0 39 0;
|
||||
#X connect 42 0 34 0;
|
||||
#X connect 45 0 46 0;
|
||||
#X connect 45 0 40 0;
|
||||
#X connect 46 0 44 0;
|
||||
#X connect 47 0 45 0;
|
||||
#X connect 48 0 21 0;
|
||||
|
|
@ -414,15 +451,26 @@
|
|||
#X connect 55 0 50 0;
|
||||
#X connect 56 0 24 1;
|
||||
#X connect 57 0 0 1;
|
||||
#X connect 58 0 59 0;
|
||||
#X connect 59 0 56 0;
|
||||
#X connect 59 0 57 0;
|
||||
#X connect 58 0 61 0;
|
||||
#X connect 58 1 61 1;
|
||||
#X connect 59 0 58 0;
|
||||
#X connect 59 1 58 1;
|
||||
#X connect 60 0 62 0;
|
||||
#X connect 61 0 60 0;
|
||||
#X connect 63 0 64 0;
|
||||
#X connect 64 0 56 0;
|
||||
#X connect 64 0 57 0;
|
||||
#X connect 64 1 25 0;
|
||||
#X connect 64 1 1 0;
|
||||
#X connect 65 0 4 0;
|
||||
#X connect 66 4 65 0;
|
||||
#X restore 21 19 pd ringringrain_A ........ front wall;
|
||||
#X f 54;
|
||||
#N canvas 575 33 863 598 ringringrain_B 0;
|
||||
#N canvas 564 23 863 598 ringringrain_B 0;
|
||||
#X obj 388 102 arduino-wifi;
|
||||
#X msg 478 102 disconnect;
|
||||
#X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 457 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 388 165 route analog;
|
||||
#X obj 182 326 t a a;
|
||||
#X obj 182 349 / 10;
|
||||
|
|
@ -443,20 +491,30 @@
|
|||
#X obj 108 250 expr if($f1 < 140 \, $f1 \, $f1+140);
|
||||
#X obj 388 250 expr if($f1 < 140 \, $f1+140 \, $f1+280);
|
||||
#N canvas 273 125 970 258 simulation 0;
|
||||
#X obj 35 48 tgl 15 0 empty empty on/off\ (normal:z\ to\ i\ 28keys) 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 515 48 tgl 15 0 empty empty on/off\ (+shift:Z\ to\ I\ 28keys) 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 35 48 tgl 15 0 empty empty on/off\\\ (normal:z\\\ to\\\ i\\\ 28keys)
|
||||
17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 515 48 tgl 15 0 empty empty on/off\\\ (+shift:Z\\\ to\\\ I\\\ 28keys)
|
||||
17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 515 150 keyhands;
|
||||
#X floatatom 515 173 5 0 0 0 - - - 0;
|
||||
#X obj 562 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 562 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X obj 49 69 loadbang;
|
||||
#X msg 49 91 keys 122 \\\; 120 \\\; 99 \\\; 118 \\\; 98 \\\; 110 \\\; 109 \\\; 44 \\\; 46 \\\; 47 \\\; 97 \\\; 115 \\\; 100 \\\; 102 \\\; 103 \\\; 104 \\\; 106 \\\; 107 \\\; 108 \\\; 59 \\\; 113 \\\; 119 \\\; 101 \\\; 114 \\\; 116 \\\; 121 \\\; 117 \\\; 105 \\\;, f 66;
|
||||
#X msg 49 91 keys 122 \\\; 120 \\\; 99 \\\; 118 \\\; 98 \\\; 110 \\\;
|
||||
109 \\\; 44 \\\; 46 \\\; 47 \\\; 97 \\\; 115 \\\; 100 \\\; 102 \\\;
|
||||
103 \\\; 104 \\\; 106 \\\; 107 \\\; 108 \\\; 59 \\\; 113 \\\; 119 \\\;
|
||||
101 \\\; 114 \\\; 116 \\\; 121 \\\; 117 \\\; 105 \\\;, f 66;
|
||||
#X obj 866 19 key;
|
||||
#X floatatom 866 42 5 0 0 0 - - - 0;
|
||||
#X msg 529 91 keys 90 \\\; 88 \\\; 67 \\\; 86 \\\; 66 \\\; 78 \\\; 77 \\\; 60 \\\; 62 \\\; 63 \\\; 65 \\\; 83 \\\; 68 \\\; 70 \\\; 71 \\\; 72 \\\; 74 \\\; 75 \\\; 76 \\\; 58 \\\; 81 \\\; 87 \\\; 69 \\\; 82 \\\; 84 \\\; 89 \\\; 85 \\\; 73 \\\;, f 66;
|
||||
#X msg 529 91 keys 90 \\\; 88 \\\; 67 \\\; 86 \\\; 66 \\\; 78 \\\;
|
||||
77 \\\; 60 \\\; 62 \\\; 63 \\\; 65 \\\; 83 \\\; 68 \\\; 70 \\\; 71
|
||||
\\\; 72 \\\; 74 \\\; 75 \\\; 76 \\\; 58 \\\; 81 \\\; 87 \\\; 69 \\\;
|
||||
82 \\\; 84 \\\; 89 \\\; 85 \\\; 73 \\\;, f 66;
|
||||
#X obj 529 69 loadbang;
|
||||
#X obj 35 150 keyhands;
|
||||
#X floatatom 35 173 5 0 0 0 - - - 0;
|
||||
#X obj 82 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 82 181 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000
|
||||
#000000;
|
||||
#X obj 35 211 outlet;
|
||||
#X obj 515 211 outlet;
|
||||
#X obj 272 9 inlet;
|
||||
|
|
@ -476,10 +534,12 @@
|
|||
#X connect 16 0 0 0;
|
||||
#X connect 16 0 1 0;
|
||||
#X restore 650 234 pd simulation left right paper;
|
||||
#X obj 650 214 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 650 214 tgl 15 0 empty empty on/off 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 108 102 arduino-wifi;
|
||||
#X msg 198 102 disconnect;
|
||||
#X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 177 139 tgl 15 0 empty empty connected? 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 108 165 route analog;
|
||||
#X text 22 251 interlace ==>;
|
||||
#X text 253 421 <== split: upper/lower;
|
||||
|
|
@ -488,31 +548,36 @@
|
|||
#X obj 108 211 * 1023;
|
||||
#X obj 108 188 route 0 1, f 17;
|
||||
#X floatatom 221 189 5 0 0 2 alivecounter - - 0;
|
||||
#X obj 221 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 221 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X obj 303 188 timer;
|
||||
#X obj 303 165 t b b;
|
||||
#X floatatom 303 211 5 0 0 0 - - - 0;
|
||||
#X obj 308 323 del 1000;
|
||||
#X obj 308 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 308 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X msg 308 300 stop \, bang;
|
||||
#X obj 157 211 * 1023;
|
||||
#X obj 308 561 outlet;
|
||||
#X obj 501 561 outlet;
|
||||
#X obj 501 323 del 1000;
|
||||
#X obj 501 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 501 346 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X msg 501 300 stop \, bang;
|
||||
#X obj 388 211 * 1023;
|
||||
#X obj 388 188 route 0 1, f 17;
|
||||
#X floatatom 501 189 5 0 0 2 alivecounter - - 0;
|
||||
#X obj 501 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 501 211 bng 18 250 50 0 empty empty empty 0 -9 0 10 #fcfcfc
|
||||
#000000 #000000;
|
||||
#X obj 583 188 timer;
|
||||
#X obj 583 165 t b b;
|
||||
#X floatatom 583 211 5 0 0 0 - - - 0;
|
||||
#X obj 437 211 * 1023;
|
||||
#X obj 331 19 loadbang;
|
||||
#X obj 331 42 del 5000;
|
||||
#X msg 177 77 connect 192.168.88.113 27016;
|
||||
#X msg 457 77 connect 192.168.88.114 27016;
|
||||
#X obj 273 13 tgl 15 0 empty ONOFF r:ONOFF 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 273 33 sel 1 0;
|
||||
#X connect 0 0 3 0;
|
||||
#X connect 0 1 2 0;
|
||||
#X connect 1 0 0 1;
|
||||
|
|
@ -556,10 +621,12 @@
|
|||
#X connect 37 0 36 0;
|
||||
#X connect 37 1 36 1;
|
||||
#X connect 39 0 40 0;
|
||||
#X connect 39 0 46 0;
|
||||
#X connect 40 0 43 0;
|
||||
#X connect 41 0 39 0;
|
||||
#X connect 42 0 34 0;
|
||||
#X connect 45 0 46 0;
|
||||
#X connect 45 0 40 0;
|
||||
#X connect 46 0 44 0;
|
||||
#X connect 47 0 45 0;
|
||||
#X connect 48 0 21 0;
|
||||
|
|
@ -572,13 +639,56 @@
|
|||
#X connect 53 0 52 0;
|
||||
#X connect 53 1 52 1;
|
||||
#X connect 55 0 50 0;
|
||||
#X connect 56 0 57 0;
|
||||
#X connect 57 0 58 0;
|
||||
#X connect 57 0 59 0;
|
||||
#X connect 58 0 24 1;
|
||||
#X connect 59 0 0 1;
|
||||
#X connect 56 0 24 1;
|
||||
#X connect 57 0 0 1;
|
||||
#X connect 58 0 59 0;
|
||||
#X connect 59 0 56 0;
|
||||
#X connect 59 0 57 0;
|
||||
#X connect 59 1 25 0;
|
||||
#X connect 59 1 1 0;
|
||||
#X restore 521 19 pd ringringrain_B ........ right wall;
|
||||
#X f 54;
|
||||
#N canvas 152 189 553 436 timer 1;
|
||||
#X obj 66 161 time, f 24;
|
||||
#X obj 66 141 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000
|
||||
#000000;
|
||||
#X floatatom 66 182 5 0 0 0 - - - 0;
|
||||
#X floatatom 113 182 5 0 0 0 - - - 0;
|
||||
#X floatatom 160 182 5 0 0 0 - - - 0;
|
||||
#X obj 66 120 metro 1000;
|
||||
#X obj 66 100 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 66 19 loadbang;
|
||||
#X obj 66 42 del 5000;
|
||||
#X msg 66 63 1;
|
||||
#X obj 66 202 * 100;
|
||||
#X obj 66 223 +;
|
||||
#X floatatom 66 244 5 0 0 0 - - - 0;
|
||||
#X floatatom 66 301 5 0 0 0 - - - 0;
|
||||
#X obj 66 321 change;
|
||||
#X floatatom 66 342 5 0 0 0 - - - 0;
|
||||
#X obj 66 362 tgl 15 0 ONOFF empty s:ONOFF 17 7 0 10 #fcfcfc #000000
|
||||
#000000 0 1;
|
||||
#X obj 66 280 expr if($f1 > 930 \, if($f1 < 1810 \, 1 \, 0) \, 0);
|
||||
#X connect 0 0 2 0;
|
||||
#X connect 0 1 3 0;
|
||||
#X connect 0 2 4 0;
|
||||
#X connect 1 0 0 0;
|
||||
#X connect 2 0 10 0;
|
||||
#X connect 3 0 11 1;
|
||||
#X connect 5 0 1 0;
|
||||
#X connect 6 0 5 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 8 0 9 0;
|
||||
#X connect 9 0 6 0;
|
||||
#X connect 10 0 11 0;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 12 0 17 0;
|
||||
#X connect 13 0 14 0;
|
||||
#X connect 14 0 15 0;
|
||||
#X connect 15 0 16 0;
|
||||
#X connect 17 0 13 0;
|
||||
#X restore 420 33 pd timer;
|
||||
#X connect 0 0 16 0;
|
||||
#X connect 1 0 10 0;
|
||||
#X connect 1 0 19 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue