chris@531: #N canvas 646 209 853 1174 10; chris@531: #X text 29 17 SAMPLE-ACCURATE ENVELOPE TRIGGER; chris@531: #X text 29 27 ================================; chris@531: #X obj 33 543 /~ 44100; chris@531: #X obj 78 523 samplerate~; chris@531: #X obj 78 503 loadbang; chris@531: #X obj 33 619 rpole~; chris@531: #X obj 33 477 sig~ 1; chris@531: #X obj 438 571 sig~ 0.5; chris@531: #X obj 33 937 *~; chris@531: #X obj 399 550 *~ -1; chris@531: #X obj 33 801 *~ 512; chris@531: #X obj 33 639 clip~ 0 1; chris@531: #X obj 33 822 tabread4~ env1; chris@531: #X obj 33 780 *~; chris@531: #X obj 399 424 abs~; chris@531: #X obj 48 736 sig~ 1; chris@531: #X obj 48 759 /~; chris@531: #X obj 48 915 osc~ 220; chris@531: #X obj 48 895 +~ 50; chris@531: #X obj 48 855 *~; chris@531: #X obj 112 736 clip~ 1e-05 100000; robert@464: #N canvas 0 22 450 278 (subpatch) 0; robert@464: #X array env1 512 float 3; robert@464: #A 0 0 0.0625 0.0883883 0.108253 0.125 0.139754 0.153093 0.165359 0.176777 robert@464: 0.1875 0.197642 0.207289 0.216506 0.225347 0.233854 0.242061 0.25 0.257694 robert@464: 0.265165 0.272431 0.279509 0.286411 0.293151 0.299739 0.306186 0.3125 robert@464: 0.318689 0.32476 0.330719 0.336573 0.342327 0.347985 0.353553 0.359035 robert@464: 0.364434 0.369755 0.375 0.380173 0.385276 0.390312 0.395285 0.400195 robert@464: 0.405046 0.40984 0.414578 0.419263 0.423896 0.428478 0.433013 0.4375 robert@464: 0.441942 0.446339 0.450694 0.455007 0.459279 0.463512 0.467707 0.471865 robert@464: 0.475986 0.480072 0.484123 0.488141 0.492125 0.496078 0.5 0.503891 robert@464: 0.507752 0.511585 0.515388 0.519164 0.522913 0.526634 0.53033 0.534 robert@464: 0.537645 0.541266 0.544862 0.548435 0.551985 0.555512 0.559017 0.5625 robert@464: 0.565962 0.569402 0.572822 0.576222 0.579601 0.582961 0.586302 0.589624 robert@464: 0.592927 0.596212 0.599479 0.602728 0.60596 0.609175 0.612372 0.615554 robert@464: 0.618718 0.621867 0.625 0.628117 0.631219 0.634306 0.637377 0.640434 robert@464: 0.643477 0.646505 0.649519 0.652519 0.655506 0.658478 0.661438 0.664384 robert@464: 0.667317 0.670238 0.673146 0.676041 0.678924 0.681795 0.684653 0.6875 robert@464: 0.690335 0.693159 0.695971 0.698771 0.701561 0.704339 0.707107 0.709864 robert@464: 0.71261 0.715345 0.71807 0.720785 0.72349 0.726184 0.728869 0.731544 robert@464: 0.734209 0.736864 0.73951 0.742146 0.744773 0.747391 0.75 0.7526 0.75519 robert@464: 0.757772 0.760345 0.76291 0.765466 0.768013 0.770552 0.773082 0.775605 robert@464: 0.778119 0.780625 0.783123 0.785613 0.788095 0.790569 0.793036 0.795495 robert@464: 0.797947 0.800391 0.802827 0.805256 0.807678 0.810093 0.8125 0.8149 robert@464: 0.817294 0.81968 0.822059 0.824432 0.826797 0.829156 0.831508 0.833854 robert@464: 0.836193 0.838525 0.840851 0.843171 0.845484 0.847791 0.850092 0.852386 robert@464: 0.854675 0.856957 0.859233 0.861503 0.863767 0.866025 0.868278 0.870524 robert@464: 0.872765 0.875 0.877229 0.879453 0.881671 0.883883 0.88609 0.888292 robert@464: 0.890488 0.892679 0.894864 0.897044 0.899218 0.901388 0.903552 0.905711 robert@464: 0.907865 0.910014 0.912157 0.914296 0.91643 0.918559 0.920682 0.922801 robert@464: 0.924916 0.927025 0.929129 0.931229 0.933324 0.935414 0.9375 0.939581 robert@464: 0.941657 0.943729 0.945797 0.947859 0.949918 0.951972 0.954021 0.956066 robert@464: 0.958107 0.960143 0.962175 0.964203 0.966227 0.968246 0.970261 0.972272 robert@464: 0.974279 0.976281 0.97828 0.980274 0.982265 0.984251 0.986233 0.988212 robert@464: 0.990186 0.992157 0.994123 0.996086 0.998045 1 0.992172 0.984375 0.976609 robert@464: 0.968874 0.961169 0.953495 0.945852 0.938239 0.930657 0.923106 0.915586 robert@464: 0.908097 0.900638 0.89321 0.885813 0.878447 0.871111 0.863806 0.856532 robert@464: 0.849289 0.842076 0.834894 0.827743 0.820623 0.813533 0.806474 0.799446 robert@464: 0.792449 0.785483 0.778547 0.771642 0.764767 0.757924 0.751111 0.744329 robert@464: 0.737578 0.730857 0.724168 0.717509 0.71088 0.704283 0.697716 0.69118 robert@464: 0.684675 0.678201 0.671757 0.665344 0.658962 0.652611 0.64629 0.64 robert@464: 0.633741 0.627513 0.621315 0.615148 0.609012 0.602907 0.596832 0.590788 robert@464: 0.584775 0.578793 0.572841 0.56692 0.56103 0.555171 0.549343 0.543545 robert@464: 0.537778 0.532041 0.526336 0.520661 0.515017 0.509404 0.503822 0.49827 robert@464: 0.492749 0.487259 0.481799 0.476371 0.470973 0.465605 0.460269 0.454963 robert@464: 0.449689 0.444444 0.439231 0.434048 0.428897 0.423775 0.418685 0.413625 robert@464: 0.408597 0.403599 0.398631 0.393695 0.388789 0.383914 0.37907 0.374256 robert@464: 0.369473 0.364721 0.36 0.355309 0.35065 0.346021 0.341423 0.336855 robert@464: 0.332318 0.327812 0.323337 0.318893 0.314479 0.310096 0.305744 0.301423 robert@464: 0.297132 0.292872 0.288643 0.284444 0.280277 0.27614 0.272034 0.267958 robert@464: 0.263914 0.2599 0.255917 0.251965 0.248043 0.244152 0.240292 0.236463 robert@464: 0.232664 0.228897 0.22516 0.221453 0.217778 0.214133 0.210519 0.206936 robert@464: 0.203383 0.199862 0.196371 0.19291 0.189481 0.186082 0.182714 0.179377 robert@464: 0.176071 0.172795 0.16955 0.166336 0.163153 0.16 0.156878 0.153787 robert@464: 0.150727 0.147697 0.144698 0.14173 0.138793 0.135886 0.13301 0.130165 robert@464: 0.127351 0.124567 0.121815 0.119093 0.116401 0.113741 0.111111 0.108512 robert@464: 0.105944 0.103406 0.1009 0.0984237 0.0959785 0.093564 0.0911803 0.0888274 robert@464: 0.0865052 0.0842138 0.0819531 0.0797232 0.077524 0.0753556 0.073218 robert@464: 0.0711111 0.069035 0.0669896 0.064975 0.0629911 0.0610381 0.0591157 robert@464: 0.0572241 0.0553633 0.0535332 0.0517339 0.0499654 0.0482276 0.0465206 robert@464: 0.0448443 0.0431988 0.041584 0.04 0.0384467 0.0369243 0.0354325 0.0339715 robert@464: 0.0325413 0.0311419 0.0297732 0.0284352 0.027128 0.0258516 0.0246059 robert@464: 0.023391 0.0222068 0.0210534 0.0199308 0.0188389 0.0177778 0.0167474 robert@464: 0.0157478 0.0147789 0.0138408 0.0129335 0.0120569 0.0112111 0.010396 robert@464: 0.00961169 0.00885813 0.00813533 0.00744329 0.00678201 0.00615148 0.00555171 robert@464: 0.0049827 0.00444444 0.00393695 0.00346021 0.00301423 0.002599 0.00221453 robert@464: 0.00186082 0.00153787 0.00124567 0.000984237 0.000753556 0.000553633 robert@464: 0.000384467 0.000246059 0.000138408 6.15148e-05 1.53787e-05 0; robert@464: #X coords 0 1 512 0 512 64 1 0 0; chris@531: #X restore 34 1026 graph; chris@531: #X text 475 477 if greater than threshold output 1; chris@531: #X text 513 521 differentiator; chris@531: #X text 512 539 (generates impulse on positive trigger (0->1); chris@531: #X text 107 620 signal-rate counter; chris@531: #X text 497 618 rpole~ coeff to 0; chris@531: #X text 410 1004 pre-generated envelope; chris@531: #X obj 112 692 *~; chris@531: #X obj 399 476 hv_gte~; chris@531: #X obj 399 592 hv_lte~; chris@531: #X text 116 891 kickdrum 101 :); chris@531: #X obj 399 392 receive~ excitationSignal; chris@531: #X obj 438 456 receive~ threshold; chris@531: #X obj 112 672 receive~ envDuration; chris@531: #X obj 38 311 send~ excitationSignal; chris@531: #X obj 198 311 send~ threshold; chris@531: #X obj 318 311 send~ envDuration; chris@531: #X obj 33 967 dac~; chris@531: #X text 29 57 Sample-accurate signal processing can often be hard to chris@531: ; chris@531: #X text 29 71 do in puredata \, which generally works on a per-block chris@531: ; chris@531: #X text 29 85 basis. In this example we use a combination of; chris@531: #X text 95 102 and; chris@531: #X obj 125 102 rpole~; chris@531: #X obj 48 875 *~ 1000; chris@531: #X obj 112 714 *~ 0.25; chris@531: #X obj 444 507 sig~ 1; chris@531: #X obj 399 528 rzero~ 1; chris@531: #X text 187 102 objects to perform; chris@531: #X text 29 120 sample-accurate envelope triggering based on the; chris@531: #X text 29 134 signal fed into the first audio channel.; chris@531: #X obj 38 210 adc~ 1; chris@531: #X obj 198 240 adc~ 3; chris@531: #X obj 318 280 adc~ 4; chris@531: #X text 252 240 use a potentiometer on first analog in to set; chris@531: #X text 252 253 triggering threshold...; chris@531: #X text 382 280 ...second analog in sets envelope duration; chris@531: #X obj 32 102 rzero~; chris@531: #X text 605 12 ............................; chris@531: #X text 605 22 . ____ ._____ _ .......___ .; chris@531: #X text 605 32 .| __ )| ____| |....../ _ |.; chris@531: #X text 605 52 .| |_) | |___| |___ / ___ |.; chris@531: #X text 605 62 .|____/|_____|_____/_/..._|.io; chris@531: #X text 605 72 ............................; chris@531: #X text 605 42 .| __ || __|.| |...../ _| |.; chris@531: #X text 475 424 take absolute value of signal; chris@531: #X text 497 630 (coefficient of 1 causes rpole~ to; chris@531: #X text 497 643 accumulate input samples); chris@531: #X text 108 542 setting input to (1/sampleRate) means; chris@531: #X text 108 555 rpole~ counts seconds when its coefficient; chris@531: #X text 108 569 is set to 1 (resets when 0); chris@531: #X text 147 822 use envelope value for volume and frequency; chris@531: #X text 479 594 -> boolean (x != x); chris@531: #X text 92 210 Left audio input for excitation (a piezo disk works chris@531: well); chris@531: #X text 111 767 multiplies counter output allowing to alter; chris@531: #X text 111 781 playback speed of envelope; chris@531: #X text 497 607 resets counter by briefly setting; chris@531: #X connect 2 0 5 0; chris@531: #X connect 3 0 2 1; chris@531: #X connect 4 0 3 0; chris@531: #X connect 5 0 11 0; chris@531: #X connect 6 0 2 0; chris@531: #X connect 7 0 30 1; chris@531: #X connect 8 0 38 0; chris@531: #X connect 8 0 38 1; chris@531: #X connect 9 0 30 0; chris@531: #X connect 10 0 12 0; chris@531: #X connect 11 0 13 0; chris@531: #X connect 12 0 8 0; chris@531: #X connect 12 0 19 0; chris@531: #X connect 12 0 19 1; chris@531: #X connect 13 0 10 0; chris@531: #X connect 14 0 29 0; chris@531: #X connect 15 0 16 0; chris@531: #X connect 16 0 13 1; chris@531: #X connect 17 0 8 1; robert@464: #X connect 18 0 17 0; chris@531: #X connect 19 0 44 0; chris@531: #X connect 20 0 16 1; chris@531: #X connect 28 0 45 0; chris@531: #X connect 29 0 47 0; chris@531: #X connect 30 0 5 1; chris@531: #X connect 32 0 14 0; chris@531: #X connect 33 0 29 1; chris@531: #X connect 34 0 28 0; chris@531: #X connect 34 0 28 1; chris@531: #X connect 44 0 18 0; chris@531: #X connect 45 0 20 0; chris@531: #X connect 46 0 47 1; chris@531: #X connect 47 0 9 0; chris@531: #X connect 51 0 35 0; chris@531: #X connect 52 0 36 0; chris@531: #X connect 53 0 37 0;