#N canvas 249 22 633 598 10; #X declare -lib mapping; #X obj 482 32 import mapping; #X obj 100 100 tgl 25 0 empty empty start 1 12 1 9 -225271 -1 -1 0 1; #X obj 184 486 osc~; #X obj 97 517 *~; #X obj 127 561 dac~; #X obj 17 486 line~; #X msg 17 464 \$1 5; #X text 22 32 This patch uses the angle of the joystick to control pitch and the distance from the centerpoint to control amplitude. The joystick Z/twist is mapped to pan.; #X obj 97 538 pan/equal_power_pan~; #X text 11 9 spiral_joystick; #X obj 29 103 pddp/dsp; #X obj 123 161 hidio; #X obj 192 297 route x y rz z; #X text 289 297 some joysticks call twist 'z' \, others 'rz'; #X obj 23 214 route absolute; #X obj 23 297 route x y rz z; #X obj 192 213 route absolute; #X obj 192 192 route range; #X obj 63 342 /; #X obj 192 233 unpack symbol float float; #X obj 192 254 pack symbol float; #X obj 192 275 list trim; #X obj 23 233 unpack symbol float float; #X obj 23 254 pack symbol float; #X obj 23 275 list trim; #X obj 93 342 /; #X obj 133 342 /; #X obj 173 342 /; #X text 313 253 we don't need the instance number \, so ignore it; #X text 209 343 scale things to max 1 using the values querying using [info(; #X obj 217 520 hsl 128 15 0 1 0 1 empty empty empty -2 -8 0 10 -262144 -1 -1 6350 0; #X msg 143 101 open joystick; #X text 153 79 1; #X text 102 79 2; #X text 34 79 3; #X text 247 88 <-- click these in the order specified; #X obj 184 465 mtof; #X obj 184 443 notescale 60 72; #X obj 17 443 exponential_sigmoid 0.3; #X obj 93 363 reverse; #X obj 63 410 spiral; #X text 153 386 <-- reset position in spiral to middle C octave; #X text 219 462 set middle C as start note \, with one octave per revolution ; #X msg 124 386 bang; #N canvas 0 22 450 300 get 0; #X obj 60 9 inlet; #X obj 60 261 outlet; #X msg 60 197 info; #X text 103 199 the [info( message outputs the range info; #X obj 60 99 route open; #X obj 60 173 purepd/once; #X obj 60 121 select 1 0; #X connect 0 0 4 0; #X connect 2 0 1 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 6 0 5 0; #X connect 6 1 5 1; #X restore 176 136 pd get range info; #X connect 1 0 11 0; #X connect 2 0 3 1; #X connect 3 0 8 0; #X connect 5 0 3 0; #X connect 6 0 5 0; #X connect 8 0 4 0; #X connect 8 1 4 1; #X connect 11 0 14 0; #X connect 11 1 17 0; #X connect 11 1 44 0; #X connect 12 0 18 1; #X connect 12 1 25 1; #X connect 12 2 26 1; #X connect 12 3 27 0; #X connect 14 0 22 0; #X connect 15 0 18 0; #X connect 15 1 25 0; #X connect 15 2 26 0; #X connect 15 3 27 0; #X connect 16 0 19 0; #X connect 17 0 16 0; #X connect 18 0 40 0; #X connect 19 0 20 0; #X connect 19 2 20 1; #X connect 20 0 21 0; #X connect 21 0 12 0; #X connect 22 0 23 0; #X connect 22 2 23 1; #X connect 23 0 24 0; #X connect 24 0 15 0; #X connect 25 0 39 0; #X connect 30 0 8 1; #X connect 31 0 11 0; #X connect 36 0 2 0; #X connect 37 0 36 0; #X connect 38 0 6 0; #X connect 39 0 40 1; #X connect 40 0 38 0; #X connect 40 1 37 0; #X connect 43 0 40 2; #X connect 44 0 11 0;