...
 
Commits (33)
/*
A Bitwig Controller Script for the Tickle Instrument by The Center for Haptic Audio Interaction Research (CHAIR)
*/
loadAPI(8);
// Remove this if you want to be able to use deprecated methods without causing script to stop.
// This is useful during development.
host.setShouldFailOnDeprecatedUse(true);
host.defineController("CHAIR", "Tickle", "0.1", "e28b3740-a65b-11e9-b475-0800200c9a66", "Max Neupert");
host.defineMidiPorts(1, 1);
host.addDeviceNameBasedDiscoveryPair(["tickle MIDI 1"], ["tickle MIDI 1"]);
const TICKLE_ROTARY_0_ABS = b00e; //C14
const TICKLE_ROTARY_1_ABS = b004; //C15
const TICKLE_ROTARY_2_ABS = b010; //C16
const TICKLE_ROTARY_0_REL = b013; //C19 will be deprecated
const TICKLE_ROTARY_1_REL = b014; //C20 will be deprecated
const TICKLE_ROTARY_2_REL = b015; //C21 will be deprecated
function init()
{
host.getMidiInPort(0).setMidiCallback(onTickleMidi);
// host.getMidiInPort(0).setSysexCallback(onSysex0);
noteIn = host.getMidiInPort(0).createNoteInput("Tickle Pads", "B001??", "80????", "90????", "D0????", "E0????");
// TODO: Perform further initialization here.
println("Tickle initialized!");
}
// Called when a short MIDI message is received on MIDI input port 0.
function onTickleMidi(status, data1, data2)
{
printMidi(status, data1, data2)
}
function flush() {
// TODO: Flush any output to your controller here.
}
function exit()
{
println("exit.");
}
\ No newline at end of file
chair = library("chair.lib");
process = chair.dc_offset;
fi = library("filters.lib");
no = library("noises.lib");
process =
chair.dc_offset :
// 1. DC as an envelope
// 2. Clean signal
// We'll take the output of the 2nd outlet unchanged all the way down to the last sum;
// and work on the signal on the 1st bus
(fi.lowpass(1, 20),_) :
((_,* (0.5),_) :
(+,_) :
(_,(no.noise:fi.lowpass(1,2000): * (0.5)), (no.noise:fi.lowpass(1,100): + (1) : * (0.75)),_) :
(chair.allp, _ ) :
(* (-1),_) :
+) ~ _;
......@@ -10,6 +10,6 @@ http://faust.grame.fr/
## About these examples
Here will be some examples, for now look inside the `Pd` folder where you can find an example with FAUST DSP code using `faustgen~` for Pd
Here will be some examples, for now look inside the `Pd` folder where you can find an example with FAUST DSP code using `faustgen~` for Pd.
If you would like to contribute, please get in touch via the issue tracker on gitlab/github or by email `max@chair.audio`
fi = library("filters.lib");
<<<<<<< HEAD
// as we need lots of filters in a row
// we make use of fausts rewriting rules
// to line them up recursively
hp_row(1) = fi.highpass(1, 4);
hp_row(n) = fi.highpass(1, 4) : hp_row(n-1);
// now the dc offset remover
// is providing two signals:
// 1. DC as an envelope
// 2. Clean signal
dc_offset = _ <: (_,_): (_, (hp_row(4))):
(_,(_<:(_,_))):
((-:fi.lowpass(1, 100) * 25),_);
allp = (_,_,_):((*),_):(-);
=======
hp_row(1) = fi.highpass(1, 4);
hp_row(n) = fi.highpass(1, 4) : hp_row(n-1);
dc_offset = _ <: (_,_): (_, (hp_row(4))):
(_,(_<:(_,_))):
((-:fi.lowpass(1, 100) * 25),_);
>>>>>>> 64d072da9d1d6d124d24db72b257845123ad82a2
#N canvas 652 243 699 726 10;
#X declare -path chair;
#X declare -path abstractions;
#N canvas 203 461 664 369 rotaries 0;
#X floatatom 136 275 5 0 0 0 - - -;
#X obj 286 192 sqrt;
#X obj 286 213 sqrt;
#X obj 286 234 sqrt;
#X obj 286 255 clip 0.5 0.99;
#X floatatom 324 278 5 0 0 0 - - -;
#X obj 468 241 * 9000;
#X obj 468 262 + 500;
#X floatatom 479 283 5 0 0 0 - - -;
#X msg 468 198 1 \$1;
#X obj 468 219 -;
#X obj 286 300 s \$0-feedback;
#X obj 103 298 s \$0-fm-amount;
#X obj 103 232 * 2;
#X obj 103 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 535 1;
#X obj 130 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 1794 1;
#X obj 159 120 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 2302 1;
#X obj 468 306 s \$0-timbre;
#X obj 86 29 ctlin 14 1;
#X obj 154 29 ctlin 15 1;
#X obj 226 29 ctlin 16 1;
#X obj 92 59 / 127;
#X obj 157 63 / 127;
#X obj 223 65 / 127;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 4 0 11 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 7 0 17 0;
#X connect 9 0 10 0;
#X connect 10 0 6 0;
#X connect 13 0 12 0;
#X connect 13 0 0 0;
#X connect 14 0 13 0;
#X connect 15 0 1 0;
#X connect 16 0 9 0;
#X connect 18 0 21 0;
#X connect 19 0 22 0;
#X connect 20 0 23 0;
#X connect 21 0 14 0;
#X connect 22 0 15 0;
#X connect 23 0 16 0;
#X coords 0 -1 1 1 85 60 1 100 100;
#X restore 29 27 pd rotaries;
#X obj 27 270 s \$0-midinote;
#X obj 33 552 hip~ 4;
#X obj 177 221 f;
#X obj 204 222 + 1;
#X obj 379 28 declare -path chair;
#X obj 32 589 dac~;
#X obj 231 222 % 8;
#X obj 33 383 chair.gain~;
#X obj 177 244 s \$0-current;
#X obj 33 511 chair.gain~;
#X text 378 401 In this example \, every touch down event iterates
to the next voice even when the hit is on the same pad., f 38;
#X obj 379 49 declare -path abstractions;
#X text 30 105 Rotaries:;
#X obj 33 488 clone karplus-strong 8 \$0;
#X text 377 451 This allows you to build up seperate parallel voices
of the same note., f 38;
#N canvas 666 511 323 306 instance-iteration 0;
#X obj 42 230 outlet;
#X obj 117 121 r \$0-midinote;
#X obj 43 121 r \$0-current;
#X obj 42 173 pack f f;
#X connect 1 0 3 1;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X restore 180 461 pd instance-iteration;
#X text 29 121 Distortion \, Feedback \, Timbre;
#X obj 228 404 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X obj 33 429 chair.feedback-cancellation~ 50 1;
#N canvas 864 596 450 300 init 0;
#X obj 95 66 loadbang;
#X msg 96 93 1;
#X obj 96 116 s \$0-active;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X restore 379 70 pd init;
#X obj 33 344 adc~;
#X obj 27 147 notein 1;
#X obj 178 196 r \$0-newNote;
#X obj 58 243 s \$0-newNote;
#X obj 27 170 stripnote;
#X obj 58 219 sel 1;
#X obj 58 193 > 0;
#X connect 2 0 6 0;
#X connect 2 0 6 1;
#X connect 3 0 4 0;
#X connect 3 0 9 0;
#X connect 4 0 7 0;
#X connect 7 0 3 1;
#X connect 8 0 19 0;
#X connect 10 0 2 0;
#X connect 14 0 10 0;
#X connect 16 0 14 1;
#X connect 18 0 19 2;
#X connect 19 0 14 0;
#X connect 21 0 8 0;
#X connect 22 0 25 0;
#X connect 22 1 25 1;
#X connect 22 1 27 0;
#X connect 23 0 3 0;
#X connect 25 0 1 0;
#X connect 26 0 24 0;
#X connect 27 0 26 0;
#N canvas 200 70 700 835 10;
#X declare -path chair;
#X declare -path abstractions;
#N canvas 75 509 664 369 rotaries 0;
#X floatatom 136 275 5 0 0 0 - - -;
#X obj 283 195 * 9000;
#X floatatom 294 237 5 0 0 0 - - -;
#X obj 285 168 s \$0-led1;
#X obj 467 169 s \$0-led2;
#X obj 110 169 s \$0-led0;
#X obj 103 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 1392 1;
#X obj 130 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 2035 1;
#X obj 159 120 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 1178 1;
#X obj 349 30 loadbang;
#X msg 320 61 1;
#X msg 356 60 20;
#X msg 391 63 10;
#X obj 103 298 s \$0-fm-amount;
#X obj 283 216 + 0;
#X obj 467 220 * 1;
#X obj 103 232 * 0.499;
#X obj 283 304 s \$0-lp;
#X obj 467 301 s \$0-fm-freq;
#X obj 86 29 ctlin 14 1;
#X obj 154 29 ctlin 15 1;
#X obj 226 29 ctlin 16 1;
#X obj 92 59 / 127;
#X obj 157 63 / 127;
#X obj 223 65 / 127;
#X connect 1 0 14 0;
#X connect 6 0 5 0;
#X connect 6 0 16 0;
#X connect 7 0 3 0;
#X connect 7 0 1 0;
#X connect 8 0 4 0;
#X connect 8 0 15 0;
#X connect 9 0 11 0;
#X connect 9 0 10 0;
#X connect 9 0 12 0;
#X connect 10 0 6 0;
#X connect 11 0 7 0;
#X connect 14 0 2 0;
#X connect 14 0 17 0;
#X connect 15 0 18 0;
#X connect 16 0 0 0;
#X connect 16 0 13 0;
#X connect 19 0 22 0;
#X connect 20 0 23 0;
#X connect 21 0 24 0;
#X connect 22 0 6 0;
#X connect 23 0 7 0;
#X connect 24 0 8 0;
#X coords 0 -1 1 1 85 60 1 100 100;
#X restore 37 26 pd rotaries;
#X obj 40 659 hip~ 4;
#X obj 384 16 declare -path chair;
#X obj 39 696 dac~;
#X obj 38 382 chair.gain~;
#X obj 41 546 chair.gain~;
#X obj 384 37 declare -path abstractions;
#X text 31 90 Rotaries:;
#N canvas 354 244 406 282 instance-iteration 0;
#X obj 42 165 outlet;
#X obj 134 55 r \$0-midinote;
#X obj 42 56 r \$0-current;
#X obj 42 108 pack f f;
#X connect 1 0 3 1;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X restore 169 486 pd instance-iteration;
#X obj 234 412 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#N canvas 864 596 450 300 init 0;
#X obj 95 66 loadbang;
#X msg 96 93 1;
#X obj 96 116 s \$0-active;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X restore 385 60 pd init;
#X obj 94 662 hip~ 4;
#X obj 39 437 chair.feedback-cancellation~ 50 1;
#N canvas 0 50 450 300 (subpatch) 0;
#X array \$0-scope 1024 float 0;
#X coords 0 -1 1023 1 200 140 1 0 0;
#X restore 338 466 graph;
#X obj 130 601 tabwrite~ \$0-scope;
#X obj 130 577 metro 150;
#X obj 130 555 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X obj 40 625 chair.chrismoore-reverb~ 2368 2368 2467 0.921 0.018;
#X obj 40 511 clone fm-karplus 14 \$0;
#X text 30 105 FM-amount \, Cut-off \, Fm-Freq;
#X obj 38 351 adc~ 1;
#X obj 38 288 s \$0-midinote;
#X obj 65 263 s \$0-current;
#X obj 38 165 notein 1;
#X obj 38 188 stripnote;
#X obj 65 240 % 14;
#X obj 65 217 change;
#X connect 1 0 3 0;
#X connect 4 0 12 0;
#X connect 5 0 14 0;
#X connect 5 0 17 0;
#X connect 8 0 18 1;
#X connect 9 0 12 2;
#X connect 11 0 3 1;
#X connect 12 0 18 0;
#X connect 15 0 14 0;
#X connect 16 0 15 0;
#X connect 17 0 1 0;
#X connect 17 1 11 0;
#X connect 18 0 5 0;
#X connect 20 0 4 0;
#X connect 23 0 24 0;
#X connect 23 1 24 1;
#X connect 24 0 21 0;
#X connect 24 0 26 0;
#X connect 25 0 22 0;
#X connect 26 0 25 0;
#X coords 0 835 1 834 85 60 0;
#N canvas 814 203 478 478 10;
#X declare -path ./abstractions;
#X declare -path ./chair;
#N canvas 417 210 646 397 rotaries 0;
#X obj 103 119 vsl 15 35 0 127 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 0 1;
#X obj 130 119 vsl 15 35 0 127 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 0 1;
#X obj 159 119 vsl 15 35 0 127 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 0 1;
#X obj 40 240 s \$0-param-1;
#X obj 142 241 s \$0-param-2;
#X obj 244 241 s \$0-param-3;
#X obj 65 38 ctlin 14;
#X obj 130 38 ctlin 15;
#X obj 202 38 ctlin 16;
#X connect 0 0 3 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 6 0 0 0;
#X connect 7 0 1 0;
#X connect 8 0 2 0;
#X coords 0 -1 1 1 85 60 1 100 100;
#X restore 40 89 pd rotaries;
#X obj 39 308 chair.gain~;
#X obj 39 401 dac~;
#N canvas 545 23 679 855 snare 0;
#X obj 45 26 inlet~;
#X obj 163 785 *~ 0.98;
#X obj 46 806 +~;
#X obj 74 833 delwrite~ \$0-del 200;
#X obj 47 865 outlet~;
#X obj 239 633 +~;
#X obj 240 553 noise~;
#X obj 241 264 noise~;
#X obj 163 359 allp~ 2.2;
#X obj 163 423 allp~ 2.5;
#X obj 162 755 *~ -1;
#X obj 241 287 lop~ 100;
#X obj 240 576 lop~ 500;
#X obj 240 597 *~ 0.01;
#X obj 225 725 r \$0-highdamp;
#X obj 162 726 lop~ 7000;
#X obj 297 579 / 100;
#X obj 162 332 allp4~ 6.53;
#X obj 194 185 noise~;
#X obj 193 254 +~;
#X obj 258 215 r \$0-param-1;
#X obj 258 238 / 10;
#X obj 241 310 +~ 1;
#X obj 193 231 *~ 0.5;
#X obj 231 359 sig~ 0.5;
#X obj 194 207 lop~ 2000;
#X obj 230 422 sig~ 0.14;
#X obj 281 70 r \$0-param-2;
#X obj 281 141 * 15000;
#X obj 281 164 + 1000;
#X obj 281 93 / 100;
#X obj 281 116 pow 3;
#X obj 297 602 expr 1-$f1;
#X obj 297 447 r \$0-param-2;
#X obj 297 470 / 100;
#X obj 297 492 pow 3;
#X obj 297 512 expr 1-$f1;
#X obj 297 535 * 0.25;
#X obj 297 558 + 0.75;
#X obj 320 676 r \$0-param-2;
#X obj 320 698 / 100;
#X obj 320 720 pow 3;
#X obj 320 740 expr 1-$f1;
#X obj 320 784 + 0.7;
#X obj 320 762 * 0.275;
#X obj 164 692 hip~;
#X obj 185 671 r \$0-lowdamp;
#X obj 242 333 *~ 0.75;
#X obj 161 158 delread4~ \$0-del;
#X obj 162 130 +~;
#X obj 193 -16 chair.distance;
#X obj 193 -57 r \$0-xy;
#X msg 274 -37 0.5 0.5;
#X obj 193 26 pow 2;
#X obj 193 5 / 0.72;
#X obj 193 49 expr 1-$f1;
#X obj 193 70 + 2;
#X obj 274 -59 loadbang;
#X obj 411 507 / 100;
#X obj 411 530 moses 0.5;
#X obj 464 551 - 0.5;
#X obj 411 553 * 2;
#X obj 464 574 * 2;
#X obj 464 597 pow 2;
#X obj 464 619 * 200;
#X obj 411 575 sqrt;
#X obj 411 484 r \$0-param-3;
#X obj 409 619 + 2000;
#X obj 409 596 * 7000;
#X obj 45 50 chair.dc-offset~;
#X obj 139 102 *~ 0.5;
#X obj 138 79 lop~ 20;
#X text 410 841 philipp schmalfuß \, 2018;
#X obj 438 113 block~ 1;
#X obj 163 635 allp4~ 4;
#X connect 0 0 69 0;
#X connect 1 0 2 1;
#X connect 2 0 3 0;
#X connect 2 0 4 0;
#X connect 5 0 74 2;
#X connect 6 0 12 0;
#X connect 7 0 11 0;
#X connect 8 0 9 0;
#X connect 9 0 74 0;
#X connect 10 0 1 0;
#X connect 11 0 22 0;
#X connect 12 0 13 0;
#X connect 13 0 5 0;
#X connect 14 0 15 1;
#X connect 15 0 10 0;
#X connect 16 0 32 0;
#X connect 16 0 13 1;
#X connect 17 0 8 0;
#X connect 18 0 25 0;
#X connect 19 0 17 1;
#X connect 20 0 21 0;
#X connect 21 0 19 1;
#X connect 22 0 47 0;
#X connect 23 0 19 0;
#X connect 24 0 8 2;
#X connect 25 0 23 0;
#X connect 26 0 9 2;
#X connect 27 0 30 0;
#X connect 28 0 29 0;
#X connect 29 0 25 1;
#X connect 30 0 31 0;
#X connect 31 0 28 0;
#X connect 32 0 5 1;
#X connect 33 0 34 0;
#X connect 34 0 35 0;
#X connect 35 0 36 0;
#X connect 36 0 37 0;
#X connect 37 0 38 0;
#X connect 38 0 16 0;
#X connect 39 0 40 0;
#X connect 40 0 41 0;
#X connect 41 0 42 0;
#X connect 42 0 44 0;
#X connect 43 0 1 1;
#X connect 44 0 43 0;
#X connect 45 0 15 0;
#X connect 46 0 45 1;
#X connect 47 0 17 2;
#X connect 48 0 17 0;
#X connect 49 0 48 0;
#X connect 50 0 54 0;
#X connect 51 0 50 0;
#X connect 52 0 50 1;
#X connect 53 0 55 0;
#X connect 54 0 53 0;
#X connect 55 0 56 0;
#X connect 56 0 49 1;
#X connect 57 0 52 0;
#X connect 58 0 59 0;
#X connect 59 0 61 0;
#X connect 59 1 60 0;
#X connect 60 0 62 0;
#X connect 61 0 65 0;
#X connect 62 0 63 0;
#X connect 63 0 64 0;
#X connect 64 0 45 1;
#X connect 65 0 68 0;
#X connect 66 0 58 0;
#X connect 67 0 15 1;
#X connect 68 0 67 0;
#X connect 69 0 2 0;
#X connect 69 1 71 0;
#X connect 70 0 49 0;
#X connect 71 0 70 0;
#X connect 74 0 45 0;
#X restore 39 272 pd snare;
#N canvas 4 61 450 300 init 0;
#X obj 235 49 loadbang;
#X msg 131 93 0.75;
#X obj 131 116 s \$0-shake;
#X msg 201 102 -20;
#X obj 201 125 s \$0-sensitivity;
#X obj 306 128 s \$0-activate;
#X msg 309 102 1;
#X connect 0 0 1 0;
#X connect 0 0 3 0;
#X connect 0 0 6 0;
#X connect 1 0 2 0;
#X connect 3 0 4 0;
#X connect 6 0 5 0;
#X restore 189 128 pd init;
#X text 37 163 rotaries: 1: drumhead tuning \, 2: snare carpet \, 3:
filter;
#X obj 190 85 declare -path ./abstractions;
#X obj 190 106 declare -path ./chair;
#X obj 39 239 chair.feedback-cancellation~;
#X obj 204 218 tgl 15 0 empty \$0-activate empty 17 7 0 10 -262144
-1 -1 1 1;
#X obj 39 206 adc~;
#N canvas 0 23 450 300 position 1;
#X obj 47 121 s \$0-xy;
#X obj 36 36 ctlin 12;
#X obj 107 36 ctlin 13;
#X obj 46 96 pack 0 0;
#X obj 44 67 / 127;
#X obj 103 67 / 127;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 0 0;
#X connect 4 0 3 0;
#X connect 5 0 3 1;
#X restore 39 54 pd position;
#X connect 1 0 2 0;
#X connect 1 0 2 1;
#X connect 3 0 1 0;
#X connect 8 0 3 0;
#X connect 9 0 8 2;
#X connect 10 0 8 0;
#N canvas 547 161 879 571 10;
#X declare -path ./abstractions;
#X declare -path ./chair;
#X obj 451 69 hsl 128 15 0 300 0 0 empty \$0-param-4 empty -2 -8 0
10 -262144 -1 -1 5976 1;
#X obj 448 111 s \$0-lowdamp;
#X floatatom 448 89 5 0 0 0 - - -;
#X obj 450 178 s \$0-highdamp;
#X obj 453 132 hsl 128 15 6000 200 0 0 empty \$0-param-5 empty -2 -8
0 10 -262144 -1 -1 2540 1;
#X floatatom 450 152 5 0 0 0 - - -;
#X obj 453 199 hsl 128 15 70 99.9 0 0 empty \$0-param-6 empty -2 -8
0 10 -262144 -1 -1 12065 1;
#X floatatom 450 219 5 0 0 0 - - -;
#X obj 450 241 s \$0-decay;
#N canvas 421 181 1073 969 ridecymbal 0;
#X obj 452 28 block~ 1;
#X obj 24 27 inlet~;
#X obj 172 400 *~ 0.1;
#X obj 151 546 sig~;
#X obj 152 525 / 100;
#X obj 84 717 hip~ 1;
#X obj 85 799 *~ 0.98;
#X obj 23 827 +~;
#X obj 51 854 delwrite~ \$0-del 200;
#X obj 24 886 outlet~;
#X floatatom 163 774 5 0 99.99 0 - - -;
#X obj 163 796 / 100;
#X floatatom 142 717 5 0 0 0 - - -;
#X floatatom 157 739 5 0 0 0 - - -;
#X obj 152 476 sig~;
#X floatatom 153 435 5 0 100 0 - - -;
#X obj 153 455 / 100;
#X obj 282 215 /;
#X msg 282 194 1000 \$1;
#X obj 282 173 mtof;
#X obj 125 651 +~;
#X obj 153 609 noise~;
#X obj 171 331 noise~;
#X obj 84 476 allp~ 2.2;
#X obj 84 547 allp~ 2.5;
#X obj 85 672 allp~ 5;
#X obj 84 769 *~ -1;
#X obj 153 653 *~ 0.01;
#X obj 126 586 sig~ 0.09;
#X obj 171 377 +~ 1;
#X obj 222 423 / 100;
#X obj 222 446 * 50;
#X obj 222 400 r \$0-param-2;
#X obj 220 505 / 100;
#X obj 220 528 * 50;
#X obj 220 482 r \$0-param-3;
#X obj 196 702 r \$0-lowdamp;
#X obj 195 735 r \$0-highdamp;
#X obj 202 772 r \$0-decay;
#X obj 84 740 lop~ 7000;
#X obj 188 227 noise~;
#X obj 187 297 +~;
#X obj 238 271 r \$0-param-1;
#X obj 83 404 allp4~ 6.53;
#X obj 188 249 lop~ 10;
#X obj 187 273 *~ 0.03;
#X obj 153 632 lop~ 30;
#X obj 171 354 lop~ 10;
#X obj 238 294 / 15;
#X obj 83 217 +~;
#X obj 82 259 delread4~ \$0-del;
#X obj 84 112 osc~;
#X obj 84 158 *~;
#X floatatom 84 90 5 0 0 0 - - -;
#X floatatom 120 143 5 0 0 0 - - -;
#X obj 282 60 chair.distance;
#X obj 282 18 r \$0-xy;
#X msg 363 39 0.5 0.5;
#X obj 282 103 pow 2;
#X obj 363 17 loadbang;
#X floatatom 282 231 5 0 0 0 - - -;
#X obj 84 65 r \$0-vibra-freq;
#X obj 120 121 r \$0-vibra-amount;
#X obj 282 81 * 2;
#X text 266 853 Philipp Schmalfuß \, 2018;
#X obj 282 128 * -12;
#X obj 282 149 + 92;
#X connect 1 0 7 0;
#X connect 2 0 43 2;
#X connect 3 0 24 2;
#X connect 4 0 3 0;
#X connect 5 0 39 0;
#X connect 6 0 7 1;
#X connect 7 0 8 0;
#X connect 7 0 9 0;
#X connect 10 0 11 0;
#X connect 11 0 6 1;
#X connect 12 0 5 1;
#X connect 13 0 39 1;
#X connect 14 0 23 2;
#X connect 15 0 16 0;
#X connect 16 0 14 0;
#X connect 17 0 49 1;
#X connect 17 0 60 0;
#X connect 18 0 17 0;
#X connect 19 0 18 0;
#X connect 20 0 25 2;
#X connect 21 0 46 0;
#X connect 22 0 47 0;
#X connect 23 0 24 0;
#X connect 24 0 25 0;
#X connect 25 0 5 0;
#X connect 26 0 6 0;
#X connect 27 0 20 1;
#X connect 28 0 20 0;
#X connect 29 0 2 0;
#X connect 30 0 31 0;
#X connect 31 0 15 0;
#X connect 32 0 30 0;
#X connect 33 0 34 0;
#X connect 34 0 4 0;
#X connect 35 0 33 0;
#X connect 36 0 12 0;
#X connect 37 0 13 0;
#X connect 38 0 10 0;
#X connect 39 0 26 0;
#X connect 40 0 44 0;
#X connect 41 0 43 1;
#X connect 42 0 48 0;
#X connect 43 0 23 0;
#X connect 44 0 45 0;
#X connect 45 0 41 0;
#X connect 46 0 27 0;
#X connect 47 0 29 0;
#X connect 48 0 41 1;
#X connect 49 0 50 0;
#X connect 50 0 43 0;
#X connect 51 0 52 0;
#X connect 52 0 49 0;
#X connect 53 0 51 0;
#X connect 54 0 52 1;
#X connect 55 0 63 0;
#X connect 56 0 55 0;
#X connect 57 0 55 1;
#X connect 58 0 65 0;
#X connect 59 0 57 0;
#X connect 61 0 53 0;
#X connect 62 0 54 0;
#X connect 63 0 58 0;
#X connect 65 0 66 0;
#X connect 66 0 19 0;
#X restore 29 446 pd ridecymbal;
#X obj 29 474 chair.gain~;
#X obj 30 527 dac~;
#X obj 452 308 hsl 128 15 0 20 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1;
#X floatatom 449 328 5 0 0 0 - - -;
#X text 481 82 low frequency damping;
#X text 487 149 high frequency damping;
#N canvas 1483 618 450 300 init 0;
#X obj 80 41 loadbang;
#X msg 80 73 95;
#X obj 182 95 s \$0-sensitivity;
#X msg 182 72 -20;
#X obj 287 96 s \$0-activate;
#X msg 288 76 1;
#X obj 80 96 s \$0-param-6;
#X connect 0 0 1 0;
#X connect 0 0 3 0;
#X connect 0 0 5 0;
#X connect 1 0 6 0;
#X connect 3 0 2 0;
#X connect 5 0 4 0;
#X restore 311 39 pd init;
#X obj 449 350 s \$0-vibra-freq;
#X text 494 325 vibrato frequency;
#X obj 453 379 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1;
#X floatatom 450 399 5 0 0 0 - - -;
#X text 495 396 vibrato amount;
#X obj 450 421 s \$0-vibra-amount;
#X obj 447 2 declare -path ./abstractions;
#X obj 447 23 declare -path ./chair;
#X text 86 15 ~~~~work in progress~~~~;
#X obj 29 344 chair.feedback-cancellation~;
#X obj 196 325 tgl 15 0 empty \$0-activate empty 17 7 0 10 -262144
-1 -1 1 1;
#N canvas 277 285 646 397 rotaries2 1;
#X obj 103 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 1600 1;
#X obj 130 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 680 1;
#X obj 159 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 3230 1;
#X obj 216 179 s \$0-led1;
#X obj 405 178 s \$0-led2;
#X obj 112 173 s \$0-led0;
#X obj 103 340 s \$0-param-4;
#X obj 241 340 s \$0-param-5;
#X obj 400 334 s \$0-param-6;
#X obj 103 237 * 300;
#X obj 180 238 * -5800;
#X obj 181 282 + 6000;
#X obj 288 238 * 29.9;
#X obj 329 271 + 70;
#X obj 113 11 loadbang;
#X msg 98 33 0.5;
#X msg 193 30 0.95;
#X msg 147 31 0.4;
#X connect 0 0 5 0;
#X connect 0 0 9 0;
#X connect 1 0 3 0;
#X connect 1 0 10 0;
#X connect 2 0 4 0;
#X connect 2 0 12 0;
#X connect 9 0 6 0;
#X connect 10 0 11 0;
#X connect 11 0 7 0;
#X connect 12 0 13 0;
#X connect 13 0 8 0;
#X connect 14 0 15 0;
#X connect 14 0 17 0;
#X connect 14 0 16 0;
#X connect 15 0 0 0;
#X connect 16 0 2 0;
#X connect 17 0 1 0;
#X coords 0 -1 1 1 85 60 1 100 100;
#X restore 123 187 pd rotaries2;
#N canvas 346 390 646 397 rotaries1 0;
#X obj 103 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 3400 1;
#X obj 130 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 1046 1;
#X obj 159 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 2750 1;
#X obj 103 340 s \$0-param-1;
#X obj 103 237 * 100;
#X obj 180 238 * 100;
#X obj 288 238 * 100;
#X obj 241 340 s \$0-param-2;
#X obj 400 334 s \$0-param-3;
#X obj 216 179 s \$0-led1;
#X obj 405 178 s \$0-led2;
#X obj 112 173 s \$0-led0;
#X obj 100 22 ctlin 14;
#X obj 170 23 ctlin 15;
#X obj 246 22 ctlin 16;
#X obj 100 49 / 127;
#X obj 170 47 / 127;
#X obj 246 48 / 127;
#X connect 0 0 4 0;
#X connect 0 0 11 0;
#X connect 1 0 5 0;
#X connect 1 0 9 0;
#X connect 2 0 6 0;
#X connect 2 0 10 0;
#X connect 4 0 3 0;
#X connect 5 0 7 0;
#X connect 6 0 8 0;
#X connect 12 0 15 0;
#X connect 13 0 16 0;
#X connect 14 0 17 0;
#X connect 15 0 0 0;
#X connect 16 0 1 0;
#X connect 17 0 2 0;
#X coords 0 -1 1 1 85 60 1 100 100;
#X restore 30 188 pd rotaries1;
#X obj 29 300 adc~;
#N canvas 0 23 450 300 position 0;
#X obj 47 121 s \$0-xy;
#X obj 36 36 ctlin 12;
#X obj 107 36 ctlin 13;
#X obj 46 96 pack 0 0;
#X obj 44 67 / 127;
#X obj 103 67 / 127;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 0 0;
#X connect 4 0 3 0;
#X connect 5 0 3 1;
#X restore 34 143 pd position;
#X connect 0 0 2 0;
#X connect 2 0 1 0;
#X connect 4 0 5 0;
#X connect 5 0 3 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 10 0 11 1;
#X connect 12 0 13 0;
#X connect 13 0 17 0;
#X connect 19 0 20 0;
#X connect 20 0 22 0;
#X connect 26 0 9 0;
#X connect 27 0 26 2;
#X connect 30 0 26 0;
#N canvas 767 214 728 783 10;
#X declare -path chair;
#X declare -path abstractions;
#X obj 36 30 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
;
#X floatatom 366 208 5 0 0 0 - - -;
#N canvas 75 683 664 369 rotaries 0;
#X obj 103 25 inlet;
#X obj 283 195 * 9000;
#X floatatom 294 237 5 0 0 0 - - -;
#X obj 285 168 s \$0-led1;
#X obj 467 169 s \$0-led2;
#X obj 110 169 s \$0-led0;
#X obj 103 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 2408 1;
#X obj 103 49 route 0 1 2;
#X obj 130 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 2975 1;
#X obj 159 120 vsl 15 35 0.01 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 359 1;
#X obj 354 7 loadbang;
#X obj 283 73 chair.rotary-limit-range 24;
#X msg 361 37 20;
#X msg 396 40 10;
#X obj 103 73 chair.rotary-limit-range 24;
#X obj 283 216 + 0;
#X obj 283 304 s \$0-lp;
#X obj 467 301 s \$0-timbre;
#X obj 103 300 s \$0-fb;
#X floatatom 490 266 5 0 0 0 - - -;
#X obj 467 220 * 2;
#X obj 465 73 chair.rotary-limit-range 96;
#X msg 325 38 16;
#X obj 103 276 expr tanh($f1);
#X obj 103 232 * 4;
#X connect 0 0 7 0;
#X connect 1 0 15 0;
#X connect 6 0 5 0;
#X connect 6 0 24 0;
#X connect 7 0 14 0;
#X connect 7 1 11 0;
#X connect 7 2 21 0;
#X connect 8 0 3 0;
#X connect 8 0 1 0;
#X connect 9 0 4 0;
#X connect 9 0 20 0;
#X connect 10 0 12 0;
#X connect 10 0 22 0;
#X connect 10 0 13 0;
#X connect 11 0 8 0;
#X connect 12 0 11 1;
#X connect 13 0 21 1;
#X connect 14 0 6 0;
#X connect 15 0 2 0;
#X connect 15 0 16 0;
#X connect 20 0 17 0;
#X connect 20 0 19 0;
#X connect 21 0 9 0;
#X connect 22 0 14 1;
#X connect 23 0 18 0;
#X connect 24 0 23 0;
#X coords 0 -1 1 1 85 60 1 100 100;
#X restore 130 195 pd rotaries;
#X obj 438 331 s \$0-midinote;
#X floatatom 455 237 5 0 0 0 - - -;
#X floatatom 454 307 5 0 0 0 - - -;
#X msg 55 55 info;
#X obj 38 677 hip~ 4;
#X obj 156 325 s \$0-xy;
#X obj 75 325 s \$0-touch;
#X obj 356 130 r \$0-xy;
#X obj 185 173 s \$0-updown;
#X obj 384 22 declare -path chair;
#N canvas 941 662 464 257 LED 0;
#X obj 69 185 outlet;
#X obj 35 33 r \$0-led0;
#X obj 144 33 r \$0-led1;
#X obj 243 36 r \$0-led2;
#X msg 35 68 led 0 \$1 0 \$1;
#X msg 144 71 led 1 0 \$1 \$1;
#X msg 243 74 led 2 \$1 \$1 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 6 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 0 0;
#X restore 67 87 pd LED;
#X obj 37 711 dac~;
#X obj 438 211 chair.hex-tuning;
#X obj 356 152 chair.hex-mapping;
#X obj 131 386 r \$0-touch;
#X obj 37 360 chair.gain~;
#X obj 356 287 s \$0-current;
#X obj 38 604 chair.gain~;
#X obj 567 236 r \$0-updown;
#X obj 438 256 chair.transpose-oct -2;
#X msg 551 173 g_major;
#X msg 607 173 b_minor;
#X obj 384 43 declare -path abstractions;
#X text 124 259 Rotaries:;
#X obj 75 145 route position rotary button;
#X obj 75 297 chair.capsense;
#N canvas 354 244 463 284 instance-iteration 0;
#X obj 42 165 outlet;
#X obj 134 55 r \$0-midinote;
#X obj 42 56 r \$0-current;
#X obj 42 108 pack f f;
#X connect 1 0 3 1;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X restore 162 532 pd instance-iteration;
#X obj 38 412 chair.touchgate~;
#X obj 39 532 chair.dc-offset~;
#X obj 36 118 tickle~;
#X obj 234 473 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X obj 356 184 t f f;
#N canvas 864 596 450 300 init 0;
#X obj 95 66 loadbang;
#X msg 96 93 1;
#X obj 96 116 s \$0-active;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X restore 385 66 pd init;
#X obj 39 498 chair.feedback-cancellation~ 50 1;
#X text 123 275 Feedback \, Cut-off \, Delay 2 Size;
#N canvas 0 50 450 300 (subpatch) 0;
#X array \$0-scope 1024 float 0;
#X coords 0 -1 1023 1 200 140 1 0 0;
#X restore 353 433 graph;
#X obj 154 667 tabwrite~ \$0-scope;
#X obj 154 643 metro 150;
#X obj 154 621 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X obj 483 146 loadbang;
#X obj 136 471 mtof;
#X obj 136 449 r \$0-midinote;
#X obj 356 244 % 5;
#X obj 38 569 clone 2D-waveguide-allpass 5 \$0;
#X msg 483 173 ratios;
#X connect 0 0 32 0;
#X connect 6 0 32 0;
#X connect 7 0 14 0;
#X connect 7 0 14 1;
#X connect 10 0 16 0;
#X connect 13 0 32 0;
#X connect 15 0 4 0;
#X connect 15 0 22 0;
#X connect 16 0 34 0;
#X connect 17 0 30 1;
#X connect 18 0 30 0;
#X connect 20 0 39 0;
#X connect 20 0 7 0;
#X connect 21 0 22 1;
#X connect 22 0 5 0;
#X connect 22 0 3 0;
#X connect 23 0 15 1;
#X connect 24 0 15 1;
#X connect 27 0 28 0;
#X connect 27 1 2 0;
#X connect 27 2 11 0;
#X connect 28 0 9 0;
#X connect 28 1 8 0;
#X connect 29 0 46 1;
#X connect 30 0 36 0;
#X connect 31 0 46 0;
#X connect 32 0 18 0;
#X connect 32 1 27 0;
#X connect 33 0 36 2;
#X connect 34 0 1 0;
#X connect 34 0 45 0;
#X connect 34 1 15 0;
#X connect 36 0 31 0;
#X connect 40 0 39 0;
#X connect 41 0 40 0;
#X connect 42 0 47 0;
#X connect 43 0 36 1;
#X connect 44 0 43 0;
#X connect 45 0 19 0;
#X connect 46 0 20 0;
#X connect 47 0 15 1;
#N canvas 520 181 697 901 10;
#X declare -path chair;
#X declare -path abstractions;
#X obj 36 30 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
;
#X floatatom 377 265 5 0 0 0 - - -;
#N canvas 75 683 664 369 rotaries 0;
#X obj 102 25 inlet;
#X floatatom 114 264 5 0 0 0 - - -;
#X obj 283 195 * 9000;
#X floatatom 294 237 5 0 0 0 - - -;
#X obj 285 168 s \$0-led1;
#X obj 467 169 s \$0-led2;
#X obj 110 169 s \$0-led0;
#X obj 103 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 2550 1;
#X obj 102 49 route 0 1 2;
#X obj 130 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 2408 1;
#X obj 159 120 vsl 15 35 0.01 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 3257 1;
#X obj 354 7 loadbang;
#X obj 283 73 chair.rotary-limit-range 24;
#X obj 465 73 chair.rotary-limit-range 24;
#X msg 325 38 1;
#X msg 361 37 20;
#X msg 396 40 10;
#X obj 102 73 chair.rotary-limit-range 24;
#X obj 283 216 + 0;
#X obj 103 232 * 1;
#X obj 283 304 s \$0-lp;
#X obj 467 301 s \$0-timbre;
#X obj 104 300 s \$0-fb;
#X floatatom 490 266 5 0 0 0 - - -;
#X obj 467 220 * 2;
#X connect 0 0 8 0;
#X connect 2 0 18 0;
#X connect 7 0 6 0;
#X connect 7 0 19 0;
#X connect 8 0 17 0;
#X connect 8 1 12 0;
#X connect 8 2 13 0;
#X connect 9 0 4 0;
#X connect 9 0 2 0;
#X connect 10 0 5 0;
#X connect 10 0 24 0;
#X connect 11 0 15 0;
#X connect 11 0 14 0;
#X connect 11 0 16 0;
#X connect 12 0 9 0;
#X connect 13 0 10 0;
#X connect 14 0 17 1;
#X connect 15 0 12 1;
#X connect 16 0 13 1;
#X connect 17 0 7 0;
#X connect 18 0 3 0;
#X connect 18 0 20 0;
#X connect 19 0 1 0;
#X connect 19 0 22 0;
#X connect 24 0 21 0;
#X connect 24 0 23 0;
#X coords 0 -1 1 1 85 60 1 100 100;
#X restore 130 195 pd rotaries;
#X obj 438 331 s \$0-midinote;
#X floatatom 455 237 5 0 0 0 - - -;
#X floatatom 454 307 5 0 0 0 - - -;
#X msg 55 55 info;
#X obj 38 728 hip~ 4;
#X obj 156 325 s \$0-xy;
#X obj 75 325 s \$0-touch;
#X obj 356 130 r \$0-xy;
#X obj 185 173 s \$0-updown;
#X obj 384 22 declare -path chair;
#N canvas 941 662 464 257 LED 0;
#X obj 69 185 outlet;
#X obj 35 33 r \$0-led0;
#X obj 144 33 r \$0-led1;
#X obj 243 36 r \$0-led2;
#X msg 35 68 led 0 \$1 0 \$1;
#X msg 144 71 led 1 0 \$1 \$1;
#X msg 243 74 led 2 \$1 \$1 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 6 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 0 0;
#X restore 67 87 pd LED;
#X obj 37 765 dac~;
#X obj 438 211 chair.hex-tuning;
#X obj 356 152 chair.hex-mapping;
#X obj 131 386 r \$0-touch;
#X obj 37 360 chair.gain~;
#X obj 356 286 s \$0-current;
#X obj 38 591 chair.gain~;
#X obj 567 236 r \$0-updown;
#X obj 438 256 chair.transpose-oct -2;
#X msg 551 173 g_major;
#X msg 607 173 b_minor;
#X obj 384 43 declare -path abstractions;
#X text 124 259 Rotaries:;
#X obj 75 145 route position rotary button;
#X obj 75 297 chair.capsense;
#N canvas 354 244 463 284 instance-iteration 0;
#X obj 42 165 outlet;
#X obj 134 55 r \$0-midinote;
#X obj 42 56 r \$0-current;
#X obj 42 108 pack f f;
#X connect 1 0 3 1;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X restore 162 519 pd instance-iteration;
#X obj 38 412 chair.touchgate~;
#X obj 39 519 chair.dc-offset~;
#X obj 36 118 tickle~;
#X obj 234 460 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X obj 356 184 t f f;
#N canvas 864 596 450 300 init 0;
#X obj 95 66 loadbang;
#X msg 96 93 1;
#X obj 96 116 s \$0-active;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X restore 385 66 pd init;
#X obj 127 730 hip~ 4;
#X obj 39 485 chair.feedback-cancellation~ 50 1;
#X obj 37 694 chair.chrismoore-reverb~ 2368 2368 2467 0.921 0.138;
#X text 123 275 Feedback \, Cut-off \, Delay 2 Size;
#N canvas 0 50 450 300 (subpatch) 0;
#X array \$0-scope 1024 float 0;
#X coords 0 -1 1023 1 200 140 1 0 0;
#X restore 350 416 graph;
#X obj 348 654 tabwrite~ \$0-scope;
#X obj 348 599 metro 150;
#X obj 348 577 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X msg 483 173 chromatic;
#X obj 483 146 loadbang;
#X obj 136 461 mtof;
#X obj 413 576 r \$0-touch;
#X obj 413 599 sel 1;
#X obj 413 625 del 10;
#X floatatom 452 600 5 0 0 0 - - -;
#X obj 38 556 clone simple-2D-waveguide 5 \$0;
#X obj 356 237 % 5;
#X obj 136 437 r \$0-midinote;
#X connect 0 0 32 0;
#X connect 6 0 32 0;
#X connect 7 0 14 0;
#X connect 10 0 16 0;
#X connect 13 0 32 0;
#X connect 15 0 4 0;
#X connect 15 0 22 0;
#X connect 16 0 34 0;
#X connect 17 0 30 1;
#X connect 18 0 30 0;
#X connect 20 0 41 0;
#X connect 20 0 38 0;
#X connect 21 0 22 1;
#X connect 22 0 5 0;
#X connect 22 0 3 0;
#X connect 23 0 15 1;
#X connect 24 0 15 1;
#X connect 27 0 28 0;
#X connect 27 1 2 0;
#X connect 27 2 11 0;
#X connect 28 0 9 0;
#X connect 28 1 8 0;
#X connect 29 0 51 1;
#X connect 30 0 37 0;
#X connect 31 0 51 0;
#X connect 32 0 18 0;
#X connect 32 1 27 0;
#X connect 33 0 37 2;
#X connect 34 0 52 0;
#X connect 34 1 15 0;
#X connect 36 0 14 1;
#X connect 37 0 31 0;
#X connect 38 0 7 0;
#X connect 38 1 36 0;
#X connect 42 0 41 0;
#X connect 43 0 42 0;
#X connect 44 0 15 1;
#X connect 45 0 44 0;
#X connect 46 0 37 1;
#X connect 47 0 48 0;
#X connect 48 0 49 0;
#X connect 49 0 41 0;
#X connect 50 0 49 1;
#X connect 51 0 20 0;
#X connect 52 0 19 0;
#X connect 52 0 1 0;
#X connect 53 0 46 0;
#N canvas 1195 204 917 901 10;
#X declare -path chair;
#X declare -path abstractions;
#X obj 36 30 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
;
#X floatatom 366 208 5 0 0 0 - - -;
#N canvas 75 683 664 369 rotaries 0;
#X obj 102 25 inlet;
#X floatatom 114 264 5 0 0 0 - - -;
#X obj 283 195 * 9000;
#X floatatom 294 237 5 0 0 0 - - -;
#X obj 285 168 s \$0-led1;
#X obj 467 169 s \$0-led2;
#X obj 110 169 s \$0-led0;
#X obj 103 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 283 1;
#X obj 102 49 route 0 1 2;
#X obj 130 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 2975 1;
#X obj 159 120 vsl 15 35 0.01 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 359 1;
#X obj 354 7 loadbang;
#X obj 283 73 chair.rotary-limit-range 24;
#X msg 325 38 1;
#X msg 361 37 20;
#X msg 396 40 10;
#X obj 102 73 chair.rotary-limit-range 24;
#X obj 283 216 + 0;
#X obj 103 232 * 1;
#X obj 283 304 s \$0-lp;
#X obj 467 301 s \$0-timbre;
#X obj 104 300 s \$0-fb;
#X floatatom 490 266 5 0 0 0 - - -;
#X obj 467 220 * 2;
#X obj 465 73 chair.rotary-limit-range 96;
#X connect 0 0 8 0;
#X connect 2 0 17 0;
#X connect 7 0 6 0;
#X connect 7 0 18 0;
#X connect 8 0 16 0;
#X connect 8 1 12 0;
#X connect 8 2 24 0;
#X connect 9 0 4 0;
#X connect 9 0 2 0;
#X connect 10 0 5 0;
#X connect 10 0 23 0;
#X connect 11 0 14 0;
#X connect 11 0 13 0;
#X connect 11 0 15 0;
#X connect 12 0 9 0;
#X connect 13 0 16 1;
#X connect 14 0 12 1;
#X connect 15 0 24 1;
#X connect 16 0 7 0;
#X connect 17 0 3 0;
#X connect 17 0 19 0;
#X connect 18 0 1 0;
#X connect 18 0 21 0;
#X connect 23 0 20 0;
#X connect 23 0 22 0;
#X connect 24 0 10 0;
#X coords 0 -1 1 1 85 60 1 100 100;
#X restore 130 195 pd rotaries;
#X obj 438 331 s \$0-midinote;
#X floatatom 455 237 5 0 0 0 - - -;
#X floatatom 454 307 5 0 0 0 - - -;
#X msg 55 55 info;
#X obj 38 633 hip~ 4;
#X obj 156 325 s \$0-xy;
#X obj 75 325 s \$0-touch;
#X obj 356 130 r \$0-xy;
#X obj 185 173 s \$0-updown;
#X obj 384 22 declare -path chair;
#N canvas 941 662 464 257 LED 0;
#X obj 69 185 outlet;
#X obj 35 33 r \$0-led0;
#X obj 144 33 r \$0-led1;
#X obj 243 36 r \$0-led2;
#X msg 35 68 led 0 \$1 0 \$1;
#X msg 144 71 led 1 0 \$1 \$1;
#X msg 243 74 led 2 \$1 \$1 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 6 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 0 0;
#X restore 67 87 pd LED;
#X obj 37 670 dac~;
#X obj 438 211 chair.hex-tuning;
#X obj 356 152 chair.hex-mapping;
#X obj 131 386 r \$0-touch;
#X obj 37 360 chair.gain~;
#X obj 356 287 s \$0-current;
#X obj 38 549 chair.gain~;
#X obj 567 236 r \$0-updown;
#X obj 438 256 chair.transpose-oct -2;
#X msg 551 173 g_major;
#X msg 607 173 b_minor;
#X obj 384 43 declare -path abstractions;
#X text 124 259 Rotaries:;
#X obj 75 145 route position rotary button;
#X obj 75 297 chair.capsense;
#N canvas 354 244 463 284 instance-iteration 0;
#X obj 42 165 outlet;
#X obj 134 55 r \$0-midinote;
#X obj 42 56 r \$0-current;
#X obj 42 108 pack f f;
#X connect 1 0 3 1;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X restore 162 477 pd instance-iteration;
#X obj 38 412 chair.touchgate~;
#X obj 39 477 chair.dc-offset~;
#X obj 36 118 tickle~;
#X obj 234 418 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X obj 356 184 t f f;
#N canvas 864 596 450 300 init 0;
#X obj 95 66 loadbang;
#X msg 96 93 1;
#X obj 96 116 s \$0-active;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X restore 385 66 pd init;
#X obj 39 443 chair.feedback-cancellation~ 50 1;
#X text 123 275 Feedback \, Cut-off \, Delay 2 Size;
#N canvas 0 50 450 300 (subpatch) 0;
#X array \$0-scope 1024 float 0;
#X coords 0 -1 1023 1 200 140 1 0 0;
#X restore 395 428 graph;
#X obj 401 655 tabwrite~ \$0-scope;
#X obj 401 631 metro 150;
#X obj 401 609 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X msg 483 173 chromatic;
#X obj 483 146 loadbang;
#X obj 390 376 mtof;
#X obj 356 244 % 4;
#X obj 38 514 clone 2D-waveguide-allpass 4 \$0;
#X connect 0 0 32 0;
#X connect 6 0 32 0;
#X connect 7 0 14 0;
#X connect 7 0 14 1;
#X connect 10 0 16 0;
#X connect 13 0 32 0;
#X connect 15 0 4 0;
#X connect 15 0 22 0;
#X connect 16 0 34 0;
#X connect 17 0 30 1;
#X connect 18 0 30 0;
#X connect 20 0 39 0;
#X connect 20 0 7 0;
#X connect 21 0 22 1;
#X connect 22 0 5 0;
#X connect 22 0 3 0;
#X connect 22 0 44 0;
#X connect 23 0 15 1;
#X connect 24 0 15 1;
#X connect 27 0 28 0;
#X connect 27 1 2 0;
#X connect 27 2 11 0;
#X connect 28 0 9 0;
#X connect 28 1 8 0;
#X connect 29 0 46 1;
#X connect 30 0 36 0;
#X connect 31 0 46 0;
#X connect 32 0 18 0;
#X connect 32 1 27 0;
#X connect 33 0 36 2;
#X connect 34 0 1 0;
#X connect 34 0 45 0;
#X connect 34 1 15 0;
#X connect 36 0 31 0;
#X connect 40 0 39 0;
#X connect 41 0 40 0;
#X connect 42 0 15 1;
#X connect 43 0 42 0;
#X connect 44 0 36 1;
#X connect 45 0 19 0;
#X connect 46 0 20 0;
#N canvas 683 213 916 901 10;
#X declare -path chair;
#X declare -path abstractions;
#X obj 39 29 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1
;
#N canvas 75 683 664 369 rotaries 0;
#X obj 103 25 inlet;
#X obj 283 195 * 9000;
#X obj 285 168 s \$0-led1;
#X obj 467 169 s \$0-led2;
#X obj 110 169 s \$0-led0;
#X obj 103 119 vsl 15 35 0.1 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 1669 1;
#X obj 103 49 route 0 1 2;
#X obj 130 119 vsl 15 35 0 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 2550 1;
#X obj 159 120 vsl 15 35 0.01 1 0 0 empty empty empty 0 -9 0 10 -262144
-1 -1 1397 1;
#X obj 354 7 loadbang;
#X obj 283 73 chair.rotary-limit-range 24;
#X obj 465 73 chair.rotary-limit-range 24;
#X msg 396 40 10;
#X obj 283 304 s \$0-lp;
#X obj 467 301 s \$0-timbre;
#X obj 103 304 s \$0-fb;
#X obj 467 220 * 2;
#X obj 103 73 chair.rotary-limit-range 48;
#X obj 103 276 expr tanh($f1);
#X obj 103 197 * 4;
#X msg 325 38 24;
#X msg 361 37 16;
#X connect 0 0 6 0;
#X connect 1 0 13 0;
#X connect 5 0 4 0;
#X connect 5 0 19 0;
#X connect 6 0 17 0;
#X connect 6 1 10 0;
#X connect 6 2 11 0;
#X connect 7 0 2 0;
#X connect 7 0 1 0;
#X connect 8 0 3 0;
#X connect 8 0 16 0;
#X connect 9 0 21 0;
#X connect 9 0 20 0;
#X connect 9 0 12 0;
#X connect 10 0 7 0;
#X connect 11 0 8 0;
#X connect 12 0 11 1;
#X connect 16 0 14 0;
#X connect 17 0 5 0;
#X connect 18 0 15 0;
#X connect 19 0 18 0;
#X connect 20 0 17 1;
#X connect 21 0 10 1;
#X coords 0 -1 1 1 85 60 1 100 100;
#X restore 128 195 pd rotaries;
#X obj 438 336 s \$0-midinote;
#X floatatom 455 237 5 0 0 0 - - -;
#X floatatom 454 307 5 0 0 0 - - -;
#X msg 55 55 info;
#X obj 39 680 hip~ 4;
#X obj 156 325 s \$0-xy;
#X obj 75 325 s \$0-touch;
#X obj 356 130 r \$0-xy;
#X obj 181 173 s \$0-updown;
#X obj 486 22 declare -path chair;
#N canvas 941 662 464 257 LED 0;
#X obj 69 185 outlet;
#X obj 35 33 r \$0-led0;
#X obj 144 33 r \$0-led1;
#X obj 243 36 r \$0-led2;
#X msg 35 68 led 0 \$1 0 \$1;
#X msg 144 71 led 1 0 \$1 \$1;
#X msg 243 74 led 2 \$1 \$1 0;
#X connect 1 0 4 0;
#X connect 2 0 5 0;
#X connect 3 0 6 0;
#X connect 4 0 0 0;
#X connect 5 0 0 0;
#X connect 6 0 0 0;
#X restore 67 87 pd LED;
#X obj 38 717 dac~;
#X obj 438 211 chair.hex-tuning;
#X obj 356 152 chair.hex-mapping;
#X obj 132 386 r \$0-touch;
#X obj 38 360 chair.gain~;
#X obj 356 260 s \$0-current;
#X obj 40 624 chair.gain~;
#X obj 567 236 r \$0-updown;
#X obj 438 256 chair.transpose-oct -2;
#X msg 551 173 g_major;
#X msg 607 173 b_minor;
#X obj 486 43 declare -path abstractions;
#X text 124 259 Rotaries:;
#X obj 75 297 chair.capsense;
#N canvas 354 244 463 284 instance-iteration 0;
#X obj 42 165 outlet;
#X obj 134 55 r \$0-midinote;
#X obj 42 56 r \$0-current;
#X obj 42 108 pack f f;
#X connect 1 0 3 1;
#X connect 2 0 3 0;
#X connect 3 0 0 0;
#X restore 211 564 pd instance-iteration;
#X obj 39 412 chair.touchgate~;
#X obj 40 523 chair.dc-offset~;
#X obj 235 467 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X obj 356 184 t f f;
#N canvas 864 596 450 300 init 0;
#X obj 95 66 loadbang;
#X msg 96 93 1;
#X obj 96 116 s \$0-active;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X restore 487 66 pd init;
#X obj 40 489 chair.feedback-cancellation~ 50 1;
#X text 123 275 Feedback \, Cut-off \, Delay 2 Size;
#N canvas 0 50 450 300 (subpatch) 0;
#X array \$0-scope 1024 float 0;
#X coords 0 -1 1023 1 200 140 1 0 0;
#X restore 356 432 graph;
#X obj 355 685 tabwrite~ \$0-scope;
#X obj 355 633 metro 150;
#X obj 355 611 tgl 15 0 empty \$0-active empty 17 7 0 10 -262144 -1
-1 1 1;
#X msg 483 173 chromatic;
#X obj 483 146 loadbang;
#X obj 137 463 mtof;
#X obj 420 612 r \$0-touch;
#X obj 420 635 sel 1;
#X floatatom 459 637 5 0 0 0 - - -;
#X text 200 35 ----- under construction -----;
#X obj 75 145 route position rotary button latency;
#X floatatom 258 174 5 0 0 0 - - -;
#X obj 40 589 clone karplus-dispersion 4 \$0;
#X obj 39 119 tickle~;
#X msg 135 94 latency \$1;
#X floatatom 135 70 5 96 2304 0 - - -;
#X obj 137 439 r \$0-midinote;
#X obj 420 661 del 0;
#X obj 356 219 % 4;
#X connect 0 0 49 0;
#X connect 5 0 49 0;
#X connect 6 0 13 0;
#X connect 6 0 13 1;
#X connect 9 0 15 0;
#X connect 12 0 49 0;
#X connect 14 0 3 0;
#X connect 14 0 21 0;
#X connect 15 0 31 0;
#X connect 16 0 28 1;
#X connect 17 0 28 0;
#X connect 19 0 36 0;
#X connect 19 0 6 0;
#X connect 20 0 21 1;
#X connect 21 0 4 0;
#X connect 21 0 2 0;
#X connect 22 0 14 1;
#X connect 23 0 14 1;
#X connect 26 0 8 0;
#X connect 26 1 7 0;
#X connect 27 0 48 1;
#X connect 28 0 33 0;
#X connect 29 0 48 0;
#X connect 30 0 33 2;
#X connect 31 0 54 0;
#X connect 31 1 14 0;
#X connect 33 0 29 0;
#X connect 37 0 36 0;
#X connect 38 0 37 0;
#X connect 39 0 14 1;