(wip) broadcast testing...

This commit is contained in:
Dooho Yi 2021-02-22 03:21:55 +09:00
parent 4a507b2372
commit 9df611f361
5 changed files with 576 additions and 512 deletions

View file

@ -18,12 +18,17 @@
// always broadcasting. everyone is 'talkative'. // 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) //============<identities>============
//
#define MY_GROUP_ID (5000)
#define MY_ID (MY_GROUP_ID + 1)
#define MY_SIGN ("@POSTMAN|@SAMPLER")
//
//============</identities>============
//==========<list-of-configurations>===========
//==========<configurations>===========
// //
// 'HAVE_CLIENT' // 'HAVE_CLIENT'
// --> i have a client. enable the client task. // --> i have a client. enable the client task.
@ -38,24 +43,10 @@
// 'HAVE_CLIENT_I2C' // 'HAVE_CLIENT_I2C'
// --> i have a client w/ I2C i/f. enable the I2C client task. // --> i have a client w/ I2C i/f. enable the I2C client task.
// //
//==========</configurations>========== //==========</list-of-configurations>==========
//==========<preset>===========
// //
// (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 HAVE_CLIENT_I2C
#define DISABLE_AP #define DISABLE_AP
//
#endif
//
//==========</preset>==========
//============<parameters>============ //============<parameters>============
// //
@ -96,83 +87,63 @@
//post & addresses //post & addresses
#include "../../post.h" #include "../../post.h"
AddressLibrary library;
//espnow //espnow
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
#include <espnow.h> #include <espnow.h>
// 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 *) &note, 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 //task
#include <TaskScheduler.h> #include <TaskScheduler.h>
Scheduler runner; 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 //task #0 : blink led
extern Task blink_task; extern Task blink_task;
void blink() { void blink() {
@ -201,6 +172,93 @@ void blink() {
} }
Task blink_task(0, TASK_FOREVER, &blink, &runner, true); // -> ENABLED, at start-up. 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 *) &note, 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() { void setup() {
@ -216,26 +274,21 @@ void setup() {
Serial.println(); Serial.println();
Serial.println("\"hi, i m your postman.\""); Serial.println("\"hi, i m your postman.\"");
Serial.println("-"); Serial.println("-");
Serial.println("- * info >>>"); Serial.println("- my id: " + String(MY_ID) + ", gid: " + String(MY_GROUP_ID) + ", call me ==> \"" + String(MY_SIGN) + "\"");
Serial.println("- mac address: " + WiFi.macAddress()); Serial.println("- mac address: " + WiFi.macAddress() + ", channel: " + String(WIFI_CHANNEL));
Serial.println("- wifi channel: " + String(WIFI_CHANNEL));
Serial.println("-");
Serial.println("- * conf >>>");
#if defined(HAVE_CLIENT) #if defined(HAVE_CLIENT)
Serial.println("- ======== 'HAVE_CLIENT' ========"); Serial.println("- ======== 'HAVE_CLIENT' ========");
#endif #endif
#if defined(SERIAL_SWAP) #if defined(SERIAL_SWAP)
Serial.println("- ======== 'SERIAL_SWAP' ========"); Serial.println("- ======== 'SERIAL_SWAP' ========");
#endif #endif
#if defined(DISABLE_AP) #if defined(DISABLE_AP)
Serial.println("- ======== 'DISABLE_AP' ========"); Serial.println("- ======== 'DISABLE_AP' ========");
#endif #endif
#if defined(HAVE_CLIENT_I2C) #if defined(HAVE_CLIENT_I2C)
Serial.println("- ======== 'HAVE_CLIENT_I2C' ========"); Serial.println("- ======== 'HAVE_CLIENT_I2C' ========");
#endif #endif
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\"");
Serial.println();
//wifi //wifi
WiFiMode_t node_type = WIFI_AP_STA; WiFiMode_t node_type = WIFI_AP_STA;
@ -254,10 +307,9 @@ void setup() {
esp_now_register_send_cb(onDataSent); esp_now_register_send_cb(onDataSent);
esp_now_register_recv_cb(onDataReceive); esp_now_register_recv_cb(onDataReceive);
// //
Serial.println("-"); // Serial.println("- i broadcast everything. ==> add 'broadcast peer' (FF:FF:FF:FF:FF:FF).");
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};
uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
// //
Serial.println("-"); Serial.println("-");
@ -283,6 +335,10 @@ void setup() {
//i2c master //i2c master
Wire.begin(); Wire.begin();
#endif #endif
//
// hello_delay = 1000;
// hello_task.restart();
} }
void loop() { void loop() {

View file

@ -55,7 +55,11 @@ void route_note(OSCMessage& msg, int offset) {
if (msg.fullMatch("/pitch", offset)) { if (msg.fullMatch("/pitch", offset)) {
note.pitch = msg.getFloat(0); 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)) { if (msg.fullMatch("/x", offset)) {
note.x1 = msg.getFloat(0); note.x1 = msg.getFloat(0);
note.x2 = msg.getFloat(1); note.x2 = msg.getFloat(1);
@ -112,7 +116,7 @@ void loop() {
if (POSTMAN_SERIAL.available() > sizeof(Hello) + 2) { if (POSTMAN_SERIAL.available() > sizeof(Hello) + 2) {
POSTMAN_SERIAL.read(); POSTMAN_SERIAL.read();
// //
Hello hello; Hello hello("");
POSTMAN_SERIAL.readBytes((uint8_t *) &hello, sizeof(Hello)); POSTMAN_SERIAL.readBytes((uint8_t *) &hello, sizeof(Hello));
char last = POSTMAN_SERIAL.read(); char last = POSTMAN_SERIAL.read();
if (last == '}') { if (last == '}') {

25
post.h
View file

@ -1,6 +1,6 @@
#pragma once #pragma once
//obsolete (@sampler still ues this) //obsolete (@postman|@sampler still ues this)
#define I2C_ADDR 3 #define I2C_ADDR 3
#define POST_LENGTH 32 #define POST_LENGTH 32
#define POST_BUFF_LEN (POST_LENGTH + 1) #define POST_BUFF_LEN (POST_LENGTH + 1)
@ -122,6 +122,8 @@ struct AddressLibrary {
//message type Note : '[' + Note + ']' //message type Note : '[' + Note + ']'
struct Note { struct Note {
//
int32_t id;
float pitch; float pitch;
float velocity; float velocity;
float onoff; float onoff;
@ -132,6 +134,7 @@ struct Note {
float ps; float ps;
// //
void clear() { void clear() {
id = 0;
pitch = 0; pitch = 0;
velocity = 0; velocity = 0;
onoff = 0; onoff = 0;
@ -144,7 +147,8 @@ struct Note {
// //
String to_string() { String to_string() {
String str = ""; String str = "";
str += "( pitch=" + String(pitch); str += "( id=" + String(id);
str += ", pitch=" + String(pitch);
str += ", velocity=" + String(velocity); str += ", velocity=" + String(velocity);
str += ", onoff=" + String(onoff); str += ", onoff=" + String(onoff);
str += ", x1=" + String(x1); str += ", x1=" + String(x1);
@ -158,24 +162,41 @@ struct Note {
}; };
//message type Hello : '{' + Hello + '}' //message type Hello : '{' + Hello + '}'
#define SIGNATURE_LENGTH (20)
#define SIGNATURE_BUFF_LEN (SIGNATURE_LENGTH + 1)
struct Hello { struct Hello {
char sign[SIGNATURE_BUFF_LEN];
int32_t id; int32_t id;
uint32_t mac32;
float h1; float h1;
float h2; float h2;
float h3; float h3;
float h4; 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() { void clear() {
id = 0; id = 0;
mac32 = 0;
h1 = 0; h1 = 0;
h2 = 0; h2 = 0;
h3 = 0; h3 = 0;
h4 = 0; h4 = 0;
sign[0] = '\0';
} }
// //
String to_string() { String to_string() {
String str = ""; String str = "";
str += "( id=" + String(id); str += "( id=" + String(id);
str += ", mac32=0x" + String(mac32, HEX);
str += ", sign=\"" + String(sign) + "\"";
str += ", h1=" + String(h1); str += ", h1=" + String(h1);
str += ", h2=" + String(h2); str += ", h2=" + String(h2);
str += ", h3=" + String(h3); str += ", h3=" + String(h3);

View file

@ -18,12 +18,17 @@
// always broadcasting. everyone is 'talkative'. // 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) //============<identities>============
//
#define MY_GROUP_ID (0)
#define MY_ID (MY_GROUP_ID + 1)
#define MY_SIGN ("POSTMAN|OSC(Pd) a.k.a. @@@ ROOT @@@")
//
//============</identities>============
//==========<list-of-configurations>===========
//==========<configurations>===========
// //
// 'HAVE_CLIENT' // 'HAVE_CLIENT'
// --> i have a client. enable the client task. // --> i have a client. enable the client task.
@ -35,20 +40,13 @@
// 'DISABLE_AP' // 'DISABLE_AP'
// --> (questioning)... // --> (questioning)...
// //
//==========</configurations>========== // 'HAVE_CLIENT_I2C'
// --> i have a client w/ I2C i/f. enable the I2C client task.
//==========<preset>=========== //
//==========</list-of-configurations>==========
// //
// (1) standalone
#if 0
// (2) osc client (the ROOT)
#elif 1
#define SERIAL_SWAP
#define HAVE_CLIENT #define HAVE_CLIENT
// #define SERIAL_SWAP
#endif
//
//==========</preset>==========
//============<parameters>============ //============<parameters>============
// //
@ -91,42 +89,44 @@
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
#include <espnow.h> #include <espnow.h>
// 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 *) &note, 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 //task
#include <TaskScheduler.h> #include <TaskScheduler.h>
Scheduler runner; 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 //task #0 : blink led
extern Task blink_task; extern Task blink_task;
void blink() { void blink() {
@ -209,6 +209,38 @@ void collect_post() {
Task collect_post_task(1, TASK_FOREVER, &collect_post, &runner, true); // by default, ENABLED Task collect_post_task(1, TASK_FOREVER, &collect_post, &runner, true); // by default, ENABLED
#endif #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 *) &note, 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() { void setup() {
@ -224,23 +256,21 @@ void setup() {
Serial.println(); Serial.println();
Serial.println("\"hi, i m your postman.\""); Serial.println("\"hi, i m your postman.\"");
Serial.println("-"); Serial.println("-");
Serial.println("- * info >>>"); Serial.println("- my id: " + String(MY_ID) + ", gid: " + String(MY_GROUP_ID) + ", call me ==> \"" + String(MY_SIGN) + "\"");
Serial.println("- mac address: " + WiFi.macAddress()); Serial.println("- mac address: " + WiFi.macAddress() + ", channel: " + String(WIFI_CHANNEL));
Serial.println("- wifi channel: " + String(WIFI_CHANNEL));
Serial.println("-");
Serial.println("- * conf >>>");
#if defined(HAVE_CLIENT) #if defined(HAVE_CLIENT)
Serial.println("- ======== 'HAVE_CLIENT' ========"); Serial.println("- ======== 'HAVE_CLIENT' ========");
#endif #endif
#if defined(SERIAL_SWAP) #if defined(SERIAL_SWAP)
Serial.println("- ======== 'SERIAL_SWAP' ========"); Serial.println("- ======== 'SERIAL_SWAP' ========");
#endif #endif
#if defined(DISABLE_AP) #if defined(DISABLE_AP)
Serial.println("- ======== 'DISABLE_AP' ========"); Serial.println("- ======== 'DISABLE_AP' ========");
#endif
#if defined(HAVE_CLIENT_I2C)
Serial.println("- ======== 'HAVE_CLIENT_I2C' ========");
#endif #endif
Serial.println("-"); Serial.println("-");
Serial.println("\".-.-.-. :)\"");
Serial.println();
//wifi //wifi
WiFiMode_t node_type = WIFI_AP_STA; WiFiMode_t node_type = WIFI_AP_STA;
@ -259,8 +289,7 @@ void setup() {
esp_now_register_send_cb(onDataSent); esp_now_register_send_cb(onDataSent);
esp_now_register_recv_cb(onDataReceive); esp_now_register_recv_cb(onDataReceive);
// //
Serial.println("-"); Serial.println("- i broadcast everything. ==> add 'broadcast peer' (FF:FF:FF:FF:FF:FF).");
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}; uint8_t broadcastmac[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0); esp_now_add_peer(broadcastmac, ESP_NOW_ROLE_COMBO, 1, NULL, 0);

View file

@ -1,25 +1,13 @@
#N canvas 238 195 804 465 10; #N canvas 503 89 613 467 10;
#X obj 397 140 print CTRL; #X obj 318 178 spigot;
#X obj 397 82 r CTRL; #X obj 367 163 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
#X obj 397 103 spigot;
#X obj 446 88 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1; 1;
#X obj 125 369 o.io.slipserial; #N canvas 0 89 1440 811 crickets 0;
#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;
#X obj 129 363 pack f f; #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 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 #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 floatatom 139 311 5 0 0 0 - - -;
#X obj 1077 528 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 #X obj 1077 528 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1
0 1; 0 1;
@ -94,7 +82,7 @@
#X obj 114 701 t b a; #X obj 114 701 t b a;
#X obj 32 248 f; #X obj 32 248 f;
#X obj 32 269 + 1; #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; 1;
#X floatatom 31 366 5 0 0 0 - - -; #X floatatom 31 366 5 0 0 0 - - -;
#X floatatom 31 407 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 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 #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 floatatom 555 309 5 0 0 0 - - -;
#X obj 545 405 s CTRL; #X obj 545 405 s CTRL;
#X obj 448 246 f; #X obj 448 246 f;
@ -265,10 +253,10 @@
#X obj 40 668 + 1; #X obj 40 668 + 1;
#X obj 39 629 metro 1000; #X obj 39 629 metro 1000;
#X obj 752 357 pack f f; #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 #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 floatatom 762 305 5 0 0 0 - - -;
#X obj 752 401 s CTRL; #X obj 752 401 s CTRL;
#X obj 655 242 f; #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 #X obj 1006 174 tgl 20 0 empty empty 124 17 7 0 10 -257985 -1 -1 0
1; 1;
#X obj 922 278 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 #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 floatatom 970 300 5 0 0 0 - - -;
#X obj 960 396 s CTRL; #X obj 960 396 s CTRL;
#X obj 863 237 f; #X obj 863 237 f;
#X obj 863 258 + 1; #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; 1;
#X floatatom 862 355 5 0 0 0 - - -; #X floatatom 862 355 5 0 0 0 - - -;
#X floatatom 862 396 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 #X obj 1216 171 tgl 20 0 empty empty 125 17 7 0 10 -257985 -1 -1 0
1; 1;
#X obj 1132 275 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 #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 floatatom 1180 297 5 0 0 0 - - -;
#X obj 1170 393 s CTRL; #X obj 1170 393 s CTRL;
#X obj 1073 234 f; #X obj 1073 234 f;
#X obj 1073 255 + 1; #X obj 1073 255 + 1;
#X obj 1073 172 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -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 352 5 0 0 0 - - -;
#X floatatom 1072 393 5 0 0 0 - - -; #X floatatom 1072 393 5 0 0 0 - - -;
#X floatatom 1073 297 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 #X obj 1364 392 tgl 20 0 empty empty 125 17 7 0 10 -257985 -1 -1 0
1; 1;
#X obj 1280 496 hsl 128 15 0 300 0 0 empty empty empty -2 -8 0 10 -262144 #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 floatatom 1328 518 5 0 0 0 - - -;
#X obj 1318 614 s CTRL; #X obj 1318 614 s CTRL;
#X obj 1221 455 f; #X obj 1221 455 f;
#X obj 1221 476 + 1; #X obj 1221 476 + 1;
#X obj 1221 393 tgl 20 0 empty empty empty 17 7 0 10 -262130 -1 -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 573 5 0 0 0 - - -;
#X floatatom 1220 614 5 0 0 0 - - -; #X floatatom 1220 614 5 0 0 0 - - -;
#X floatatom 1221 518 5 0 0 0 - - -; #X floatatom 1221 518 5 0 0 0 - - -;
@ -895,10 +883,137 @@
#X connect 368 0 203 0; #X connect 368 0 203 0;
#X connect 369 0 82 0; #X connect 369 0 82 0;
#X connect 370 0 165 0; #X connect 370 0 165 0;
#X restore 261 206 pd crickets nanokontrol2; #X restore 57 368 pd crickets nanokontrol2;
#X text 576 69 /pitch /velocity /onoff; #N canvas 133 398 1214 393 roundly 1;
#X obj 530 69 r CTRL; #X msg 354 139 \$1 5000;
#X obj 530 115 s OSC2; #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; #N canvas 458 205 512 395 buildOSC 0;
#X obj 319 76 t a b; #X obj 319 76 t a b;
#X msg 456 94 [; #X msg 456 94 [;
@ -940,215 +1055,37 @@
#X connect 15 0 10 0; #X connect 15 0 10 0;
#X connect 16 0 10 0; #X connect 16 0 10 0;
#X connect 17 0 10 0; #X connect 17 0 10 0;
#X restore 530 92 pd buildOSC; #X restore 408 154 pd buildOSC for all;
#X text 610 91 <-- also mix-in /x; #X obj 113 127 o.io.slipserial;
#X obj 497 172 s X1; #X msg 239 148 devices;
#X obj 527 172 s X2; #X msg 239 171 close;
#X floatatom 493 143 5 0 0 0 - - -; #X obj 113 50 packOSC;
#X floatatom 533 143 5 0 0 0 - - -; #X obj 113 25 r OSC;
#X text 666 142 some extra. values!; #X msg 200 28 devicename /dev/ttyACM0 \, baud 57600 \, pollintervall
#X msg 242 351 devicename /dev/ttyACM0 \, baud 57600 \, pollintervall
1 \, verbose 1; 1 \, verbose 1;
#X msg 212 281 devicename /dev/tty.usbmodem3217741 \, baud 57600 \, #X obj 113 150 unpackOSC;
pollintervall 1 \, verbose 1; #X obj 113 173 routeOSC /hello;
#X floatatom 570 143 5 0 0 0 - - -; #X obj 113 196 s HELLO;
#X obj 564 172 s X3; #X obj 30 106 print OSC;
#X floatatom 608 143 5 0 0 0 - - -; #X obj 30 79 spigot;
#X obj 602 172 s X4; #X obj 79 64 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
#X msg 196 245 open 2; ;
#X floatatom 608 193 5 0 0 0 - - -; #X obj 408 177 s OSC;
#X text 672 156 X1 \, X2: 5 digits; #N canvas 713 396 706 244 SAMPLER_NOTE-to-OSC 1;
#X text 672 170 X3 \, X4: 5 digits; #X obj 35 142 spigot;
#X text 672 184 PS: 2 digits; #X obj 84 127 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
#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
1; 1;
#N canvas 0 23 255 233 midi-in 0; #X text 11 12 <<<;
#X obj 17 14 notein 1; #X text 671 12 >>>;
#X floatatom 17 35 5 0 0 0 - - -; #X text 155 34 /pitch /velocity /onoff;
#X floatatom 55 35 5 0 0 0 - - -; #X obj 59 93 s OSC;
#X obj 55 55 t a a; #X obj 365 32 loadbang;
#X floatatom 17 113 5 0 0 0 - - -; #X text 489 93 BIG;
#X floatatom 55 113 5 0 0 0 - - -; #X text 327 93 SMALL;
#X floatatom 89 113 5 0 0 0 - - -; #X obj 365 94 hradio 15 1 0 8 empty empty vol._override 0 -8 0 10 -257985
#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
-1 -1 4; -1 -1 4;
#X obj 69 320 tabread \$0-volume-list; #X obj 365 117 tabread \$0-volume-list;
#N canvas 817 360 501 420 volume-list 0; #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 msg 146 359 \; \$1-volume-list 0 0 10 25 50 127 180 255 500;
#X obj 146 336 f \$0; #X obj 146 336 f \$0;
#X obj 146 316 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 #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; -1;
#X obj 31 169 bng 15 250 50 0 empty empty v- 17 7 0 10 -262144 -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 obj 31 64 unpack f f f;
#X text 77 42 /pitch /velocity /onoff; #X text 127 42 /pitch /velocity /onoff;
#X obj 100 92 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 #X obj 100 92 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
1; 1;
#X obj 31 107 spigot; #X obj 31 107 spigot;
#X text 104 128 keys for volume control: vol+ / vol-; #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 obj 31 250 tabread \$0-volume-list;
#X floatatom 31 228 5 0 0 0 - - -; #X floatatom 31 228 5 0 0 0 - - -;
#X obj 31 205 limitcnt 0 7; #X obj 31 205 limitcnt 0 7;
#X obj 31 43 r SAMPLER_NOTE;
#X connect 1 0 0 0; #X connect 1 0 0 0;
#X connect 2 0 1 0; #X connect 2 0 1 0;
#X connect 7 0 20 1; #X connect 7 0 19 1;
#X connect 8 0 20 0; #X connect 8 0 19 0;
#X connect 9 0 10 0; #X connect 9 0 12 0;
#X connect 10 0 13 0; #X connect 9 2 11 0;
#X connect 10 2 12 0; #X connect 11 0 12 1;
#X connect 12 0 13 1; #X connect 12 0 15 0;
#X connect 13 0 16 0; #X connect 15 0 8 0;
#X connect 16 0 8 0; #X connect 15 1 7 0;
#X connect 16 1 7 0; #X connect 17 0 16 0;
#X connect 18 0 17 0; #X connect 18 0 17 0;
#X connect 19 0 18 0; #X connect 19 0 18 0;
#X connect 20 0 19 0; #X connect 20 0 9 0;
#X restore 117 349 pd volume-list; #X restore 413 146 pd volume-list;
#X floatatom 69 349 5 0 0 0 s:0-vol - #0-vol; #X floatatom 365 146 5 0 0 0 s:0-vol - #0-vol;
#X msg 27 248 4; #X msg 365 55 4;
#X text 1 382 <<<; #X text 11 212 <<<;
#X text 661 382 >>>; #X text 671 212 >>>;
#X obj 541 318 s NOTE; #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; #N canvas 113 357 512 395 buildOSC 0;
#X obj 319 76 t a b; #X obj 319 76 t a b;
#X msg 456 94 [; #X msg 456 94 [;
#X msg 34 327 ]; #X msg 34 327 ];
#X obj 140 39 unpack f f f; #X obj 140 39 unpack f f f;
#X obj 68 226 r X1; #X obj 66 226 r X1;
#X obj 98 226 r X2; #X obj 96 226 r X2;
#X obj 128 226 r X3; #X obj 126 226 r X3;
#X obj 158 226 r X4; #X obj 156 226 r X4;
#X obj 53 256 f; #X obj 51 256 f;
#X obj 34 126 t b b a;
#X obj 254 345 outlet; #X obj 254 345 outlet;
#X obj 140 17 inlet; #X obj 140 17 inlet;
#X obj 188 226 r PS; #X obj 186 226 r PS;
#X obj 88 274 pack f f f f f; #X obj 86 274 pack f f f f f;
#X msg 319 122 sendtyped /note/onoff f \$1; #X msg 319 122 sendtyped /note/onoff f \$1;
#X msg 73 147 sendtyped /note/pitch f \$1; #X msg 85 150 sendtyped /note/pitch f \$1;
#X msg 254 166 sendtyped /note/velocity f \$1; #X msg 254 150 sendtyped /note/velocity f \$1;
#X msg 88 297 sendtyped /note/x fffff \$1 \$2 \$3 \$4 \$5; #X msg 86 297 sendtyped /note/x fffff \$1 \$2 \$3 \$4 \$5;
#X floatatom 174 82 5 0 0 0 - - -; #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 #X obj 174 62 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1; -1;
#X floatatom 315 19 5 0 0 0 r:0-vol #0-vol -; #X floatatom 315 19 5 0 0 0 r:0-vol #0-vol -;
#X msg 315 41 set \$1; #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 0 1 1 0;
#X connect 1 0 10 0; #X connect 1 0 9 0;
#X connect 2 0 10 0; #X connect 2 0 9 0;
#X connect 3 0 9 0; #X connect 3 0 22 0;
#X connect 3 1 19 0; #X connect 3 1 18 0;
#X connect 3 2 0 0; #X connect 3 2 0 0;
#X connect 4 0 8 1; #X connect 4 0 8 1;
#X connect 5 0 13 1; #X connect 5 0 12 1;
#X connect 6 0 13 2; #X connect 6 0 12 2;
#X connect 7 0 13 3; #X connect 7 0 12 3;
#X connect 8 0 13 0; #X connect 8 0 12 0;
#X connect 9 0 2 0; #X connect 10 0 3 0;
#X connect 9 1 8 0; #X connect 11 0 12 4;
#X connect 9 2 15 0; #X connect 12 0 16 0;
#X connect 11 0 3 0; #X connect 13 0 9 0;
#X connect 12 0 13 4; #X connect 14 0 9 0;
#X connect 13 0 17 0; #X connect 15 0 9 0;
#X connect 14 0 10 0; #X connect 16 0 9 0;
#X connect 15 0 10 0; #X connect 17 0 15 0;
#X connect 16 0 10 0; #X connect 18 0 17 0;
#X connect 17 0 10 0; #X connect 19 0 20 0;
#X connect 18 0 16 0; #X connect 20 0 17 0;
#X connect 19 0 18 0; #X connect 21 0 9 0;
#X connect 20 0 21 0; #X connect 22 0 2 0;
#X connect 21 0 18 0; #X connect 22 1 8 0;
#X restore 189 204 pd buildOSC; #X connect 22 2 21 0;
#X floatatom 243 240 5 0 0 3 r:0-vol #0-vol -; #X connect 22 3 14 0;
#X obj 286 232 nbx 5 25 -1e+37 1e+37 0 0 empty empty volume-now 0 -12 #X restore 59 64 pd buildOSC id 5000;
0 20 -262130 -159808 -159808 127 256; #X text 183 64 id == 5000 FIXED;
#X msg 225 109 devicename /dev/ttyACM0 \, baud 57600 \, pollintervall #X text 236 130 TESTER;
1 \, verbose 1; #X obj 59 35 r SAMPLER_NOTE;
#X obj 541 212 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 #X obj 35 169 print SAMPLER_NOTE;
1; #X obj 177 182 s SAMPLER_NOTE;
#X floatatom 586 210 5 0 0 0 - - -; #X connect 0 0 26 0;
#X obj 541 238 pack f f;
#X msg 541 275 \$2 100 \$1;
#X connect 1 0 0 1; #X connect 1 0 0 1;
#X connect 2 0 0 1; #X connect 6 0 13 0;
#X connect 3 0 0 0; #X connect 9 0 10 0;
#X connect 4 0 3 0; #X connect 10 0 12 0;
#X connect 5 0 11 0; #X connect 13 0 9 0;
#X connect 8 0 7 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 9 0 8 1;
#X connect 10 0 0 1; #X connect 10 0 8 1;
#X connect 11 0 6 0; #X connect 11 0 8 0;
#X connect 12 0 11 1; #X connect 12 0 11 0;
#X connect 13 0 0 1; #X connect 12 0 18 0;
#X connect 14 0 8 0; #X connect 13 0 8 1;
#X connect 22 0 36 0; #X connect 14 0 15 0;
#X connect 25 0 32 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 28 0 29 0;
#X connect 29 0 31 0; #X connect 30 0 33 0;
#X connect 32 0 28 0; #X connect 31 0 32 0;
#X connect 36 0 24 0; #X connect 32 0 30 0;
#X connect 37 0 38 0; #X connect 33 0 34 0;
#X connect 39 0 0 1; #X connect 33 1 28 0;
#X connect 40 0 42 0; #X connect 34 0 28 0;
#X connect 41 0 42 1; #X connect 35 0 37 0;
#X connect 42 0 43 0; #X connect 36 0 35 1;
#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;