#N canvas 183 194 673 280 10; #X obj 11 85 *~; #N canvas 408 92 524 467 wiimote_stuff 0; #X msg 35 257 disconnect; #X obj 296 244 tgl 25 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 138 331 wiimote; #X msg 296 274 setRumble \$1; #X obj 232 121 tgl 25 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 138 121 tgl 25 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 232 151 reportAcceleration \$1; #X msg 138 151 reportIR \$1; #N canvas 305 47 700 512 \$0-accelerometer-stuff 0; #X obj 218 12 inlet; #X obj 366 221 unpack 0 0 0; #X obj 92 612 expr sqrt(pow($f1 \, 2) + pow($f2 \, 2) + pow($f3 \, 2)); #X obj 357 280 atan; #X obj 357 259 expr $f1 / $f2; #X obj 389 304 expr if ($f1 > 0 \, 3.14159 \, -3.14159); #X obj 357 331 pack 0 0 0; #X obj 357 353 expr if ($f3 <= 0 \, $f1 + $f2 \, $f1); #X obj 357 375 * -1; #X obj 432 38 unpack 0 0 0; #X obj 42 443 s \$0-wii-pitch-set; #X obj 357 445 s \$0-wii-roll-set; #X text 75 514 The pitch and roll are only accurate if there are no extra accelerations due to hand movement. We can check if the total acceleration is close to gravity and only use pitch and roll in that case. The total acceleration is given by:; #X text 444 16 raw accerlation:; #X obj 31 221 unpack 0 0 0; #X obj 42 280 atan; #X obj 42 259 expr $f1 / $f2; #X obj 74 304 expr if ($f1 > 0 \, 3.14159 \, -3.14159); #X obj 42 331 pack 0 0 0; #X obj 42 353 expr if ($f3 <= 0 \, $f1 + $f2 \, $f1); #X obj 42 375 * -1; #X obj 225 578 unpack 0 0 0; #X obj 476 126 -; #X obj 475 151 abs; #X obj 463 97 t f f; #X obj 482 174 nbx 5 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 -1 -1 0 256; #X obj 497 224 s wiimote_accel; #X obj 433 67 expr abs($f1)+abs($f2)+abs($f3); #X connect 0 0 9 0; #X connect 0 0 14 0; #X connect 0 0 1 0; #X connect 1 0 4 0; #X connect 1 0 5 0; #X connect 1 2 4 1; #X connect 1 2 6 2; #X connect 3 0 6 0; #X connect 4 0 3 0; #X connect 5 0 6 1; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 8 0 11 0; #X connect 9 0 27 0; #X connect 9 1 27 1; #X connect 9 2 27 2; #X connect 14 1 16 0; #X connect 14 1 17 0; #X connect 14 2 16 1; #X connect 14 2 18 2; #X connect 15 0 18 0; #X connect 16 0 15 0; #X connect 17 0 18 1; #X connect 18 0 19 0; #X connect 19 0 20 0; #X connect 20 0 10 0; #X connect 21 0 2 0; #X connect 21 1 2 1; #X connect 21 2 2 2; #X connect 22 0 23 0; #X connect 23 0 25 0; #X connect 24 0 22 1; #X connect 24 1 22 0; #X connect 25 0 26 0; #X connect 27 0 24 0; #X restore 146 410 pd \$0-accelerometer-stuff; #X obj 391 121 tgl 25 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 131 73 By default \, the wiimote does not report acceleration data \, IR data \, or any data from an attached extension (eg \, nunchuck). You must specifically enable each reporting mode:; #X msg 391 151 reportNunchuck \$1; #N canvas 40 201 920 244 \$0-nunchuck-stuff 0; #X obj 559 61 inlet; #X obj 559 96 unpack 0 0; #X obj 49 71 inlet; #X text 42 32 inlet #1: BUTTONS; #X text 294 35 inlet #2: ACCELERATION; #X obj 304 72 inlet; #X obj 304 105 unpack 0 0 0; #X obj 383 125 s \$0-nc-accZ-set; #X obj 343 144 s \$0-nc-accY-set; #X obj 304 163 s \$0-nc-accX-set; #X text 567 32 inlet #3: STICK; #X obj 49 117 s nunchuk-btn-set; #X floatatom 559 141 5 0 0 0 - - -; #X floatatom 616 142 5 0 0 0 - - -; #X obj 558 168 split 140 240; #X obj 644 168 split 140 240; #X text 567 123 l r; #X text 627 123 u d; #X obj 558 221 s nunlr; #X msg 611 195 140; #X msg 697 196 140; #X obj 644 222 s nunud; #X obj 449 197 s nunlrc; #X obj 507 197 s nunudc; #X connect 0 0 1 0; #X connect 1 0 12 0; #X connect 1 1 13 0; #X connect 2 0 11 0; #X connect 5 0 6 0; #X connect 6 0 9 0; #X connect 6 1 8 0; #X connect 6 2 7 0; #X connect 12 0 14 0; #X connect 12 0 22 0; #X connect 13 0 15 0; #X connect 13 0 23 0; #X connect 14 0 18 0; #X connect 14 1 19 0; #X connect 15 0 21 0; #X connect 15 1 20 0; #X connect 19 0 18 0; #X connect 20 0 21 0; #X restore 164 365 pd \$0-nunchuck-stuff; #N canvas 5 47 330 216 \$0-button-stuff 0; #X obj 41 33 inlet; #X obj 41 86 unpack 0 0; #X obj 41 140 s wii-btn01-set; #X obj 106 120 s wii-btn02-set; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 1 1 3 0; #X restore 138 432 pd \$0-button-stuff; #X obj 31 138 tgl 25 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X text 53 186 Enable metro to get accelerometer uppdates; #X text 53 197 (xyz wiimote \, xyz nunchuk \, ir); #X obj 24 7 inlet; #X obj 295 18 inlet; #X obj 350 18 inlet; #X obj 24 35 l2ork_wiimote_connect; #X obj 32 168 metro 20; #X obj 149 389 speedlim 50; #X obj 332 217 r rumble; #X connect 0 0 2 0; #X connect 1 0 3 0; #X connect 2 0 13 0; #X connect 2 1 8 0; #X connect 2 3 12 0; #X connect 2 4 12 1; #X connect 2 5 12 2; #X connect 3 0 2 0; #X connect 4 0 6 0; #X connect 5 0 7 0; #X connect 6 0 2 0; #X connect 7 0 2 0; #X connect 9 0 11 0; #X connect 11 0 2 0; #X connect 14 0 21 0; #X connect 17 0 20 0; #X connect 18 0 9 0; #X connect 18 0 4 0; #X connect 19 0 14 0; #X connect 20 0 2 0; #X connect 21 0 2 0; #X connect 22 0 8 0; #X connect 23 0 1 0; #X restore 291 62 pd wiimote_stuff; #X obj 134 83 l2ork_monitor; #X obj 337 43 tgl 15 0 empty empty 2 17 7 0 10 -4034 -1 -1 0 1; #X obj 384 43 tgl 15 0 empty empty 3 17 7 0 10 -4034 -1 -1 1 1; #X obj 291 43 bng 15 250 50 0 empty empty 1 17 7 0 10 -4034 -1 -1; #X obj 134 41 speedlim 100; #X obj 11 157 l2ork_output~; #N canvas 226 146 392 353 sound 0; #N canvas 294 185 458 307 audio-loop 0; #X obj 23 147 /; #X obj 23 219 +~ 1; #X obj 23 96 t b f; #X obj 24 269 outlet~; #N canvas 0 0 450 300 (subpatch) 0; #X array \$0-array 674138 float 0; #X coords 0 1 674137 -1 200 150 1; #X restore 234 93 graph; #X obj 53 68 r \$0-totsamps; #X obj 76 171 r \$0-totsamps; #X obj 23 195 *~; #X obj 23 171 phasor~; #X obj 23 243 tabread4~ \$0-array; #X obj 23 68 * 1; #X floatatom 23 41 5 0 0 0 - - -; #X obj 23 -9 loadbang; #X msg 23 16 1; #X obj 238 21 samplerate~; #X obj 238 -1 loadbang; #X floatatom 23 122 8 0 0 0 - - -; #X obj 314 45 wavinfo; #X obj 314 -1 r filename; #N canvas 423 97 301 402 startup 0; #X obj 162 209 r readfile; #X obj 66 358 soundfiler; #X obj 72 24 loadbang; #X obj 72 50 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 72 71 f \$0; #X msg 66 335 read -resize drumLoop.aiff \$1; #X msg 72 100 \; readfile symbol \$1-array \;; #X obj 100 233 pack s s; #X obj 100 209 openpanel; #X msg 100 311 read -resize \$1 \$2; #X obj 100 188 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 32 233 s filename; #X obj 100 164 inlet; #X connect 0 0 5 0; #X connect 0 0 7 1; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 1 0; #X connect 7 0 9 0; #X connect 8 0 7 0; #X connect 8 0 11 0; #X connect 9 0 1 0; #X connect 10 0 8 0; #X connect 12 0 10 0; #X restore 366 45 pd startup; #X obj 366 23 inlet; #X connect 0 0 8 0; #X connect 1 0 9 0; #X connect 2 0 16 0; #X connect 2 1 0 1; #X connect 5 0 10 1; #X connect 6 0 7 1; #X connect 7 0 1 0; #X connect 8 0 7 0; #X connect 9 0 3 0; #X connect 10 0 2 0; #X connect 11 0 10 0; #X connect 12 0 13 0; #X connect 13 0 11 0; #X connect 14 0 16 0; #X connect 15 0 14 0; #X connect 16 0 0 0; #X connect 17 0 7 1; #X connect 17 0 10 1; #X connect 17 0 13 0; #X connect 18 0 17 0; #X connect 20 0 19 0; #X restore 35 27 pd audio-loop; #X obj 34 331 outlet~; #X floatatom 237 30 5 0 0 0 - - -; #X obj 243 135 +; #X obj 243 163 nbx 5 14 -144 144 0 0 empty empty empty 0 -8 0 10 -262144 -1 -1 0 256; #X obj 297 100 loadbang; #X obj 34 309 rj/e_pitchshift; #X msg 121 288 pitch \$1; #X floatatom 121 87 5 0 0 0 - - -; #X obj 121 64 r nunudc; #X obj 121 157 nbx 5 14 -12 12 0 0 empty empty empty 0 -8 0 10 -262144 -1 -1 0.129032 256; #X obj 121 133 * 12; #X obj 121 177 + 0; #X msg 297 122 0; #X obj 121 109 expr ($f1-130)/93; #X msg 232 109 -12; #X msg 264 109 12; #X obj 237 8 r nunchuk-btn-set; #X obj 237 73 sel 2 1; #X obj 59 177 s monitor; #X obj 237 51 change; #X obj 166 264 int; #X obj 121 199 r ptch_rnd; #X obj 121 220 gate 2 1; #X obj 35 5 inlet; #X connect 0 0 6 0; #X connect 2 0 20 0; #X connect 3 0 4 0; #X connect 4 0 3 1; #X connect 4 0 12 1; #X connect 5 0 13 0; #X connect 6 0 1 0; #X connect 7 0 6 1; #X connect 8 0 14 0; #X connect 9 0 8 0; #X connect 10 0 12 0; #X connect 10 0 19 0; #X connect 11 0 10 0; #X connect 12 0 23 1; #X connect 13 0 4 0; #X connect 14 0 11 0; #X connect 15 0 3 0; #X connect 16 0 3 0; #X connect 17 0 2 0; #X connect 18 0 16 0; #X connect 18 1 15 0; #X connect 20 0 18 0; #X connect 21 0 7 0; #X connect 22 0 23 0; #X connect 23 0 7 0; #X connect 23 1 21 0; #X connect 24 0 0 0; #X restore 10 38 pd sound; #X obj 10 1 bng 30 250 50 0 empty empty 5_load_new_file 35 7 0 10 -4034 -1 -1; #X obj 11 135 *~ 5; #X obj 291 1 key; #X obj 291 22 sel 49 50 51; #N canvas 269 183 642 376 delays 0; #X text 437 209 <-- delay time; #X text 313 258 add the original and the delayed signal; #X obj 141 271 +~; #X text 357 235 feedback gain; #X text 313 258 add the original and the delayed signal; #X obj 282 262 +~; #X text 357 235 feedback gain; #X obj 167 294 delwrite~ l-del 2000; #X obj 318 284 delwrite~ r-del 2000; #X obj 299 235 *~ 0.6; #X obj 300 213 delread~ r-del 250; #X obj 155 249 *~ 0.7; #X obj 155 226 delread~ l-del 400; #X obj 272 143 pack 0 100; #X obj 146 163 pack 0 100; #X obj 146 184 line~; #X obj 260 191 *~; #X obj 271 167 line~; #X obj 112 217 *~; #X obj 182 49 inlet~; #X obj 202 352 outlet~; #X floatatom 270 28 7 0 0 1 _Y #0-nc-accY-set -; #X obj 270 48 expr $f1/1.5708; #X obj 270 70 nbx 8 14 0 1 0 0 empty empty empty 0 -8 0 10 -262144 -1 -1 0.229183 256; #X connect 2 0 7 0; #X connect 2 0 20 0; #X connect 5 0 8 0; #X connect 5 0 20 0; #X connect 9 0 5 1; #X connect 10 0 9 0; #X connect 11 0 2 1; #X connect 12 0 11 0; #X connect 13 0 17 0; #X connect 14 0 15 0; #X connect 15 0 18 1; #X connect 16 0 5 0; #X connect 17 0 16 1; #X connect 18 0 2 0; #X connect 19 0 18 0; #X connect 19 0 16 0; #X connect 21 0 22 0; #X connect 22 0 23 0; #X connect 23 0 13 0; #X connect 23 0 14 0; #X restore 20 108 pd delays; #X text 116 240 4 (toggle db to 30); #X obj 134 20 r monitor; #N canvas 45 223 403 249 modulators 0; #X obj 46 100 * 1; #X obj 46 41 nbx 5 14 0 1e+37 0 0 empty empty empty 0 -8 0 10 -262144 -1 -1 0 256; #X obj 46 18 r wiimote_accel; #X obj 77 189 line~; #X floatatom 158 56 5 0 0 0 - - -; #X obj 158 35 r wii-btn02-set; #X obj 77 168 pack 0 50; #X obj 46 82 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 -262144 -1 -1 0 256; #X msg 95 142 0; #X obj 158 76 sel 8 0 4 12; #X msg 222 156 30; #X obj 46 61 pow 2; #X obj 46 121 split 0.03 1; #X msg 163 176 0.03; #X msg 163 156 1000; #X msg 222 196 0.5; #X msg 222 176 0.2; #X obj 278 178 s ptch_rnd; #X msg 309 156 2; #X msg 278 156 1; #X obj 77 210 outlet~; #X msg 163 196 4; #X connect 0 0 12 0; #X connect 1 0 11 0; #X connect 2 0 1 0; #X connect 3 0 20 0; #X connect 4 0 9 0; #X connect 5 0 4 0; #X connect 6 0 3 0; #X connect 7 0 0 0; #X connect 8 0 6 0; #X connect 9 0 14 0; #X connect 9 0 13 0; #X connect 9 0 21 0; #X connect 9 0 19 0; #X connect 9 1 10 0; #X connect 9 1 16 0; #X connect 9 1 15 0; #X connect 9 1 19 0; #X connect 9 2 18 0; #X connect 9 2 10 0; #X connect 9 2 16 0; #X connect 9 2 15 0; #X connect 9 3 18 0; #X connect 9 3 14 0; #X connect 9 3 13 0; #X connect 9 3 21 0; #X connect 10 0 6 1; #X connect 11 0 7 0; #X connect 12 0 6 0; #X connect 12 1 8 0; #X connect 13 0 12 1; #X connect 14 0 6 1; #X connect 15 0 0 1; #X connect 16 0 12 1; #X connect 18 0 17 0; #X connect 19 0 17 0; #X connect 21 0 0 1; #X restore 27 61 pd modulators; #X obj 134 62 expr ($f1+12)*4.167; #X connect 0 0 10 0; #X connect 0 0 13 0; #X connect 3 0 1 1; #X connect 4 0 1 2; #X connect 5 0 1 0; #X connect 6 0 17 0; #X connect 8 0 0 0; #X connect 9 0 8 0; #X connect 10 0 7 0; #X connect 11 0 12 0; #X connect 12 0 5 0; #X connect 12 1 3 0; #X connect 12 2 4 0; #X connect 13 0 10 0; #X connect 15 0 6 0; #X connect 16 0 0 1; #X connect 17 0 2 0;