From 9df611f36101c48bd35874ae45fd24388a002048 Mon Sep 17 00:00:00 2001 From: Dooho Yi Date: Mon, 22 Feb 2021 03:21:55 +0900 Subject: [PATCH] (wip) broadcast testing... --- @postman/src/main.cpp | 260 +++++++----- osc/src/main.cpp | 8 +- post.h | 25 +- postman/src/main.cpp | 149 ++++--- puredata/piano_access_mesh_x_2.pd | 646 ++++++++++++++---------------- 5 files changed, 576 insertions(+), 512 deletions(-) diff --git a/@postman/src/main.cpp b/@postman/src/main.cpp index 8b06993..c6761cc 100644 --- a/@postman/src/main.cpp +++ b/@postman/src/main.cpp @@ -18,12 +18,17 @@ // always broadcasting. everyone is 'talkative'. // +// then, let it save a value in EEPROM (object with memory=mind?) -// then, let is save a value in EEPROM (object with memory) +//======================== +// +#define MY_GROUP_ID (5000) +#define MY_ID (MY_GROUP_ID + 1) +#define MY_SIGN ("@POSTMAN|@SAMPLER") +// +//======================== - - -//===================== +//===================== // // 'HAVE_CLIENT' // --> i have a client. enable the client task. @@ -38,24 +43,10 @@ // 'HAVE_CLIENT_I2C' // --> i have a client w/ I2C i/f. enable the I2C client task. // -//==================== - -//===================== +//==================== // -// (1) standalone -#if 0 -// (2) osc client (the ROOT) -#elif 0 -#define SERIAL_SWAP -#define HAVE_CLIENT -// (3) sampler client -#elif 1 #define HAVE_CLIENT_I2C #define DISABLE_AP -// -#endif -// -//==================== //======================== // @@ -96,83 +87,63 @@ //post & addresses #include "../../post.h" +AddressLibrary library; //espnow #include #include -// on 'sent' -void onDataSent(uint8_t *mac_addr, uint8_t sendStatus) { - if (sendStatus != 0) MONITORING_SERIAL.println("Delivery failed!"); -} - -// on 'receive' -void onDataReceive(uint8_t * mac, uint8_t *incomingData, uint8_t len) { - - // - //MONITORING_SERIAL.write(incomingData, len); - - // -#if defined(HAVE_CLIENT) - Serial.write(incomingData, len); // we pass it over to the client. -#endif - - // open => identify => use. - if (incomingData[0] == '[' && incomingData[len - 1] == ']' && len == (sizeof(Note) + 2)) { - Note note; - memcpy((uint8_t *) ¬e, incomingData + 1, sizeof(Note)); - // - MONITORING_SERIAL.println(note.to_string()); - // - - #if defined(HAVE_CLIENT_I2C) - - // (struct --> obsolete I2C format.) - // --> we want to open & re-construct the msg. - - // letter frame ( '[' + 30 bytes + ']' ) - // : [123456789012345678901234567890] - - // 'MIDI' letter frame - // : [123456789012345678901234567890] - // : [KKKVVVG.......................] - // : KKK - Key - // .substring(1, 4); - // : VVV - Velocity (volume/amp.) - // .substring(4, 7); - // : G - Gate (note on/off) - // .substring(7, 8); - - char letter_outro[POST_BUFF_LEN] = "................................"; - sprintf(letter_outro, "[%03d%03d%01d.......................]", - (int32_t)note.pitch, - (int32_t)note.velocity, - (int32_t)note.onoff); - String msg = String(letter_outro); - - // truncate any extra. letters. - msg = msg.substring(0, POST_LENGTH); // (0) ~ (POST_LENGTH-1) - - // send out - Wire.beginTransmission(I2C_ADDR); - Wire.write(msg.c_str(), POST_LENGTH); - Wire.endTransmission(); - - #endif - - //-*-*-*-*-*-*-*-*-*- - // use 'note' here... - // ==> N.B.: "callback function runs from a high-priority Wi-Fi task. - // So, do not do lengthy operations in the callback function. - // Instead, post the necessary data to a queue and handle it from a lower priority task." - //-*-*-*-*-*-*-*-*-*- - } -} - //task #include Scheduler runner; +// +extern Task hello_task; +static int hello_delay = 0; +void hello() { + // + byte mac[6]; + WiFi.macAddress(mac); + uint32_t mac32 = (((((mac[2] << 8) + mac[3]) << 8) + mac[4]) << 8) + mac[5]; + // + Hello hello(String(MY_SIGN), MY_ID, mac32); // the most basic 'hello' + // and you can append some floats + static int count = 0; + count++; + hello.h1 = (count % 1000); + // hello.h2 = 0; + // hello.h3 = 0; + // hello.h4 = 0; + // + uint8_t frm_size = sizeof(Hello) + 2; + uint8_t frm[frm_size]; + frm[0] = '{'; + memcpy(frm + 1, (uint8_t *) &hello, sizeof(Hello)); + frm[frm_size - 1] = '}'; + // + AddressBook* book = library.getBookByTitle("root"); + if (book == NULL) { + // error! + } else { + // + for (uint32_t i = 0; i < book->list.size(); i++) { + esp_now_add_peer(book->list[i].mac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); + esp_now_send(book->list[i].mac, frm, frm_size); // to all peers. (== broadcast, by default) + esp_now_del_peer(book->list[i].mac); + } + // esp_now_send(NULL, frm, frm_size); // to all peers. (== broadcast, by default) + // + MONITORING_SERIAL.write(frm, frm_size); + MONITORING_SERIAL.println(" ==(esp_now_send/0)==> "); + } + // + if (hello_delay > 0) { + if (hello_delay < 100) hello_delay = 100; + hello_task.restartDelayed(hello_delay); + } +} +Task hello_task(0, TASK_ONCE, &hello, &runner, false); + //task #0 : blink led extern Task blink_task; void blink() { @@ -201,6 +172,93 @@ void blink() { } Task blink_task(0, TASK_FOREVER, &blink, &runner, true); // -> ENABLED, at start-up. +// on 'receive' +void onDataReceive(uint8_t * mac, uint8_t *incomingData, uint8_t len) { + + // + //MONITORING_SERIAL.write(incomingData, len); + + // +#if defined(HAVE_CLIENT) + Serial.write(incomingData, len); // we pass it over to the client. +#endif + + // open => identify => use. + if (incomingData[0] == '{' && incomingData[len - 1] == '}' && len == (sizeof(Hello) + 2)) { + Hello hello(""); + memcpy((uint8_t *) &hello, incomingData + 1, sizeof(Hello)); + // + MONITORING_SERIAL.println(hello.to_string()); + // + } + + // open => identify => use. + if (incomingData[0] == '[' && incomingData[len - 1] == ']' && len == (sizeof(Note) + 2)) { + Note note; + memcpy((uint8_t *) ¬e, incomingData + 1, sizeof(Note)); + // + MONITORING_SERIAL.println(note.to_string()); + // + + #if defined(HAVE_CLIENT_I2C) + + //is this for me & my client? + if (note.id == MY_GROUP_ID || note.id == MY_ID) { + + // (struct --> obsolete I2C format.) + // --> we want to open & re-construct the msg. + + // letter frame ( '[' + 30 bytes + ']' ) + // : [123456789012345678901234567890] + + // 'MIDI' letter frame + // : [123456789012345678901234567890] + // : [KKKVVVG.......................] + // : KKK - Key + // .substring(1, 4); + // : VVV - Velocity (volume/amp.) + // .substring(4, 7); + // : G - Gate (note on/off) + // .substring(7, 8); + + char letter_outro[POST_BUFF_LEN] = "................................"; + sprintf(letter_outro, "[%03d%03d%01d.......................]", + (int32_t)note.pitch, + (int32_t)note.velocity, + (int32_t)note.onoff); + String msg = String(letter_outro); + + // truncate any extra. letters. + msg = msg.substring(0, POST_LENGTH); // (0) ~ (POST_LENGTH-1) + + // send out + Wire.beginTransmission(I2C_ADDR); + Wire.write(msg.c_str(), POST_LENGTH); + Wire.endTransmission(); + + // + hello_delay = note.ps; + if (hello_delay > 0 && hello_task.isEnabled() == false) { + hello_task.restart(); + } + } + + #endif + + //-*-*-*-*-*-*-*-*-*- + // use 'note' here... + // ==> N.B.: "callback function runs from a high-priority Wi-Fi task. + // So, do not do lengthy operations in the callback function. + // Instead, post the necessary data to a queue and handle it from a lower priority task." + //-*-*-*-*-*-*-*-*-*- + } +} + +// on 'sent' +void onDataSent(uint8_t *mac_addr, uint8_t sendStatus) { + if (sendStatus != 0) MONITORING_SERIAL.println("Delivery failed!"); +} + // void setup() { @@ -216,26 +274,21 @@ void setup() { Serial.println(); Serial.println("\"hi, i m your postman.\""); Serial.println("-"); - Serial.println("- * info >>>"); - Serial.println("- mac address: " + WiFi.macAddress()); - Serial.println("- wifi channel: " + String(WIFI_CHANNEL)); - Serial.println("-"); - Serial.println("- * conf >>>"); + Serial.println("- my id: " + String(MY_ID) + ", gid: " + String(MY_GROUP_ID) + ", call me ==> \"" + String(MY_SIGN) + "\""); + Serial.println("- mac address: " + WiFi.macAddress() + ", channel: " + String(WIFI_CHANNEL)); #if defined(HAVE_CLIENT) - Serial.println("- ======== 'HAVE_CLIENT' ========"); + Serial.println("- ======== 'HAVE_CLIENT' ========"); #endif #if defined(SERIAL_SWAP) - Serial.println("- ======== 'SERIAL_SWAP' ========"); + Serial.println("- ======== 'SERIAL_SWAP' ========"); #endif #if defined(DISABLE_AP) - Serial.println("- ======== 'DISABLE_AP' ========"); + Serial.println("- ======== 'DISABLE_AP' ========"); #endif #if defined(HAVE_CLIENT_I2C) - Serial.println("- ======== 'HAVE_CLIENT_I2C' ========"); + Serial.println("- ======== 'HAVE_CLIENT_I2C' ========"); #endif Serial.println("-"); - Serial.println("\".-.-.-. :)\""); - Serial.println(); //wifi WiFiMode_t node_type = WIFI_AP_STA; @@ -254,10 +307,9 @@ void setup() { esp_now_register_send_cb(onDataSent); esp_now_register_recv_cb(onDataReceive); // - Serial.println("-"); - Serial.println("- we will broadcast everything. ==> add only the 'broadcast peer' (FF:FF:FF:FF:FF:FF)."); - uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); + // Serial.println("- i broadcast everything. ==> add 'broadcast peer' (FF:FF:FF:FF:FF:FF)."); + // uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + // esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); // Serial.println("-"); @@ -283,6 +335,10 @@ void setup() { //i2c master Wire.begin(); #endif + + // + // hello_delay = 1000; + // hello_task.restart(); } void loop() { diff --git a/osc/src/main.cpp b/osc/src/main.cpp index fc4d568..dbcd7c5 100644 --- a/osc/src/main.cpp +++ b/osc/src/main.cpp @@ -55,7 +55,11 @@ void route_note(OSCMessage& msg, int offset) { if (msg.fullMatch("/pitch", offset)) { note.pitch = msg.getFloat(0); } - // (4) --> /x + // (4) --> /id + if (msg.fullMatch("/id", offset)) { + note.id = msg.getInt(0); + } + // (5) --> /x if (msg.fullMatch("/x", offset)) { note.x1 = msg.getFloat(0); note.x2 = msg.getFloat(1); @@ -112,7 +116,7 @@ void loop() { if (POSTMAN_SERIAL.available() > sizeof(Hello) + 2) { POSTMAN_SERIAL.read(); // - Hello hello; + Hello hello(""); POSTMAN_SERIAL.readBytes((uint8_t *) &hello, sizeof(Hello)); char last = POSTMAN_SERIAL.read(); if (last == '}') { diff --git a/post.h b/post.h index 1a1a1d9..a1db150 100644 --- a/post.h +++ b/post.h @@ -1,6 +1,6 @@ #pragma once -//obsolete (@sampler still ues this) +//obsolete (@postman|@sampler still ues this) #define I2C_ADDR 3 #define POST_LENGTH 32 #define POST_BUFF_LEN (POST_LENGTH + 1) @@ -122,6 +122,8 @@ struct AddressLibrary { //message type Note : '[' + Note + ']' struct Note { + // + int32_t id; float pitch; float velocity; float onoff; @@ -132,6 +134,7 @@ struct Note { float ps; // void clear() { + id = 0; pitch = 0; velocity = 0; onoff = 0; @@ -144,7 +147,8 @@ struct Note { // String to_string() { String str = ""; - str += "( pitch=" + String(pitch); + str += "( id=" + String(id); + str += ", pitch=" + String(pitch); str += ", velocity=" + String(velocity); str += ", onoff=" + String(onoff); str += ", x1=" + String(x1); @@ -158,24 +162,41 @@ struct Note { }; //message type Hello : '{' + Hello + '}' +#define SIGNATURE_LENGTH (20) +#define SIGNATURE_BUFF_LEN (SIGNATURE_LENGTH + 1) struct Hello { + char sign[SIGNATURE_BUFF_LEN]; int32_t id; + uint32_t mac32; float h1; float h2; float h3; float h4; // + Hello(String sign_, int32_t id_ = 0, uint32_t mac32_ = 0, float h1_ = 0, float h2_ = 0, float h3_ = 0, float h4_ = 0) { + id = id_; + mac32 = mac32_; + h1 = h1_; + h2 = h2_; + h3 = h3_; + h4 = h4_; + sign_.toCharArray(sign, SIGNATURE_BUFF_LEN); + } void clear() { id = 0; + mac32 = 0; h1 = 0; h2 = 0; h3 = 0; h4 = 0; + sign[0] = '\0'; } // String to_string() { String str = ""; str += "( id=" + String(id); + str += ", mac32=0x" + String(mac32, HEX); + str += ", sign=\"" + String(sign) + "\""; str += ", h1=" + String(h1); str += ", h2=" + String(h2); str += ", h3=" + String(h3); diff --git a/postman/src/main.cpp b/postman/src/main.cpp index 0a23ce3..1c52b3e 100644 --- a/postman/src/main.cpp +++ b/postman/src/main.cpp @@ -18,12 +18,17 @@ // always broadcasting. everyone is 'talkative'. // +// then, let it save a value in EEPROM (object with memory=mind?) -// then, let is save a value in EEPROM (object with memory) +//======================== +// +#define MY_GROUP_ID (0) +#define MY_ID (MY_GROUP_ID + 1) +#define MY_SIGN ("POSTMAN|OSC(Pd) a.k.a. @@@ ROOT @@@") +// +//======================== - - -//===================== +//===================== // // 'HAVE_CLIENT' // --> i have a client. enable the client task. @@ -35,20 +40,13 @@ // 'DISABLE_AP' // --> (questioning)... // -//==================== - -//===================== +// 'HAVE_CLIENT_I2C' +// --> i have a client w/ I2C i/f. enable the I2C client task. +// +//==================== // -// (1) standalone -#if 0 -// (2) osc client (the ROOT) -#elif 1 -#define SERIAL_SWAP #define HAVE_CLIENT -// -#endif -// -//==================== +#define SERIAL_SWAP //======================== // @@ -91,42 +89,44 @@ #include #include -// on 'sent' -void onDataSent(uint8_t *mac_addr, uint8_t sendStatus) { - if (sendStatus != 0) MONITORING_SERIAL.println("Delivery failed!"); -} - -// on 'receive' -void onDataReceive(uint8_t * mac, uint8_t *incomingData, uint8_t len) { - - // - //MONITORING_SERIAL.write(incomingData, len); - - // -#if defined(HAVE_CLIENT) - Serial.write(incomingData, len); // we pass it over to the client. -#endif - - // open => identify => use. - if (incomingData[0] == '[' && incomingData[len - 1] == ']' && len == (sizeof(Note) + 2)) { - Note note; - memcpy((uint8_t *) ¬e, incomingData + 1, sizeof(Note)); - // - MONITORING_SERIAL.println(note.to_string()); - - //-*-*-*-*-*-*-*-*-*- - // use 'note' here... - // ==> N.B.: "callback function runs from a high-priority Wi-Fi task. - // So, do not do lengthy operations in the callback function. - // Instead, post the necessary data to a queue and handle it from a lower priority task." - //-*-*-*-*-*-*-*-*-*- - } -} - //task #include Scheduler runner; +// +extern Task hello_task; +static int hello_delay = 0; +void hello() { + // + byte mac[6]; + WiFi.macAddress(mac); + uint32_t mac32 = (((((mac[2] << 8) + mac[3]) << 8) + mac[4]) << 8) + mac[5]; + // + Hello hello(String(MY_SIGN), MY_ID, mac32); // the most basic 'hello' + // and you can append some floats + // hello.h1 = 0; + // hello.h2 = 0; + // hello.h3 = 0; + // hello.h4 = 0; + // + uint8_t frm_size = sizeof(Hello) + 2; + uint8_t frm[frm_size]; + frm[0] = '{'; + memcpy(frm + 1, (uint8_t *) &hello, sizeof(Hello)); + frm[frm_size - 1] = '}'; + // + esp_now_send(NULL, frm, frm_size); // to all peers. (== broadcast, by default) + // + MONITORING_SERIAL.write(frm, frm_size); + MONITORING_SERIAL.println(" ==(esp_now_send/0)==> "); + // + if (hello_delay > 0) { + if (hello_delay < 100) hello_delay = 100; + hello_task.restartDelayed(hello_delay); + } +} +Task hello_task(0, TASK_ONCE, &hello, &runner, false); + //task #0 : blink led extern Task blink_task; void blink() { @@ -209,6 +209,38 @@ void collect_post() { Task collect_post_task(1, TASK_FOREVER, &collect_post, &runner, true); // by default, ENABLED #endif +// on 'receive' +void onDataReceive(uint8_t * mac, uint8_t *incomingData, uint8_t len) { + + // + //MONITORING_SERIAL.write(incomingData, len); + + // +#if defined(HAVE_CLIENT) + Serial.write(incomingData, len); // we pass it over to the client. +#endif + + // open => identify => use. + if (incomingData[0] == '[' && incomingData[len - 1] == ']' && len == (sizeof(Note) + 2)) { + Note note; + memcpy((uint8_t *) ¬e, incomingData + 1, sizeof(Note)); + // + MONITORING_SERIAL.println(note.to_string()); + + //-*-*-*-*-*-*-*-*-*- + // use 'note' here... + // ==> N.B.: "callback function runs from a high-priority Wi-Fi task. + // So, do not do lengthy operations in the callback function. + // Instead, post the necessary data to a queue and handle it from a lower priority task." + //-*-*-*-*-*-*-*-*-*- + } +} + +// on 'sent' +void onDataSent(uint8_t *mac_addr, uint8_t sendStatus) { + if (sendStatus != 0) MONITORING_SERIAL.println("Delivery failed!"); +} + // void setup() { @@ -224,23 +256,21 @@ void setup() { Serial.println(); Serial.println("\"hi, i m your postman.\""); Serial.println("-"); - Serial.println("- * info >>>"); - Serial.println("- mac address: " + WiFi.macAddress()); - Serial.println("- wifi channel: " + String(WIFI_CHANNEL)); - Serial.println("-"); - Serial.println("- * conf >>>"); + Serial.println("- my id: " + String(MY_ID) + ", gid: " + String(MY_GROUP_ID) + ", call me ==> \"" + String(MY_SIGN) + "\""); + Serial.println("- mac address: " + WiFi.macAddress() + ", channel: " + String(WIFI_CHANNEL)); #if defined(HAVE_CLIENT) - Serial.println("- ======== 'HAVE_CLIENT' ========"); + Serial.println("- ======== 'HAVE_CLIENT' ========"); #endif #if defined(SERIAL_SWAP) - Serial.println("- ======== 'SERIAL_SWAP' ========"); + Serial.println("- ======== 'SERIAL_SWAP' ========"); #endif #if defined(DISABLE_AP) - Serial.println("- ======== 'DISABLE_AP' ========"); + Serial.println("- ======== 'DISABLE_AP' ========"); +#endif +#if defined(HAVE_CLIENT_I2C) + Serial.println("- ======== 'HAVE_CLIENT_I2C' ========"); #endif Serial.println("-"); - Serial.println("\".-.-.-. :)\""); - Serial.println(); //wifi WiFiMode_t node_type = WIFI_AP_STA; @@ -259,8 +289,7 @@ void setup() { esp_now_register_send_cb(onDataSent); esp_now_register_recv_cb(onDataReceive); // - Serial.println("-"); - Serial.println("- we will broadcast everything. ==> add only the 'broadcast peer' (FF:FF:FF:FF:FF:FF)."); + Serial.println("- i broadcast everything. ==> add 'broadcast peer' (FF:FF:FF:FF:FF:FF)."); uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); diff --git a/puredata/piano_access_mesh_x_2.pd b/puredata/piano_access_mesh_x_2.pd index d924f81..500e105 100644 --- a/puredata/piano_access_mesh_x_2.pd +++ b/puredata/piano_access_mesh_x_2.pd @@ -1,25 +1,13 @@ -#N canvas 238 195 804 465 10; -#X obj 397 140 print CTRL; -#X obj 397 82 r CTRL; -#X obj 397 103 spigot; -#X obj 446 88 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +#N canvas 503 89 613 467 10; +#X obj 318 178 spigot; +#X obj 367 163 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#X obj 125 369 o.io.slipserial; -#X msg 154 318 devices; -#X msg 231 323 close; -#X obj 125 292 packOSC; -#X obj 125 267 r OSC2; -#X obj 317 103 spigot; -#X obj 366 88 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 -1; -#X obj 317 82 r OSC2; -#X obj 317 140 print OSC2; -#N canvas 0 89 1440 811 crickets 1; +#N canvas 0 89 1440 811 crickets 0; #X obj 129 363 pack f f; #X obj 175 185 tgl 20 0 empty empty 120 17 7 0 10 -257985 -1 -1 0 1 ; #X obj 91 289 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 --1 -1 4032 1; +-1 -1 0 1; #X floatatom 139 311 5 0 0 0 - - -; #X obj 1077 528 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; @@ -94,7 +82,7 @@ #X obj 114 701 t b a; #X obj 32 248 f; #X obj 32 269 + 1; -#X obj 32 186 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 1 +#X obj 32 186 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 0 1; #X floatatom 31 366 5 0 0 0 - - -; #X floatatom 31 407 5 0 0 0 - - -; @@ -190,7 +178,7 @@ #X obj 591 183 tgl 20 0 empty empty 122 17 7 0 10 -257985 -1 -1 0 1 ; #X obj 507 287 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 --1 -1 4193 1; +-1 -1 0 1; #X floatatom 555 309 5 0 0 0 - - -; #X obj 545 405 s CTRL; #X obj 448 246 f; @@ -265,10 +253,10 @@ #X obj 40 668 + 1; #X obj 39 629 metro 1000; #X obj 752 357 pack f f; -#X obj 798 179 tgl 20 0 empty empty 123 17 7 0 10 -257985 -1 -1 1 1 +#X obj 798 179 tgl 20 0 empty empty 123 17 7 0 10 -257985 -1 -1 0 1 ; #X obj 714 283 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 --1 -1 3064 1; +-1 -1 0 1; #X floatatom 762 305 5 0 0 0 - - -; #X obj 752 401 s CTRL; #X obj 655 242 f; @@ -286,12 +274,12 @@ #X obj 1006 174 tgl 20 0 empty empty 124 17 7 0 10 -257985 -1 -1 0 1; #X obj 922 278 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 --1 -1 2258 1; +-1 -1 0 1; #X floatatom 970 300 5 0 0 0 - - -; #X obj 960 396 s CTRL; #X obj 863 237 f; #X obj 863 258 + 1; -#X obj 863 175 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 1 +#X obj 863 175 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 0 1; #X floatatom 862 355 5 0 0 0 - - -; #X floatatom 862 396 5 0 0 0 - - -; @@ -307,13 +295,13 @@ #X obj 1216 171 tgl 20 0 empty empty 125 17 7 0 10 -257985 -1 -1 0 1; #X obj 1132 275 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 --1 -1 9434 1; +-1 -1 0 1; #X floatatom 1180 297 5 0 0 0 - - -; #X obj 1170 393 s CTRL; #X obj 1073 234 f; #X obj 1073 255 + 1; #X obj 1073 172 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 -1 1; +0 1; #X floatatom 1072 352 5 0 0 0 - - -; #X floatatom 1072 393 5 0 0 0 - - -; #X floatatom 1073 297 5 0 0 0 - - -; @@ -344,13 +332,13 @@ #X obj 1364 392 tgl 20 0 empty empty 125 17 7 0 10 -257985 -1 -1 0 1; #X obj 1280 496 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 --1 -1 12700 1; +-1 -1 0 1; #X floatatom 1328 518 5 0 0 0 - - -; #X obj 1318 614 s CTRL; #X obj 1221 455 f; #X obj 1221 476 + 1; #X obj 1221 393 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -1 -1 1; +0 1; #X floatatom 1220 573 5 0 0 0 - - -; #X floatatom 1220 614 5 0 0 0 - - -; #X floatatom 1221 518 5 0 0 0 - - -; @@ -895,10 +883,137 @@ #X connect 368 0 203 0; #X connect 369 0 82 0; #X connect 370 0 165 0; -#X restore 261 206 pd crickets nanokontrol2; -#X text 576 69 /pitch /velocity /onoff; -#X obj 530 69 r CTRL; -#X obj 530 115 s OSC2; +#X restore 57 368 pd crickets nanokontrol2; +#N canvas 133 398 1214 393 roundly 1; +#X msg 354 139 \$1 5000; +#X obj 354 162 unpack f f; +#X obj 354 185 s X1; +#X obj 411 185 s X2; +#X msg 253 150 2000 0 1; +#X obj 44 208 r HELLO; +#X obj 44 254 unpack f f f f; +#X floatatom 44 283 5 0 0 0 - - -; +#X obj 97 311 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 +0 10 -260097 -262144 -1 0 1; +#X obj 97 331 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 +0 10 -13381 -262144 -1 0 1; +#X obj 44 231 route 2000 2001; +#X obj 154 254 unpack f f f f; +#X floatatom 154 283 5 0 0 0 - - -; +#X obj 253 209 s CTRL; +#X floatatom 253 99 5 0 0 0 target_pos - -; +#X obj 97 31 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 0 +10 -260097 -262144 -1 49950 1; +#X obj 97 51 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 0 +10 -13381 -262144 -1 49950 1; +#X obj 253 121 t b a; +#X msg 704 139 \$1 5000; +#X obj 704 162 unpack f f; +#X obj 704 185 s X1; +#X obj 761 185 s X2; +#X obj 603 209 s CTRL; +#X floatatom 603 99 5 0 0 0 target_pos - -; +#X obj 603 121 t b a; +#X obj 6 26 loadbang; +#X msg 6 49 0; +#X msg 603 150 2001 0 1; +#X obj 94 81 skip 500; +#X obj 348 81 skip 500; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 1 3 0; +#X connect 4 0 13 0; +#X connect 5 0 10 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 10 0 6 0; +#X connect 10 1 11 0; +#X connect 11 0 12 0; +#X connect 12 0 9 0; +#X connect 14 0 17 0; +#X connect 15 0 28 0; +#X connect 16 0 29 0; +#X connect 17 0 4 0; +#X connect 17 1 0 0; +#X connect 18 0 19 0; +#X connect 19 0 20 0; +#X connect 19 1 21 0; +#X connect 23 0 24 0; +#X connect 24 0 27 0; +#X connect 24 1 18 0; +#X connect 25 0 26 0; +#X connect 26 0 15 0; +#X connect 26 0 16 0; +#X connect 27 0 22 0; +#X connect 28 0 14 0; +#X connect 29 0 23 0; +#X restore 57 397 pd roundly; +#N canvas 1 89 425 409 bluetooth-keyboard 0; +#X obj 20 126 unpackOSC; +#X obj 107 18 loadbang; +#X msg 147 91 devices; +#X obj 20 147 routeOSC /note; +#X floatatom 20 189 5 0 0 0 - - -; +#X floatatom 77 189 5 0 0 0 - - -; +#X floatatom 135 189 5 0 0 0 - - -; +#X obj 20 105 o.io.slipserial; +#X msg 215 108 close; +#X obj 20 209 pack f f f; +#X obj 20 168 routeOSC /pitch /velocity /onoff /oncnt; +#X floatatom 193 189 5 0 0 0 - - -; +#X obj 135 245 tgl 125 0 empty empty empty 17 7 0 10 -262144 -1 -1 +0 1; +#N canvas 0 23 255 233 midi-in 0; +#X obj 17 14 notein 1; +#X floatatom 17 35 5 0 0 0 - - -; +#X floatatom 55 35 5 0 0 0 - - -; +#X obj 55 55 t a a; +#X floatatom 17 113 5 0 0 0 - - -; +#X floatatom 55 113 5 0 0 0 - - -; +#X floatatom 89 113 5 0 0 0 - - -; +#X obj 17 133 pack f f f; +#X obj 17 154 s NOTE; +#X obj 89 76 != 0; +#X obj 89 154 outlet; +#X connect 0 0 1 0; +#X connect 0 1 2 0; +#X connect 1 0 4 0; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 3 1 9 0; +#X connect 4 0 7 0; +#X connect 5 0 7 1; +#X connect 6 0 7 2; +#X connect 6 0 10 0; +#X connect 7 0 8 0; +#X connect 9 0 6 0; +#X restore 205 222 pd midi-in; +#X msg 20 52 devicename /dev/tty.HC-06-DevB-1 \, baud 57600 \, pollintervall +1 \, verbose 1; +#X text 1 2 <<<; +#X text 401 2 >>>; +#X text 1 392 <<<; +#X text 401 392 >>>; +#X obj 20 230 s SAMPLER_NOTE; +#X connect 0 0 3 0; +#X connect 2 0 7 1; +#X connect 3 0 10 0; +#X connect 4 0 9 0; +#X connect 5 0 9 1; +#X connect 6 0 9 2; +#X connect 6 0 12 0; +#X connect 7 0 0 0; +#X connect 8 0 7 1; +#X connect 9 0 19 0; +#X connect 10 0 4 0; +#X connect 10 1 5 0; +#X connect 10 2 6 0; +#X connect 10 3 11 0; +#X connect 13 0 12 0; +#X connect 14 0 7 1; +#X restore 37 282 pd bluetooth-keyboard; +#X text 1 2 <<<; +#X text 571 2 >>>; #N canvas 458 205 512 395 buildOSC 0; #X obj 319 76 t a b; #X msg 456 94 [; @@ -940,215 +1055,37 @@ #X connect 15 0 10 0; #X connect 16 0 10 0; #X connect 17 0 10 0; -#X restore 530 92 pd buildOSC; -#X text 610 91 <-- also mix-in /x; -#X obj 497 172 s X1; -#X obj 527 172 s X2; -#X floatatom 493 143 5 0 0 0 - - -; -#X floatatom 533 143 5 0 0 0 - - -; -#X text 666 142 some extra. values!; -#X msg 242 351 devicename /dev/ttyACM0 \, baud 57600 \, pollintervall +#X restore 408 154 pd buildOSC for all; +#X obj 113 127 o.io.slipserial; +#X msg 239 148 devices; +#X msg 239 171 close; +#X obj 113 50 packOSC; +#X obj 113 25 r OSC; +#X msg 200 28 devicename /dev/ttyACM0 \, baud 57600 \, pollintervall 1 \, verbose 1; -#X msg 212 281 devicename /dev/tty.usbmodem3217741 \, baud 57600 \, -pollintervall 1 \, verbose 1; -#X floatatom 570 143 5 0 0 0 - - -; -#X obj 564 172 s X3; -#X floatatom 608 143 5 0 0 0 - - -; -#X obj 602 172 s X4; -#X msg 196 245 open 2; -#X floatatom 608 193 5 0 0 0 - - -; -#X text 672 156 X1 \, X2: 5 digits; -#X text 672 170 X3 \, X4: 5 digits; -#X text 672 184 PS: 2 digits; -#X obj 602 222 s PS; -#X obj 125 392 unpackOSC; -#X obj 125 415 routeOSC /hello; -#X obj 252 404 s HELLO; -#N canvas 133 398 1214 393 roundly 1; -#X floatatom 925 227 5 0 0 0 - - -; -#X obj 925 249 s PS; -#X msg 354 139 \$1 5000; -#X obj 354 162 unpack f f; -#X obj 354 185 s X1; -#X obj 411 185 s X2; -#X msg 253 150 2000 0 1; -#X msg 925 204 0; -#X msg 964 204 200; -#X obj 44 208 r HELLO; -#X obj 44 254 unpack f f f f; -#X floatatom 44 283 5 0 0 0 - - -; -#X obj 97 311 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 -0 10 -260097 -262144 -1 0 1; -#X obj 97 331 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 -0 10 -13381 -262144 -1 0 1; -#X obj 44 231 route 2000 2001; -#X obj 154 254 unpack f f f f; -#X floatatom 154 283 5 0 0 0 - - -; -#X obj 253 209 s CTRL; -#X floatatom 253 99 5 0 0 0 target_pos - -; -#X obj 97 31 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 0 -10 -260097 -262144 -1 25950 1; -#X obj 97 51 hsl 1000 15 -50000 50000 0 0 empty empty empty -2 -8 0 -10 -13381 -262144 -1 49950 1; -#X obj 253 121 t b a; -#X msg 704 139 \$1 5000; -#X obj 704 162 unpack f f; -#X obj 704 185 s X1; -#X obj 761 185 s X2; -#X obj 603 209 s CTRL; -#X floatatom 603 99 5 0 0 0 target_pos - -; -#X obj 603 121 t b a; -#X obj 945 141 tgl 25 0 empty empty monitoring 25 7 0 15 -159808 -257985 --1 1 1; -#X obj 945 181 sel 0 1; -#X obj 1061 100 loadbang; -#X msg 1061 123 1; -#X obj 6 26 loadbang; -#X msg 6 49 0; -#X msg 603 150 2001 0 1; -#X obj 94 81 skip 500; -#X obj 348 81 skip 500; -#X connect 0 0 1 0; -#X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 3 1 5 0; -#X connect 6 0 17 0; -#X connect 7 0 0 0; -#X connect 8 0 0 0; -#X connect 9 0 14 0; -#X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 14 0 10 0; -#X connect 14 1 15 0; -#X connect 15 0 16 0; -#X connect 16 0 13 0; -#X connect 18 0 21 0; -#X connect 19 0 36 0; -#X connect 20 0 37 0; -#X connect 21 0 6 0; -#X connect 21 1 2 0; -#X connect 22 0 23 0; -#X connect 23 0 24 0; -#X connect 23 1 25 0; -#X connect 27 0 28 0; -#X connect 28 0 35 0; -#X connect 28 1 22 0; -#X connect 29 0 30 0; -#X connect 30 0 7 0; -#X connect 30 1 8 0; -#X connect 31 0 32 0; -#X connect 32 0 29 0; -#X connect 33 0 34 0; -#X connect 34 0 19 0; -#X connect 34 0 20 0; -#X connect 35 0 26 0; -#X connect 36 0 18 0; -#X connect 37 0 27 0; -#X restore 62 140 pd roundly; -#N canvas 1 89 425 409 bluetooth-keyboard 0; -#X obj 20 126 unpackOSC; -#X obj 107 18 loadbang; -#X msg 147 91 devices; -#X obj 20 147 routeOSC /note; -#X floatatom 20 189 5 0 0 0 - - -; -#X floatatom 77 189 5 0 0 0 - - -; -#X floatatom 135 189 5 0 0 0 - - -; -#X obj 20 105 o.io.slipserial; -#X msg 215 108 close; -#X obj 20 209 pack f f f; -#X obj 20 230 s NOTE; -#X obj 20 168 routeOSC /pitch /velocity /onoff /oncnt; -#X floatatom 193 189 5 0 0 0 - - -; -#X obj 86 245 tgl 125 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +#X obj 113 150 unpackOSC; +#X obj 113 173 routeOSC /hello; +#X obj 113 196 s HELLO; +#X obj 30 106 print OSC; +#X obj 30 79 spigot; +#X obj 79 64 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X obj 408 177 s OSC; +#N canvas 713 396 706 244 SAMPLER_NOTE-to-OSC 1; +#X obj 35 142 spigot; +#X obj 84 127 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; -#N canvas 0 23 255 233 midi-in 0; -#X obj 17 14 notein 1; -#X floatatom 17 35 5 0 0 0 - - -; -#X floatatom 55 35 5 0 0 0 - - -; -#X obj 55 55 t a a; -#X floatatom 17 113 5 0 0 0 - - -; -#X floatatom 55 113 5 0 0 0 - - -; -#X floatatom 89 113 5 0 0 0 - - -; -#X obj 17 133 pack f f f; -#X obj 17 154 s NOTE; -#X obj 89 76 != 0; -#X obj 89 154 outlet; -#X connect 0 0 1 0; -#X connect 0 1 2 0; -#X connect 1 0 4 0; -#X connect 2 0 3 0; -#X connect 3 0 5 0; -#X connect 3 1 9 0; -#X connect 4 0 7 0; -#X connect 5 0 7 1; -#X connect 6 0 7 2; -#X connect 6 0 10 0; -#X connect 7 0 8 0; -#X connect 9 0 6 0; -#X restore 156 222 pd midi-in; -#X msg 20 52 devicename /dev/tty.HC-06-DevB-1 \, baud 57600 \, pollintervall -1 \, verbose 1; -#X text 1 2 <<<; -#X text 401 2 >>>; -#X text 1 392 <<<; -#X text 401 392 >>>; -#X connect 0 0 3 0; -#X connect 2 0 7 1; -#X connect 3 0 11 0; -#X connect 4 0 9 0; -#X connect 5 0 9 1; -#X connect 6 0 9 2; -#X connect 6 0 13 0; -#X connect 7 0 0 0; -#X connect 8 0 7 1; -#X connect 9 0 10 0; -#X connect 11 0 4 0; -#X connect 11 1 5 0; -#X connect 11 2 6 0; -#X connect 11 3 12 0; -#X connect 14 0 13 0; -#X connect 15 0 7 1; -#X restore 102 45 pd bluetooth-keyboard; -#X text 1 2 <<<; -#X text 401 2 >>>; -#N canvas 699 114 696 411 OSC-keyboard-samplers 1; -#X obj 27 148 o.io.slipserial; -#X msg 56 97 devices; -#X msg 143 102 close; -#X obj 27 71 packOSC; -#X obj 27 46 r OSC; -#X obj 591 32 r NOTE; -#X obj 591 82 print NOTE; -#X obj 511 82 print OSC; -#X obj 511 55 spigot; -#X obj 560 40 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 -1; -#X msg 134 60 devicename /dev/tty.usbmodem48710501 \, baud 57600 \, -pollintervall 1 \, verbose 1; -#X obj 591 55 spigot; -#X obj 640 40 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 -1; -#X msg 114 20 devicename /dev/portD \, baud 57600 \, pollintervall -1 \, verbose 1; -#X obj 511 32 r OSC; -#X text 1 2 <<<; -#X text 661 2 >>>; -#X text 254 317 NOTE! -->; -#X obj 317 309 cnv 15 100 60 empty empty empty 20 12 0 14 -261234 -66577 -0; -#X msg 324 332 /note 60 100 1; -#X text 323 312 well.. if we do like..; -#X text 323 352 w/o bundling.. why not?; -#X obj 189 175 r NOTE; -#X text 235 174 /pitch /velocity /onoff; -#X obj 189 233 s OSC; -#X obj 27 225 loadbang; -#X text 193 296 BIG; -#X text 31 296 SMALL; -#X obj 69 297 hradio 15 1 0 8 empty empty vol._override 0 -8 0 10 -257985 +#X text 11 12 <<<; +#X text 671 12 >>>; +#X text 155 34 /pitch /velocity /onoff; +#X obj 59 93 s OSC; +#X obj 365 32 loadbang; +#X text 489 93 BIG; +#X text 327 93 SMALL; +#X obj 365 94 hradio 15 1 0 8 empty empty vol._override 0 -8 0 10 -257985 -1 -1 4; -#X obj 69 320 tabread \$0-volume-list; -#N canvas 817 360 501 420 volume-list 0; +#X obj 365 117 tabread \$0-volume-list; +#N canvas 763 340 501 420 volume-list 0; #X msg 146 359 \; \$1-volume-list 0 0 10 25 50 127 180 255 500; #X obj 146 336 f \$0; #X obj 146 316 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 @@ -1165,10 +1102,9 @@ pollintervall 1 \, verbose 1; -1; #X obj 31 169 bng 15 250 50 0 empty empty v- 17 7 0 10 -262144 -1 -1 ; -#X obj 31 43 r NOTE; #X obj 31 64 unpack f f f; -#X text 77 42 /pitch /velocity /onoff; -#X obj 100 92 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +#X text 127 42 /pitch /velocity /onoff; +#X obj 100 92 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X obj 31 107 spigot; #X text 104 128 keys for volume control: vol+ / vol-; @@ -1178,132 +1114,150 @@ pollintervall 1 \, verbose 1; #X obj 31 250 tabread \$0-volume-list; #X floatatom 31 228 5 0 0 0 - - -; #X obj 31 205 limitcnt 0 7; +#X obj 31 43 r SAMPLER_NOTE; #X connect 1 0 0 0; #X connect 2 0 1 0; -#X connect 7 0 20 1; -#X connect 8 0 20 0; -#X connect 9 0 10 0; -#X connect 10 0 13 0; -#X connect 10 2 12 0; -#X connect 12 0 13 1; -#X connect 13 0 16 0; -#X connect 16 0 8 0; -#X connect 16 1 7 0; +#X connect 7 0 19 1; +#X connect 8 0 19 0; +#X connect 9 0 12 0; +#X connect 9 2 11 0; +#X connect 11 0 12 1; +#X connect 12 0 15 0; +#X connect 15 0 8 0; +#X connect 15 1 7 0; +#X connect 17 0 16 0; #X connect 18 0 17 0; #X connect 19 0 18 0; -#X connect 20 0 19 0; -#X restore 117 349 pd volume-list; -#X floatatom 69 349 5 0 0 0 s:0-vol - #0-vol; -#X msg 27 248 4; -#X text 1 382 <<<; -#X text 661 382 >>>; -#X obj 541 318 s NOTE; +#X connect 20 0 9 0; +#X restore 413 146 pd volume-list; +#X floatatom 365 146 5 0 0 0 s:0-vol - #0-vol; +#X msg 365 55 4; +#X text 11 212 <<<; +#X text 671 212 >>>; +#X floatatom 586 120 5 0 0 3 r:0-vol #0-vol -; +#X obj 546 67 nbx 5 25 -1e+37 1e+37 0 0 empty empty volume-now 0 -12 +0 20 -262130 -159808 -159808 127 256; +#X obj 177 110 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X floatatom 222 108 5 0 0 0 - - -; +#X obj 177 136 pack f f; +#X msg 177 159 \$2 100 \$1; #N canvas 113 357 512 395 buildOSC 0; #X obj 319 76 t a b; #X msg 456 94 [; #X msg 34 327 ]; #X obj 140 39 unpack f f f; -#X obj 68 226 r X1; -#X obj 98 226 r X2; -#X obj 128 226 r X3; -#X obj 158 226 r X4; -#X obj 53 256 f; -#X obj 34 126 t b b a; +#X obj 66 226 r X1; +#X obj 96 226 r X2; +#X obj 126 226 r X3; +#X obj 156 226 r X4; +#X obj 51 256 f; #X obj 254 345 outlet; #X obj 140 17 inlet; -#X obj 188 226 r PS; -#X obj 88 274 pack f f f f f; +#X obj 186 226 r PS; +#X obj 86 274 pack f f f f f; #X msg 319 122 sendtyped /note/onoff f \$1; -#X msg 73 147 sendtyped /note/pitch f \$1; -#X msg 254 166 sendtyped /note/velocity f \$1; -#X msg 88 297 sendtyped /note/x fffff \$1 \$2 \$3 \$4 \$5; +#X msg 85 150 sendtyped /note/pitch f \$1; +#X msg 254 150 sendtyped /note/velocity f \$1; +#X msg 86 297 sendtyped /note/x fffff \$1 \$2 \$3 \$4 \$5; #X floatatom 174 82 5 0 0 0 - - -; #X obj 174 62 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X floatatom 315 19 5 0 0 0 r:0-vol #0-vol -; #X msg 315 41 set \$1; -#X connect 0 0 14 0; +#X msg 68 179 sendtyped /note/id i 5000; +#X obj 34 121 t b b b a; +#X connect 0 0 13 0; #X connect 0 1 1 0; -#X connect 1 0 10 0; -#X connect 2 0 10 0; -#X connect 3 0 9 0; -#X connect 3 1 19 0; +#X connect 1 0 9 0; +#X connect 2 0 9 0; +#X connect 3 0 22 0; +#X connect 3 1 18 0; #X connect 3 2 0 0; #X connect 4 0 8 1; -#X connect 5 0 13 1; -#X connect 6 0 13 2; -#X connect 7 0 13 3; -#X connect 8 0 13 0; -#X connect 9 0 2 0; -#X connect 9 1 8 0; -#X connect 9 2 15 0; -#X connect 11 0 3 0; -#X connect 12 0 13 4; -#X connect 13 0 17 0; -#X connect 14 0 10 0; -#X connect 15 0 10 0; -#X connect 16 0 10 0; -#X connect 17 0 10 0; -#X connect 18 0 16 0; -#X connect 19 0 18 0; -#X connect 20 0 21 0; -#X connect 21 0 18 0; -#X restore 189 204 pd buildOSC; -#X floatatom 243 240 5 0 0 3 r:0-vol #0-vol -; -#X obj 286 232 nbx 5 25 -1e+37 1e+37 0 0 empty empty volume-now 0 -12 -0 20 -262130 -159808 -159808 127 256; -#X msg 225 109 devicename /dev/ttyACM0 \, baud 57600 \, pollintervall -1 \, verbose 1; -#X obj 541 212 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 -1; -#X floatatom 586 210 5 0 0 0 - - -; -#X obj 541 238 pack f f; -#X msg 541 275 \$2 100 \$1; +#X connect 5 0 12 1; +#X connect 6 0 12 2; +#X connect 7 0 12 3; +#X connect 8 0 12 0; +#X connect 10 0 3 0; +#X connect 11 0 12 4; +#X connect 12 0 16 0; +#X connect 13 0 9 0; +#X connect 14 0 9 0; +#X connect 15 0 9 0; +#X connect 16 0 9 0; +#X connect 17 0 15 0; +#X connect 18 0 17 0; +#X connect 19 0 20 0; +#X connect 20 0 17 0; +#X connect 21 0 9 0; +#X connect 22 0 2 0; +#X connect 22 1 8 0; +#X connect 22 2 21 0; +#X connect 22 3 14 0; +#X restore 59 64 pd buildOSC id 5000; +#X text 183 64 id == 5000 FIXED; +#X text 236 130 TESTER; +#X obj 59 35 r SAMPLER_NOTE; +#X obj 35 169 print SAMPLER_NOTE; +#X obj 177 182 s SAMPLER_NOTE; +#X connect 0 0 26 0; #X connect 1 0 0 1; -#X connect 2 0 0 1; -#X connect 3 0 0 0; -#X connect 4 0 3 0; -#X connect 5 0 11 0; -#X connect 8 0 7 0; +#X connect 6 0 13 0; +#X connect 9 0 10 0; +#X connect 10 0 12 0; +#X connect 13 0 9 0; +#X connect 16 0 17 0; +#X connect 18 0 20 0; +#X connect 19 0 20 1; +#X connect 20 0 21 0; +#X connect 21 0 27 0; +#X connect 22 0 5 0; +#X connect 25 0 22 0; +#X connect 25 0 0 0; +#X coords 0 244 1 243 200 200 0; +#X restore 37 321 pd SAMPLER_NOTE-to-OSC; +#X obj 408 115 r NOTE; +#X obj 318 205 print NOTE; +#X text 409 94 /id /pitch /velocity /onoff; +#X text 1 432 <<<; +#X text 571 432 >>>; +#X text 35 246 * sub-patches; +#X floatatom 519 315 5 0 0 0 - - -; +#X obj 519 337 s PS; +#X obj 470 226 tgl 25 0 empty empty hello 32 7 0 15 -159808 -257985 +-159808 1 1; +#X obj 519 253 loadbang; +#X msg 519 276 1; +#X obj 470 276 sel 1; +#X msg 470 305 1000; +#X obj 30 149 spigot; +#X obj 79 134 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 30 176 print HELLO; +#X connect 0 0 23 0; +#X connect 1 0 0 1; +#X connect 7 0 20 0; +#X connect 8 0 14 0; #X connect 9 0 8 1; -#X connect 10 0 0 1; -#X connect 11 0 6 0; -#X connect 12 0 11 1; -#X connect 13 0 0 1; -#X connect 14 0 8 0; -#X connect 22 0 36 0; -#X connect 25 0 32 0; +#X connect 10 0 8 1; +#X connect 11 0 8 0; +#X connect 12 0 11 0; +#X connect 12 0 18 0; +#X connect 13 0 8 1; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 15 0 35 0; +#X connect 18 0 17 0; +#X connect 19 0 18 1; +#X connect 22 0 0 0; +#X connect 22 0 7 0; #X connect 28 0 29 0; -#X connect 29 0 31 0; -#X connect 32 0 28 0; -#X connect 36 0 24 0; -#X connect 37 0 38 0; -#X connect 39 0 0 1; -#X connect 40 0 42 0; -#X connect 41 0 42 1; -#X connect 42 0 43 0; -#X connect 43 0 35 0; -#X restore 102 74 pd OSC-keyboard-samplers; -#X connect 1 0 2 0; -#X connect 2 0 0 0; -#X connect 3 0 2 1; -#X connect 4 0 36 0; -#X connect 5 0 4 1; -#X connect 6 0 4 1; -#X connect 7 0 4 0; -#X connect 8 0 7 0; -#X connect 9 0 12 0; -#X connect 10 0 9 1; -#X connect 11 0 9 0; -#X connect 15 0 17 0; -#X connect 17 0 16 0; -#X connect 21 0 19 0; -#X connect 22 0 20 0; -#X connect 24 0 4 1; -#X connect 25 0 4 1; -#X connect 26 0 27 0; -#X connect 28 0 29 0; -#X connect 30 0 4 1; -#X connect 31 0 35 0; -#X connect 36 0 37 0; -#X connect 37 0 38 0; +#X connect 30 0 33 0; +#X connect 31 0 32 0; +#X connect 32 0 30 0; +#X connect 33 0 34 0; +#X connect 33 1 28 0; +#X connect 34 0 28 0; +#X connect 35 0 37 0; +#X connect 36 0 35 1;