From 2ae052cdac3d3a249dddcca172ecdf29bd65bc0b Mon Sep 17 00:00:00 2001 From: Rob Hamilton Date: Sun, 7 Jun 2020 16:33:38 -0400 Subject: [PATCH] Welcome to the masheen... initial code commit --- _dariusmasheen.pd | 126 +++ bartoa.pd | 64 ++ bpmtoms.pd | 20 + channel.pd | 154 +++ envelopes.pd | 141 +++ gate~.pd | 43 + hamilr4.pd | 496 ++++++++ karpluck~.pd | 79 ++ list-abs/LICENSE.txt | 30 + list-abs/Makefile | 351 ++++++ list-abs/OSCprepend-help.pd | 41 + list-abs/OSCprepend.pd | 30 + list-abs/README.txt | 10 + list-abs/compare-any-help.pd | 50 + list-abs/compare-any.pd | 54 + list-abs/examples/list-demux.pd | 18 + list-abs/examples/list-inter-example.pd | 91 ++ list-abs/examples/list-inter-gem-example.pd | 100 ++ list-abs/examples/list-sieve-example-2.pd | 112 ++ list-abs/last-x-help.pd | 20 + list-abs/last-x.pd | 10 + list-abs/list-abs-help.pd | 18 + list-abs/list-abs-intro.pd | 78 ++ list-abs/list-abs-intro.txt | 72 ++ list-abs/list-abs-meta.pd | 8 + list-abs/list-abs.pd | 23 + list-abs/list-accum-help.pd | 21 + list-abs/list-accum.pd | 22 + list-abs/list-add-help.pd | 20 + list-abs/list-add.pd | 8 + list-abs/list-apply-help.pd | 80 ++ list-abs/list-apply.pd | 29 + list-abs/list-centroid-help.pd | 201 ++++ list-abs/list-centroid.pd | 76 ++ list-abs/list-clip-help.pd | 25 + list-abs/list-clip.pd | 26 + list-abs/list-compare-help.pd | 42 + list-abs/list-compare.pd | 74 ++ list-abs/list-delete-help.pd | 43 + list-abs/list-delete.pd | 28 + list-abs/list-dotprod-help.pd | 33 + list-abs/list-dotprod.pd | 40 + list-abs/list-drip-help.pd | 208 ++++ list-abs/list-drip.pd | 47 + list-abs/list-drip2-help.pd | 37 + list-abs/list-drip2.pd | 19 + list-abs/list-dripslow-help.pd | 70 ++ list-abs/list-dripslow.pd | 21 + list-abs/list-emath-help.pd | 49 + list-abs/list-emath.pd | 53 + list-abs/list-enumerate-help.pd | 33 + list-abs/list-enumerate.pd | 35 + list-abs/list-equalize-help.pd | 59 + list-abs/list-equalize.pd | 11 + list-abs/list-extend-help.pd | 36 + list-abs/list-extend.pd | 13 + list-abs/list-fifo-delim-help.pd | 55 + list-abs/list-fifo-delim.pd | 56 + list-abs/list-fifo-help.pd | 53 + list-abs/list-fifo.pd | 53 + list-abs/list-filter-help.pd | 81 ++ list-abs/list-filter.pd | 42 + list-abs/list-find-help.pd | 62 + list-abs/list-find.pd | 60 + list-abs/list-geometric-mean-help.pd | 201 ++++ list-abs/list-geometric-mean.pd | 54 + list-abs/list-group-help.pd | 40 + list-abs/list-group.pd | 38 + list-abs/list-harmonic-mean-help.pd | 204 ++++ list-abs/list-harmonic-mean.pd | 71 ++ list-abs/list-idx-help.pd | 28 + list-abs/list-idx.pd | 14 + list-abs/list-insert-help.pd | 37 + list-abs/list-insert.pd | 63 ++ list-abs/list-inter-help.pd | 58 + list-abs/list-inter-many-help.pd | 103 ++ list-abs/list-inter-many.pd | 83 ++ list-abs/list-inter.pd | 48 + list-abs/list-invint-help.pd | 18 + list-abs/list-invint.pd | 22 + list-abs/list-iter-help.pd | 37 + list-abs/list-iter.pd | 37 + list-abs/list-l2s-help.pd | 33 + list-abs/list-l2s.pd | 42 + list-abs/list-lastx-help.pd | 23 + list-abs/list-lastx.pd | 25 + list-abs/list-len-help.pd | 28 + list-abs/list-len.pd | 9 + list-abs/list-lifo-help.pd | 53 + list-abs/list-lifo.pd | 53 + list-abs/list-makefilename-a-help.pd | 41 + list-abs/list-makefilename-a.pd | 37 + list-abs/list-makefilename-help.pd | 37 + list-abs/list-makefilename.pd | 42 + list-abs/list-map-help.pd | 277 +++++ list-abs/list-map.pd | 31 + list-abs/list-map2-help.pd | 452 ++++++++ list-abs/list-map2.pd | 39 + list-abs/list-math-help.pd | 57 + list-abs/list-math.pd | 16 + list-abs/list-mean-help.pd | 196 ++++ list-abs/list-mean.pd | 52 + list-abs/list-minmax-help.pd | 41 + list-abs/list-minmax.pd | 53 + list-abs/list-moses-help.pd | 41 + list-abs/list-moses.pd | 32 + list-abs/list-mult-help.pd | 20 + list-abs/list-mult.pd | 8 + list-abs/list-normalize-help.pd | 79 ++ list-abs/list-normalize.pd | 14 + list-abs/list-nth-help.pd | 43 + list-abs/list-nth.pd | 23 + list-abs/list-onearg-help.pd | 48 + list-abs/list-onearg.pd | 23 + list-abs/list-pad-help.pd | 42 + list-abs/list-pad.pd | 21 + list-abs/list-quicksort-help.pd | 51 + list-abs/list-quicksort.pd | 1130 +++++++++++++++++++ list-abs/list-random-help.pd | 69 ++ list-abs/list-random.pd | 39 + list-abs/list-rdrip-help.pd | 22 + list-abs/list-rdrip.pd | 39 + list-abs/list-reduce-help.pd | 180 +++ list-abs/list-reduce.pd | 33 + list-abs/list-replace-help.pd | 37 + list-abs/list-replace.pd | 62 + list-abs/list-rev-help.pd | 23 + list-abs/list-rev.pd | 21 + list-abs/list-rot-help.pd | 24 + list-abs/list-rot.pd | 28 + list-abs/list-round-help.pd | 71 ++ list-abs/list-round.pd | 37 + list-abs/list-sect-help.pd | 61 + list-abs/list-sect.pd | 34 + list-abs/list-seek-help.pd | 128 +++ list-abs/list-seek.pd | 46 + list-abs/list-shellsort-help.pd | 52 + list-abs/list-shellsort.pd | 238 ++++ list-abs/list-sieve-help.pd | 103 ++ list-abs/list-sieve.pd | 46 + list-abs/list-sort-help.pd | 55 + list-abs/list-sort.pd | 133 +++ list-abs/list-splat-help.pd | 55 + list-abs/list-splat.pd | 73 ++ list-abs/list-stddev-help.pd | 26 + list-abs/list-stddev.pd | 36 + list-abs/list-sub-help.pd | 20 + list-abs/list-sub.pd | 8 + list-abs/list-swap-help.pd | 30 + list-abs/list-swap.pd | 82 ++ list-abs/list-tabdump-help.pd | 64 ++ list-abs/list-tabdump.pd | 83 ++ list-abs/list-unique-help.pd | 47 + list-abs/list-unique.pd | 41 + list-abs/list-unitvec-help.pd | 26 + list-abs/list-unitvec.pd | 19 + list-abs/list-wrandom-help.pd | 145 +++ list-abs/list-wrandom.pd | 79 ++ list-abs/prepent-help.pd | 56 + list-abs/prepent.pd | 10 + list-abs/sroute-help.pd | 43 + list-abs/sroute.pd | 18 + list-abs/take-two-help.pd | 21 + list-abs/take-two.pd | 27 + list-abs/triple-scale-help.pd | 41 + list-abs/triple-scale.pd | 33 + masheen.pd | 146 +++ masheen.zip | Bin 0 -> 128780 bytes master_outs_stereo.pd | 103 ++ mixer.pd | 434 +++++++ mucelj.pd | 47 + mute.pd | 10 + novaa.pd | 82 ++ panner.pd | 44 + plancs.pd | 92 ++ quarlm.pd | 68 ++ recorder.pd | 11 + recorder_controls.pd | 21 + sheny13.pd | 94 ++ sine_synth.pd | 30 + smithd32.pd | 506 +++++++++ utilities.pd | 23 + 182 files changed, 12903 insertions(+) create mode 100755 _dariusmasheen.pd create mode 100644 bartoa.pd create mode 100644 bpmtoms.pd create mode 100644 channel.pd create mode 100755 envelopes.pd create mode 100644 gate~.pd create mode 100644 hamilr4.pd create mode 100755 karpluck~.pd create mode 100755 list-abs/LICENSE.txt create mode 100755 list-abs/Makefile create mode 100755 list-abs/OSCprepend-help.pd create mode 100755 list-abs/OSCprepend.pd create mode 100755 list-abs/README.txt create mode 100755 list-abs/compare-any-help.pd create mode 100755 list-abs/compare-any.pd create mode 100755 list-abs/examples/list-demux.pd create mode 100755 list-abs/examples/list-inter-example.pd create mode 100755 list-abs/examples/list-inter-gem-example.pd create mode 100755 list-abs/examples/list-sieve-example-2.pd create mode 100755 list-abs/last-x-help.pd create mode 100755 list-abs/last-x.pd create mode 100755 list-abs/list-abs-help.pd create mode 100755 list-abs/list-abs-intro.pd create mode 100755 list-abs/list-abs-intro.txt create mode 100755 list-abs/list-abs-meta.pd create mode 100755 list-abs/list-abs.pd create mode 100755 list-abs/list-accum-help.pd create mode 100755 list-abs/list-accum.pd create mode 100755 list-abs/list-add-help.pd create mode 100755 list-abs/list-add.pd create mode 100755 list-abs/list-apply-help.pd create mode 100755 list-abs/list-apply.pd create mode 100755 list-abs/list-centroid-help.pd create mode 100755 list-abs/list-centroid.pd create mode 100755 list-abs/list-clip-help.pd create mode 100755 list-abs/list-clip.pd create mode 100755 list-abs/list-compare-help.pd create mode 100755 list-abs/list-compare.pd create mode 100755 list-abs/list-delete-help.pd create mode 100755 list-abs/list-delete.pd create mode 100755 list-abs/list-dotprod-help.pd create mode 100755 list-abs/list-dotprod.pd create mode 100755 list-abs/list-drip-help.pd create mode 100755 list-abs/list-drip.pd create mode 100755 list-abs/list-drip2-help.pd create mode 100755 list-abs/list-drip2.pd create mode 100755 list-abs/list-dripslow-help.pd create mode 100755 list-abs/list-dripslow.pd create mode 100755 list-abs/list-emath-help.pd create mode 100755 list-abs/list-emath.pd create mode 100755 list-abs/list-enumerate-help.pd create mode 100755 list-abs/list-enumerate.pd create mode 100755 list-abs/list-equalize-help.pd create mode 100755 list-abs/list-equalize.pd create mode 100755 list-abs/list-extend-help.pd create mode 100755 list-abs/list-extend.pd create mode 100755 list-abs/list-fifo-delim-help.pd create mode 100755 list-abs/list-fifo-delim.pd create mode 100755 list-abs/list-fifo-help.pd create mode 100755 list-abs/list-fifo.pd create mode 100755 list-abs/list-filter-help.pd create mode 100755 list-abs/list-filter.pd create mode 100755 list-abs/list-find-help.pd create mode 100755 list-abs/list-find.pd create mode 100755 list-abs/list-geometric-mean-help.pd create mode 100755 list-abs/list-geometric-mean.pd create mode 100755 list-abs/list-group-help.pd create mode 100755 list-abs/list-group.pd create mode 100755 list-abs/list-harmonic-mean-help.pd create mode 100755 list-abs/list-harmonic-mean.pd create mode 100755 list-abs/list-idx-help.pd create mode 100755 list-abs/list-idx.pd create mode 100755 list-abs/list-insert-help.pd create mode 100755 list-abs/list-insert.pd create mode 100755 list-abs/list-inter-help.pd create mode 100755 list-abs/list-inter-many-help.pd create mode 100755 list-abs/list-inter-many.pd create mode 100755 list-abs/list-inter.pd create mode 100755 list-abs/list-invint-help.pd create mode 100755 list-abs/list-invint.pd create mode 100755 list-abs/list-iter-help.pd create mode 100755 list-abs/list-iter.pd create mode 100755 list-abs/list-l2s-help.pd create mode 100755 list-abs/list-l2s.pd create mode 100755 list-abs/list-lastx-help.pd create mode 100755 list-abs/list-lastx.pd create mode 100755 list-abs/list-len-help.pd create mode 100755 list-abs/list-len.pd create mode 100755 list-abs/list-lifo-help.pd create mode 100755 list-abs/list-lifo.pd create mode 100755 list-abs/list-makefilename-a-help.pd create mode 100755 list-abs/list-makefilename-a.pd create mode 100755 list-abs/list-makefilename-help.pd create mode 100755 list-abs/list-makefilename.pd create mode 100755 list-abs/list-map-help.pd create mode 100755 list-abs/list-map.pd create mode 100755 list-abs/list-map2-help.pd create mode 100755 list-abs/list-map2.pd create mode 100755 list-abs/list-math-help.pd create mode 100755 list-abs/list-math.pd create mode 100755 list-abs/list-mean-help.pd create mode 100755 list-abs/list-mean.pd create mode 100755 list-abs/list-minmax-help.pd create mode 100755 list-abs/list-minmax.pd create mode 100755 list-abs/list-moses-help.pd create mode 100755 list-abs/list-moses.pd create mode 100755 list-abs/list-mult-help.pd create mode 100755 list-abs/list-mult.pd create mode 100755 list-abs/list-normalize-help.pd create mode 100755 list-abs/list-normalize.pd create mode 100755 list-abs/list-nth-help.pd create mode 100755 list-abs/list-nth.pd create mode 100755 list-abs/list-onearg-help.pd create mode 100755 list-abs/list-onearg.pd create mode 100755 list-abs/list-pad-help.pd create mode 100755 list-abs/list-pad.pd create mode 100755 list-abs/list-quicksort-help.pd create mode 100755 list-abs/list-quicksort.pd create mode 100755 list-abs/list-random-help.pd create mode 100755 list-abs/list-random.pd create mode 100755 list-abs/list-rdrip-help.pd create mode 100755 list-abs/list-rdrip.pd create mode 100755 list-abs/list-reduce-help.pd create mode 100755 list-abs/list-reduce.pd create mode 100755 list-abs/list-replace-help.pd create mode 100755 list-abs/list-replace.pd create mode 100755 list-abs/list-rev-help.pd create mode 100755 list-abs/list-rev.pd create mode 100755 list-abs/list-rot-help.pd create mode 100755 list-abs/list-rot.pd create mode 100755 list-abs/list-round-help.pd create mode 100755 list-abs/list-round.pd create mode 100755 list-abs/list-sect-help.pd create mode 100755 list-abs/list-sect.pd create mode 100755 list-abs/list-seek-help.pd create mode 100755 list-abs/list-seek.pd create mode 100755 list-abs/list-shellsort-help.pd create mode 100755 list-abs/list-shellsort.pd create mode 100755 list-abs/list-sieve-help.pd create mode 100755 list-abs/list-sieve.pd create mode 100755 list-abs/list-sort-help.pd create mode 100755 list-abs/list-sort.pd create mode 100755 list-abs/list-splat-help.pd create mode 100755 list-abs/list-splat.pd create mode 100755 list-abs/list-stddev-help.pd create mode 100755 list-abs/list-stddev.pd create mode 100755 list-abs/list-sub-help.pd create mode 100755 list-abs/list-sub.pd create mode 100755 list-abs/list-swap-help.pd create mode 100755 list-abs/list-swap.pd create mode 100755 list-abs/list-tabdump-help.pd create mode 100755 list-abs/list-tabdump.pd create mode 100755 list-abs/list-unique-help.pd create mode 100755 list-abs/list-unique.pd create mode 100755 list-abs/list-unitvec-help.pd create mode 100755 list-abs/list-unitvec.pd create mode 100755 list-abs/list-wrandom-help.pd create mode 100755 list-abs/list-wrandom.pd create mode 100755 list-abs/prepent-help.pd create mode 100755 list-abs/prepent.pd create mode 100755 list-abs/sroute-help.pd create mode 100755 list-abs/sroute.pd create mode 100755 list-abs/take-two-help.pd create mode 100755 list-abs/take-two.pd create mode 100755 list-abs/triple-scale-help.pd create mode 100755 list-abs/triple-scale.pd create mode 100644 masheen.pd create mode 100644 masheen.zip create mode 100644 master_outs_stereo.pd create mode 100644 mixer.pd create mode 100644 mucelj.pd create mode 100644 mute.pd create mode 100644 novaa.pd create mode 100644 panner.pd create mode 100644 plancs.pd create mode 100644 quarlm.pd create mode 100644 recorder.pd create mode 100644 recorder_controls.pd create mode 100644 sheny13.pd create mode 100755 sine_synth.pd create mode 100755 smithd32.pd create mode 100644 utilities.pd diff --git a/_dariusmasheen.pd b/_dariusmasheen.pd new file mode 100755 index 0000000..8c683ad --- /dev/null +++ b/_dariusmasheen.pd @@ -0,0 +1,126 @@ +#N canvas -1504 13 974 769 12; +#X obj 74 93 bartoa; +#X obj 74 123 deegaj; +#X obj 74 153 johnsz2; +#X obj 74 183 martse; +#X obj 74 213 mucelj; +#X obj 74 243 nik; +#X obj 74 273 novaa; +#X obj 74 303 ortegm3; +#X obj 74 333 persow; +#X obj 74 363 plancs; +#X obj 74 393 quarlm; +#X obj 74 423 rothgj; +#X obj 74 453 schans2; +#X obj 74 483 sheny13; +#X obj 74 513 smithd32; +#X obj 74 543 takakh; +#X obj 74 573 villan2; +#X obj 74 603 zhaox10; +#X obj 74 633 zhuy16; +#X obj 74 663 houchl; +#X text 24 21 [ARTS 2020] SUMMER 2020 "MASHEEN"; +#X text 275 70 1 Create a subpatch saved with the filename as your +RCS id; +#X text 275 110 2 In your patch create two inlets and two outlets; +#X text 330 187 e.g.; +#X text 330 257 e.g.; +#X text 275 150 3 Add a "Receive" object named with your RCS ID_tempo +; +#X obj 384 187 receive hamilr4_tempo; +#X obj 384 257 receive hamilr4_control; +#X text 275 220 4 Add a "Receive" object named with your RCS ID_control +; +#X obj 74 63 hamilr4; +#N canvas 0 50 479 747 tempo_sender 0; +#X obj 89 687 s hamilr4_tempo; +#X obj 89 13 inlet; +#X obj 113 657 s houchl_tempo; +#X obj 123 627 s zhuy16_tempo; +#X obj 133 597 s zhaox10_tempo; +#X obj 143 567 s villan2_tempo; +#X obj 153 537 s takakh_tempo; +#X obj 163 507 s smithd32_tempo; +#X obj 173 477 s sheny13_tempo; +#X obj 183 447 s schans2_tempo; +#X obj 193 417 s rothgj_tempo; +#X obj 203 387 s quarlm_tempo; +#X obj 213 357 s plancs_tempo; +#X obj 223 327 s persow_tempo; +#X obj 233 297 s ortegm3_tempo; +#X obj 243 267 s novaa_tempo; +#X obj 253 237 s nik_tempo; +#X obj 263 207 s mucelj_tempo; +#X obj 273 177 s martse_tempo; +#X obj 283 147 s johnsz2_tempo; +#X obj 293 117 s deegaj_tempo; +#X obj 303 87 s bartoa_tempo; +#X connect 1 0 0 0; +#X connect 1 0 2 0; +#X connect 1 0 3 0; +#X connect 1 0 4 0; +#X connect 1 0 5 0; +#X connect 1 0 6 0; +#X connect 1 0 7 0; +#X connect 1 0 8 0; +#X connect 1 0 9 0; +#X connect 1 0 10 0; +#X connect 1 0 11 0; +#X connect 1 0 12 0; +#X connect 1 0 13 0; +#X connect 1 0 14 0; +#X connect 1 0 15 0; +#X connect 1 0 16 0; +#X connect 1 0 17 0; +#X connect 1 0 18 0; +#X connect 1 0 19 0; +#X connect 1 0 20 0; +#X connect 1 0 21 0; +#X restore 277 525 pd tempo_sender; +#X obj 277 466 metro 500; +#X obj 277 496 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 277 431 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 275 300 5 Make your patch _do something_ with a metro beat +(coming in from the _tempo receive) and spit out audio from your left +outlet. DO NOT INCLUDE A [DAC~] OBJECT IN YOUR PATCH \, just pass audio +out the outlet for now.; +#X text 275 380 6 Send Rob your patch on Sunday.; +#X obj 166 547 dac~; +#X obj 423 607 osc~ 800; +#X obj 408 651 *~; +#X obj 408 576 vline~; +#X msg 408 527 1 20 \, 0 20 20; +#X text 456 575 translate to audio rate signal; +#X text 486 608 generate 800 hz sine tone; +#X text 438 650 multiply sine tone by amplitude envelope; +#X text 512 524 go to 1 (full volume) in 20 \, then go to zero (no +volume) in 20 ms after waiting 20 ms; +#X floatatom 519 464 5 0 0 0 - - -; +#X obj 577 410 loadbang; +#X obj 376 419 hsl 128 15 200 2000 0 0 empty empty empty -2 -8 0 10 +-262144 -1 -1 0 1; +#X msg 519 436 500; +#X obj 407 680 *~ 0.2; +#X obj 432 705 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 407 726 *~ 1; +#X connect 14 0 36 0; +#X connect 14 0 36 1; +#X connect 31 0 32 0; +#X connect 31 0 40 0; +#X connect 32 0 30 0; +#X connect 33 0 31 0; +#X connect 37 0 38 1; +#X connect 38 0 49 0; +#X connect 39 0 38 0; +#X connect 40 0 39 0; +#X connect 45 0 31 1; +#X connect 46 0 48 0; +#X connect 47 0 45 0; +#X connect 48 0 47 0; +#X connect 49 0 51 0; +#X connect 50 0 51 1; +#X connect 51 0 36 0; +#X connect 51 0 36 1; diff --git a/bartoa.pd b/bartoa.pd new file mode 100644 index 0000000..26a6652 --- /dev/null +++ b/bartoa.pd @@ -0,0 +1,64 @@ +#N canvas 309 80 1371 826 12; +#X obj 72 143 inlet~; +#X obj 292 602 inlet; +#X obj 142 775 outlet; +#X obj 49 779 outlet~; +#X obj 145 275 receive bartoa_tempo; +#X obj 794 1 receive bartoa_control; +#X obj 794 52 list trim; +#X msg 794 73 1 2 3 4 5, f 37; +#X obj 794 31 list prepend set; +#X obj 145 336 f; +#X obj 185 336 + 1; +#X floatatom 145 360 5 0 0 0 - - -; +#N canvas 0 50 450 250 (subpatch) 0; +#X array melody 60 float 3; +#A 0 62 62 74 74 69 69 68 67 65 62 65 67 60 60 74 74 69 69 68 67 65 +62 65 67 59 59 74 74 69 69 68 67 65 62 65 67 58 58 74 74 69 69 68 67 +65 62 65 67 74 69 0 68 0 67 0 65 0 62 65 67; +#X coords 0 127 60 0 200 140 1 0 0; +#X restore 442 304 graph; +#X obj 145 453 tabread melody; +#X floatatom 145 507 10 0 0 0 - - -; +#X floatatom 145 407 5 0 0 0 - - -; +#X msg 213 310 0; +#X obj 145 530 mtof; +#X floatatom 145 554 5 0 0 0 - - -; +#X obj 145 307 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X msg 379 459 \; melody 0 62 62 74 74 69 69 68 67 65 62 65 67 60 60 +74 74 69 69 68 67 65 62 65 67 59 59 74 74 69 69 68 67 65 62 65 67 58 +58 74 74 69 69 68 67 65 62 65 67, f 49; +#X obj 145 384 % 48; +#X text 349 589 Perhaps input volume from parent patch?; +#X msg 225 614 0.1; +#X msg 287 634 0; +#X obj 145 629 osc~; +#X obj 145 674 *~; +#X obj 215 715 throw~ bartoa_audio_1; +#X obj 1060 236 loadbang; +#X text 858 192 ROB - added this \, need to set a volume at the loading +of your patch; +#X connect 1 0 26 1; +#X connect 4 0 19 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 8 0 6 0; +#X connect 9 0 10 0; +#X connect 9 0 11 0; +#X connect 10 0 9 1; +#X connect 11 0 21 0; +#X connect 13 0 14 0; +#X connect 14 0 17 0; +#X connect 15 0 13 0; +#X connect 16 0 9 1; +#X connect 17 0 18 0; +#X connect 18 0 25 0; +#X connect 19 0 9 0; +#X connect 21 0 15 0; +#X connect 23 0 26 1; +#X connect 24 0 26 1; +#X connect 25 0 26 0; +#X connect 26 0 3 0; +#X connect 26 0 27 0; +#X connect 28 0 23 0; diff --git a/bpmtoms.pd b/bpmtoms.pd new file mode 100644 index 0000000..d60ea37 --- /dev/null +++ b/bpmtoms.pd @@ -0,0 +1,20 @@ +#N canvas 250 30 450 300 12; +#X floatatom 267 137 5 0 0 0 - - -; +#X obj 267 169 expr 60000/$f1; +#X floatatom 267 203 10 0 0 0 - - -; +#X text 311 138 bpm; +#X text 343 203 ms; +#X obj 267 101 inlet; +#X obj 267 236 outlet; +#X text 114 31 Convert BPM to MS for Metro; +#X floatatom 107 120 5 0 0 0 - - -; +#X text 111 100 bpm; +#X floatatom 161 121 10 0 0 0 - - -; +#X text 184 101 ms; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 6 0; +#X connect 2 0 10 0; +#X connect 5 0 8 0; +#X connect 8 0 0 0; +#X coords 0 -1 1 1 140 48 2 100 100; diff --git a/channel.pd b/channel.pd new file mode 100644 index 0000000..2033b09 --- /dev/null +++ b/channel.pd @@ -0,0 +1,154 @@ +#N canvas 267 203 559 552 12; +#X obj 25 33 cnv 15 88 392 empty empty empty 20 12 0 14 -233017 -66577 +0; +#X obj 68 56 vu 15 200 masheen_meter_text empty -1 -8 0 10 -66577 -1 +1 0; +#X obj 28 56 vsl 20 200 1 101 1 0 empty empty empty 0 -9 0 10 -262144 +-1 -1 12200 1; +#X obj 321 133 *~; +#X obj 339 96 line~; +#X msg 339 72 \$1 20; +#X floatatom 339 50 5 0 0 0 - - -; +#X obj 55 1 inlet~; +#X obj 17 461 outlet~; +#X floatatom 321 221 5 0 0 0 - - -; +#X obj 321 194 env~ 16384 8192; +#X obj 339 1 - 1; +#X obj 339 26 / 100; +#X floatatom 201 221 5 0 0 0 - - -; +#X obj 201 194 env~ 16384 8192; +#X obj 201 249 - 103; +#X obj 321 249 - 103; +#X obj 50 56 vu 15 200 masheen_meter_text empty -1 -8 0 10 -66577 -1 +0 0; +#X floatatom 48 287 5 0 0 0 - - -; +#X obj 55 395 tgl 20 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X text 77 352 S; +#X text 77 374 M; +#X text 77 396 R; +#X obj 55 373 tgl 20 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 55 351 tgl 20 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#N canvas 892 187 864 792 mute_solo 1; +#X obj 17 57 inlet~; +#X obj 217 17 inlet; +#X obj 287 17 inlet; +#X text 217 -5 solo; +#X text 287 -5 mute; +#X floatatom 217 111 5 0 0 0 - - -; +#X floatatom 287 111 5 0 0 0 - - -; +#X obj 320 378 outlet; +#X text 389 322 set mute button; +#X text 403 94 If solo is pressed \, override mute; +#X msg 354 350 0; +#X obj 17 456 gate~; +#X msg 352 93 0; +#X obj 286 158 t b f; +#X msg 320 322 set \$1; +#X floatatom 267 220 5 0 0 0 - - -; +#X obj 267 194 -; +#X obj 48 736 outlet~; +#X floatatom 49 428 5 0 0 0 - - -; +#X obj 267 249 expr if($f1 < 0 \, 1 \, 0); +#X obj 336 352 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X floatatom 341 295 5 0 0 0 - - -; +#X obj 269 317 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 267 273 select 1; +#X obj 716 59 s solo_mode; +#X obj 716 37 expr if($f1 == 1 \, 1 \, -1); +#X obj 111 543 v global_solo_count; +#X text 111 474 Check to see if there are any solo'd channels; +#X floatatom 111 615 5 0 0 0 - - -; +#X obj 48 672 gate~; +#X floatatom 141 567 5 0 0 0 - - -; +#X obj 111 493 r solo_mode; +#X obj 111 518 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X text 714 83 Update global count for solo-mode (> 0 we're soloing) +; +#X text 286 684 expr if( $f1 > 0 \, if($f2 > 0 \, 1 \, 0) \, 1); +#X obj 111 591 expr if( $f1 > 0 \, if($f2 > 0 \, 1 \, 0) \, 1); +#X obj 76 562 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 151 615 r init; +#X obj 352 70 r init; +#X obj 194 493 r init; +#X obj 269 495 r solo_all; +#X obj 269 544 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 269 519 pipe 10; +#X connect 0 0 11 0; +#X connect 1 0 5 0; +#X connect 1 0 25 0; +#X connect 2 0 6 0; +#X connect 5 0 16 0; +#X connect 5 0 35 1; +#X connect 6 0 13 0; +#X connect 11 1 29 0; +#X connect 12 0 6 0; +#X connect 12 0 5 0; +#X connect 13 0 5 0; +#X connect 13 1 16 1; +#X connect 14 0 7 0; +#X connect 14 0 20 0; +#X connect 14 0 10 0; +#X connect 15 0 19 0; +#X connect 16 0 15 0; +#X connect 18 0 11 1; +#X connect 19 0 18 0; +#X connect 19 0 23 0; +#X connect 23 0 22 0; +#X connect 23 1 14 0; +#X connect 23 1 21 0; +#X connect 25 0 24 0; +#X connect 26 0 30 0; +#X connect 26 0 35 0; +#X connect 26 0 36 0; +#X connect 28 0 29 1; +#X connect 29 0 17 0; +#X connect 31 0 32 0; +#X connect 32 0 26 0; +#X connect 35 0 28 0; +#X connect 36 0 5 0; +#X connect 37 0 28 0; +#X connect 38 0 12 0; +#X connect 39 0 32 0; +#X connect 40 0 42 0; +#X connect 41 0 26 0; +#X connect 42 0 41 0; +#X restore 165 305 pd mute_solo; +#X obj -61 354 r mute all; +#X obj -61 332 r solo all; +#X obj -61 376 r rec all; +#X obj 32 312 panner; +#X obj 73 461 outlet~; +#X connect 2 0 11 0; +#X connect 3 0 10 0; +#X connect 3 0 25 0; +#X connect 4 0 3 1; +#X connect 5 0 4 0; +#X connect 6 0 5 0; +#X connect 6 0 18 0; +#X connect 7 0 3 0; +#X connect 7 0 14 0; +#X connect 9 0 16 0; +#X connect 10 0 9 0; +#X connect 11 0 12 0; +#X connect 12 0 6 0; +#X connect 13 0 15 0; +#X connect 14 0 13 0; +#X connect 15 0 17 0; +#X connect 16 0 1 0; +#X connect 23 0 25 2; +#X connect 24 0 25 1; +#X connect 25 0 29 0; +#X connect 26 0 23 0; +#X connect 27 0 24 0; +#X connect 28 0 19 0; +#X connect 29 0 8 0; +#X connect 29 1 30 0; +#X coords 0 -1 1 1 88 392 1 25 32; diff --git a/envelopes.pd b/envelopes.pd new file mode 100755 index 0000000..491b3af --- /dev/null +++ b/envelopes.pd @@ -0,0 +1,141 @@ +#N canvas -9 -9 1920 976 10; +#X floatatom 51 84 5 0 0 0 - - -; +#X obj 51 136 mtof; +#X text 86 85 MIDI pitch; +#X obj 521 246 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#N canvas 0 23 450 300 two_notes 0; +#X obj 37 37 inlet; +#X obj 37 58 metro 500; +#X obj 37 79 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X obj 37 100 sel 0 1; +#X msg 38 122 55; +#X msg 69 122 67; +#X floatatom 69 143 5 0 0 0 - - -; +#X obj 69 163 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 1 5 0; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X restore 520 268 pd two_notes; +#X obj 604 247 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#N canvas 0 23 450 300 many_notes 0; +#X obj 37 37 inlet; +#X obj 37 241 outlet; +#X obj 37 96 f 0; +#X obj 36 138 % 8; +#X obj 179 150 table pitches; +#X msg 179 174 \; pitches 0 60 67 62 58 63 70 72 65; +#X obj 37 188 tabread pitches; +#X obj 37 58 metro 170; +#X floatatom 37 212 5 0 0 0 - - -; +#X obj 37 117 + 1; +#X floatatom 37 159 5 0 0 0 - - -; +#X connect 0 0 7 0; +#X connect 2 0 9 0; +#X connect 3 0 2 1; +#X connect 3 0 10 0; +#X connect 6 0 8 0; +#X connect 7 0 2 0; +#X connect 8 0 1 0; +#X connect 9 0 3 0; +#X connect 10 0 6 0; +#X restore 604 269 pd many_notes; +#X obj 521 317 s notes; +#X floatatom 521 293 5 0 0 0 - - -; +#N canvas -9 -9 1920 976 oscs 0; +#X obj 37 37 inlet; +#X obj 37 121 osc~; +#X obj 104 123 osc~; +#X obj 104 70 * 1.015; +#X obj 192 127 osc~; +#X obj 192 74 * 0.503; +#X text 186 145 octave below; +#X obj 279 122 osc~; +#X obj 279 74 * 1.496; +#X obj 279 159 *~ 0.5; +#X obj 426 126 osc~; +#X obj 426 78 * 2.01; +#X obj 426 163 *~ 0.25; +#X text 415 182 octave up; +#X text 274 180 fifth up; +#X obj 73 256 outlet~; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 0 0 11 0; +#X connect 0 0 8 0; +#X connect 0 0 5 0; +#X connect 1 0 15 0; +#X connect 2 0 15 0; +#X connect 3 0 2 0; +#X connect 4 0 15 0; +#X connect 5 0 4 0; +#X connect 7 0 9 0; +#X connect 8 0 7 0; +#X connect 9 0 15 0; +#X connect 10 0 12 0; +#X connect 11 0 10 0; +#X connect 12 0 15 0; +#X restore 51 169 pd oscs; +#N canvas 0 23 450 300 env 0; +#X obj 119 125 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X msg 119 164 1 5; +#X obj 161 180 pack 0 500; +#X obj 161 199 line~; +#X obj 161 222 *~; +#X obj 161 244 *~; +#X text 226 107 decay; +#X floatatom 228 125 5 0 0 0 - - -; +#X obj 113 73 inlet; +#X obj 234 90 inlet; +#X obj 161 162 del 50; +#X obj 161 265 outlet~; +#X connect 0 0 1 0; +#X connect 0 0 10 0; +#X connect 1 0 3 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 0 4 1; +#X connect 4 0 5 0; +#X connect 4 0 5 1; +#X connect 5 0 11 0; +#X connect 7 0 2 1; +#X connect 8 0 0 0; +#X connect 9 0 7 0; +#X connect 10 0 2 0; +#X restore 123 157 pd env; +#X text 158 127 decay; +#X floatatom 197 128 5 0 0 0 - - -; +#X obj 51 104 t f b; +#X obj 51 211 *~; +#X obj 51 27 inlet; +#X obj 197 86 inlet; +#X obj 51 289 outlet~; +#X obj 109 27 inlet; +#X obj 51 58 f 60; +#X obj 51 251 *~ 0.1; +#X connect 0 0 13 0; +#X connect 1 0 9 0; +#X connect 3 0 4 0; +#X connect 4 0 8 0; +#X connect 5 0 6 0; +#X connect 6 0 8 0; +#X connect 8 0 7 0; +#X connect 9 0 14 0; +#X connect 10 0 14 1; +#X connect 12 0 10 1; +#X connect 13 0 1 0; +#X connect 13 1 10 0; +#X connect 14 0 20 0; +#X connect 15 0 19 1; +#X connect 16 0 12 0; +#X connect 18 0 19 0; +#X connect 19 0 0 0; +#X connect 20 0 17 0; diff --git a/gate~.pd b/gate~.pd new file mode 100644 index 0000000..5d09598 --- /dev/null +++ b/gate~.pd @@ -0,0 +1,43 @@ +#N canvas 0 23 728 483 12; +#X text 469 38 Send test signal to all channels; +#N canvas 0 23 450 300 gate~ 0; +#X obj 70 51 inlet~; +#X obj 139 51 inlet; +#X obj 70 132 *~; +#X obj 70 156 outlet~; +#X obj 139 80 expr 1 - $f1; +#X obj 140 132 *~; +#X obj 140 156 outlet~; +#X connect 0 0 2 0; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 1 0 2 1; +#X connect 2 0 3 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X restore 392 64 pd gate~; +#X obj 445 37 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 70 51 inlet~; +#X obj 127 51 inlet; +#X obj 70 202 *~; +#X obj 70 226 outlet~; +#X obj 208 90 expr 1 - $f1; +#X obj 140 202 *~; +#X obj 140 226 outlet~; +#X obj 208 141 line~; +#X obj 127 141 line~; +#X msg 208 117 \$1 20; +#X msg 127 116 \$1 20; +#X connect 2 0 1 1; +#X connect 3 0 5 0; +#X connect 3 0 8 0; +#X connect 4 0 7 0; +#X connect 4 0 13 0; +#X connect 5 0 6 0; +#X connect 7 0 12 0; +#X connect 8 0 9 0; +#X connect 10 0 8 1; +#X connect 11 0 5 1; +#X connect 12 0 10 0; +#X connect 13 0 11 0; diff --git a/hamilr4.pd b/hamilr4.pd new file mode 100644 index 0000000..e44e94f --- /dev/null +++ b/hamilr4.pd @@ -0,0 +1,496 @@ +#N canvas 0 23 1920 1129 12; +#X obj 112 997 outlet; +#X obj 53 997 outlet~; +#X text 184 995 Two outlets: the first is an audio outlet (note the +"~") and the second is for data; +#X obj 0 -2 cnv 15 1920 90 empty empty empty 20 12 0 14 -233017 -66577 +0; +#X text 9 11 Two inlets: the first is for audio (note the "~") and +the second is for data; +#X obj 19 58 inlet~; +#X obj 79 58 inlet; +#X obj 1030 56 receive hamilr4_tempo; +#X obj 1184 56 receive hamilr4_control; +#X obj 1030 97 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 1184 119 list trim; +#X msg 1184 140 1 2 3 4 5; +#X obj 1184 98 list prepend set; +#X text 1030 0 Two named receives \, one for tempo (receives a "bang" +event from the global clock metro) and the other receives a list of +control data... this can be any size.; +#X obj 823 272 osc~ 740; +#X obj 893 272 osc~ 840; +#N canvas 0 23 450 300 notes 0; +#X msg 983 782 masheen_meter_no_text; +#X msg 984 728 \; masheen_meter_no_text scale \$1; +#X msg 984 697 0; +#X msg 985 825 \; foo7_rcv label_pos \$1 \$2; +#X text 701 667 Sends to set properties of meter text:; +#X obj 1265 673 f; +#X msg 1243 652 bang; +#X floatatom 1281 651 3 50 88 0 - - -; +#X floatatom 1316 673 3 0 37 0 - - -; +#X obj 1265 696 pack 0 0; +#X text 1343 673 y-label; +#X text 1309 651 x-label; +#X obj 1285 788 f; +#X msg 1263 767 bang; +#X floatatom 1301 766 3 0 2 0 - - -; +#X floatatom 1336 788 3 8 36 0 - - -; +#X obj 1285 811 pack 0 0; +#X text 1329 766 font; +#X text 1365 788 height; +#X msg 1285 837 \; foo7_rcv label_font \$1 \$2; +#X msg 1265 721 \; foo7_rcv label_po`s \$1 \$2; +#X msg 783 745 \; foo7_rcv label hello; +#X connect 2 0 1 0; +#X connect 5 0 9 0; +#X connect 6 0 5 0; +#X connect 7 0 5 1; +#X connect 8 0 9 1; +#X connect 9 0 20 0; +#X connect 12 0 16 0; +#X connect 13 0 12 0; +#X connect 14 0 12 1; +#X connect 15 0 16 1; +#X connect 16 0 19 0; +#X restore 1786 62 pd notes; +#X obj 1628 429 channel; +#X obj 1717 429 channel; +#X obj 1628 886 throw~ main_out_left; +#X obj 1708 850 throw~ main_out_right; +#N canvas 0 23 450 300 gate~ 0; +#X obj 70 51 inlet~; +#X obj 139 51 inlet; +#X obj 70 132 *~; +#X obj 70 156 outlet~; +#X obj 139 80 expr 1 - $f1; +#X obj 140 132 *~; +#X obj 140 156 outlet~; +#X connect 0 0 2 0; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 1 0 2 1; +#X connect 2 0 3 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X restore 1628 395 pd gate~; +#X obj 1810 380 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 +1 1; +#N canvas 0 23 450 300 gate~ 0; +#X obj 70 51 inlet~; +#X obj 139 51 inlet; +#X obj 70 132 *~; +#X obj 70 156 outlet~; +#X obj 139 80 expr 1 - $f1; +#X obj 140 132 *~; +#X obj 140 156 outlet~; +#X connect 0 0 2 0; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 1 0 2 1; +#X connect 2 0 3 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X restore 1717 395 pd gate~; +#X obj 1628 328 catch~ hamilr4_audio_1; +#X obj 1717 351 catch~ hamilr4_audio_2; +#N canvas 0 23 450 300 hamilr4_throws 0; +#X obj 77 28 inlet~; +#X obj 77 130 throw~ hamilr4_audio_1; +#X obj 148 103 throw~ hamilr4_audio_2; +#X obj 148 31 inlet~; +#X connect 0 0 1 0; +#X connect 3 0 2 0; +#X restore 817 326 pd hamilr4_throws; +#N canvas 1117 23 693 620 throws 0; +#X obj 59 541 throw~ bartoa_audio_1; +#X obj 79 522 throw~ deegaj_audio_1; +#X obj 99 503 throw~ houchl_audio_1; +#X obj 119 484 throw~ johnsz2_audio_1; +#X obj 139 465 throw~ martse_audio_1; +#X obj 159 446 throw~ mucelj_audio_1; +#X obj 179 427 throw~ nelsoc5_audio_1; +#X obj 199 408 throw~ nik_audio_1; +#X obj 219 389 throw~ novaa_audio_1; +#X obj 239 370 throw~ ortegm3_audio_1; +#X obj 259 351 throw~ persow_audio_1; +#X obj 279 332 throw~ plancs_audio_1; +#X obj 298 313 throw~ quarlm_audio_1; +#X obj 318 294 throw~ rothgj_audio_1; +#X obj 338 275 throw~ schans2_audio_1; +#X obj 358 256 throw~ sheny13_audio_1; +#X obj 378 237 throw~ smith32_audio_1; +#X obj 398 218 throw~ takakh_audio_1; +#X obj 418 199 throw~ villan2_audio_1; +#X obj 438 180 throw~ zhaox10_audio_1; +#X obj 458 161 throw~ zhuy16_audio_1; +#X obj 73 138 osc~ 240; +#X text 58 79 Mono audio throws for each user; +#X restore 1786 16 pd throws; +#N canvas 298 91 1121 615 tests 0; +#N canvas 1117 23 693 620 throws_mono_test 0; +#X obj 59 541 throw~ bartoa_audio_1; +#X obj 79 522 throw~ deegaj_audio_1; +#X obj 99 503 throw~ houchl_audio_1; +#X obj 119 484 throw~ johnsz2_audio_1; +#X obj 139 465 throw~ martse_audio_1; +#X obj 159 446 throw~ mucelj_audio_1; +#X obj 179 427 throw~ nelsoc5_audio_1; +#X obj 199 408 throw~ nik_audio_1; +#X obj 219 389 throw~ novaa_audio_1; +#X obj 239 370 throw~ ortegm3_audio_1; +#X obj 259 351 throw~ persow_audio_1; +#X obj 279 332 throw~ plancs_audio_1; +#X obj 298 313 throw~ quarlm_audio_1; +#X obj 318 294 throw~ rothgj_audio_1; +#X obj 338 275 throw~ schans2_audio_1; +#X obj 358 256 throw~ sheny13_audio_1; +#X obj 378 237 throw~ smith32_audio_1; +#X obj 398 218 throw~ takakh_audio_1; +#X obj 418 199 throw~ villan2_audio_1; +#X obj 438 180 throw~ zhaox10_audio_1; +#X obj 458 161 throw~ zhuy16_audio_1; +#X text 70 86 Mono audio throws - same signal for each user; +#X obj 67 136 inlet~; +#X connect 22 0 0 0; +#X connect 22 0 1 0; +#X connect 22 0 2 0; +#X connect 22 0 3 0; +#X connect 22 0 4 0; +#X connect 22 0 5 0; +#X connect 22 0 6 0; +#X connect 22 0 7 0; +#X connect 22 0 8 0; +#X connect 22 0 9 0; +#X connect 22 0 10 0; +#X connect 22 0 11 0; +#X connect 22 0 12 0; +#X connect 22 0 13 0; +#X connect 22 0 14 0; +#X connect 22 0 15 0; +#X connect 22 0 16 0; +#X connect 22 0 17 0; +#X connect 22 0 18 0; +#X connect 22 0 19 0; +#X connect 22 0 20 0; +#X restore 46 143 pd throws_mono_test; +#X obj 46 53 osc~ 440; +#X obj 451 125 channel; +#X obj 540 125 channel; +#X text 123 92 Send test signal to all channels; +#X obj 451 552 throw~ main_out_left; +#X obj 540 529 throw~ main_out_right; +#N canvas 0 23 450 300 gate~ 0; +#X obj 70 51 inlet~; +#X obj 139 51 inlet; +#X obj 70 132 *~; +#X obj 70 156 outlet~; +#X obj 139 80 expr 1 - $f1; +#X obj 140 132 *~; +#X obj 140 156 outlet~; +#X connect 0 0 2 0; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 1 0 2 1; +#X connect 2 0 3 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X restore 46 118 pd gate~; +#X obj 99 91 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#N canvas 0 23 450 300 gate~ 0; +#X obj 70 51 inlet~; +#X obj 139 51 inlet; +#X obj 70 132 *~; +#X obj 70 156 outlet~; +#X obj 139 80 expr 1 - $f1; +#X obj 140 132 *~; +#X obj 140 156 outlet~; +#X connect 0 0 2 0; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 1 0 2 1; +#X connect 2 0 3 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X restore 451 91 pd gate~; +#X obj 633 76 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#N canvas 0 23 450 300 gate~ 0; +#X obj 70 51 inlet~; +#X obj 139 51 inlet; +#X obj 70 132 *~; +#X obj 70 156 outlet~; +#X obj 139 80 expr 1 - $f1; +#X obj 140 132 *~; +#X obj 140 156 outlet~; +#X connect 0 0 2 0; +#X connect 0 0 5 0; +#X connect 1 0 4 0; +#X connect 1 0 2 1; +#X connect 2 0 3 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X restore 540 91 pd gate~; +#X obj 540 59 osc~ 520; +#X obj 451 59 osc~ 420; +#X text 400 29 Send test signal to main outs; +#X connect 1 0 7 0; +#X connect 2 0 5 0; +#X connect 3 0 6 0; +#X connect 7 0 0 0; +#X connect 8 0 7 1; +#X connect 9 0 2 0; +#X connect 10 0 11 1; +#X connect 10 0 9 1; +#X connect 11 0 3 0; +#X connect 12 0 11 0; +#X connect 13 0 9 0; +#X restore 1786 38 pd tests; +#X obj 976 312 throw~ bartoa_audio_1; +#X obj 946 342 throw~ deegaj_audio_1; +#N canvas 363 307 898 556 karplus_strong 0; +#N canvas 707 129 520 633 strummer 0; +#X obj 110 36 inlet; +#X obj 247 15 inlet; +#X text 290 37 strum speed inlet and default value; +#X obj 72 582 outlet; +#X obj 124 585 outlet; +#X obj 172 591 outlet; +#X obj 217 591 outlet; +#X obj 263 591 outlet; +#X obj 310 591 outlet; +#X obj 110 62 metro 250; +#X obj 110 89 i 0; +#X obj 110 114 + 1; +#X obj 110 315 route 0 1 2 3 4 5 6 7; +#X obj 110 143 % 8; +#X obj 155 106 i; +#X obj 154 195 == 0; +#X obj 110 166 t f f; +#X obj 154 218 route 1; +#X obj 110 357 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 247 71 s \$0-strum_speed; +#X obj 272 353 r \$0-strum_speed; +#X obj 183 520 i 52; +#X obj 109 465 i 40; +#X obj 148 483 i 49; +#X obj 218 538 i 55; +#X obj 257 543 i 59; +#X obj 293 563 i 64; +#N canvas 101 96 589 438 chords 0; +#X obj 249 26 inlet; +#X obj 82 265 outlet; +#X obj 132 265 outlet; +#X obj 180 264 outlet; +#X obj 227 265 outlet; +#X obj 276 266 outlet; +#X obj 330 266 outlet; +#X obj 144 201 unpack f f f f f f; +#X msg 202 125 40 45 52 57 61 64; +#X msg 326 126 43 47 52 55 59 67; +#X msg 81 124 40 47 52 55 59 64; +#X obj 249 52 random 4; +#X obj 250 80 route 0 1 2 3; +#X msg 451 124 42 47 54 59 62 64; +#X text 348 50 randomly choose one of four chords \, and output the +midi pitches for each of the six strings.; +#X connect 0 0 11 0; +#X connect 7 0 1 0; +#X connect 7 1 2 0; +#X connect 7 2 3 0; +#X connect 7 3 4 0; +#X connect 7 4 5 0; +#X connect 7 5 6 0; +#X connect 8 0 7 0; +#X connect 9 0 7 0; +#X connect 10 0 7 0; +#X connect 11 0 12 0; +#X connect 12 0 10 0; +#X connect 12 1 8 0; +#X connect 12 2 9 0; +#X connect 12 3 13 0; +#X connect 13 0 7 0; +#X restore 28 320 pd chords; +#X text 152 162 Generate a simple 8 note strum pattern; +#X text 209 220 Every 8 notes \, randomly change chords; +#X obj 247 39 i 15; +#X obj 148 415 del 15; +#X obj 183 437 del 15; +#X obj 218 458 del 15; +#X obj 257 480 del 15; +#X obj 293 512 del 15; +#X connect 0 0 9 0; +#X connect 1 0 30 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 13 0; +#X connect 12 0 18 0; +#X connect 12 3 18 0; +#X connect 12 5 18 0; +#X connect 12 7 18 0; +#X connect 13 0 14 0; +#X connect 13 0 16 0; +#X connect 14 0 10 1; +#X connect 15 0 17 0; +#X connect 16 0 12 0; +#X connect 16 1 15 0; +#X connect 17 0 27 0; +#X connect 18 0 22 0; +#X connect 18 0 31 0; +#X connect 20 0 31 1; +#X connect 20 0 32 1; +#X connect 20 0 33 1; +#X connect 20 0 34 1; +#X connect 20 0 35 1; +#X connect 21 0 5 0; +#X connect 22 0 3 0; +#X connect 23 0 4 0; +#X connect 24 0 6 0; +#X connect 25 0 7 0; +#X connect 26 0 8 0; +#X connect 27 0 22 0; +#X connect 27 1 23 0; +#X connect 27 2 21 0; +#X connect 27 3 24 0; +#X connect 27 4 25 0; +#X connect 27 5 26 0; +#X connect 30 0 19 0; +#X connect 31 0 23 0; +#X connect 31 0 32 0; +#X connect 32 0 21 0; +#X connect 32 0 33 0; +#X connect 33 0 24 0; +#X connect 33 0 34 0; +#X connect 34 0 25 0; +#X connect 34 0 35 0; +#X connect 35 0 26 0; +#X restore 334 153 pd strummer; +#X obj 496 187 hsl 180 15 1 40 0 0 empty \$0-width_ctrl width -2 -8 +1 10 -262144 -1 -1 6100 1; +#X obj 495 218 hsl 180 15 0.9 0.999 0 0 empty \$0-decay_ctrl decay +-2 -8 1 10 -262144 -1 -1 13977 1; +#X obj 495 248 hsl 180 15 100 8000 0 0 empty \$0-cutoff_ctrl cutoff +-2 -8 1 10 -262144 -1 -1 12589 1; +#N canvas 287 351 847 508 plucked_instrument 0; +#X obj 22 63 inlet; +#X obj 92 60 inlet; +#X obj 175 60 inlet; +#X obj 241 59 inlet; +#X obj 311 60 inlet; +#X obj 374 63 inlet; +#X obj 473 65 inlet; +#X obj 515 65 inlet; +#X obj 557 65 inlet; +#X text 17 16 6 inlets representing the six strings of our instrument. +A midi note integer message to any inlet excites that particular string +at the specified pitch.; +#X text 469 46 Width \, decay \, and cutoff inlets; +#X obj 21 165 karpluck~; +#X obj 21 373 outlet~; +#X obj 21 349 *~ 0.25; +#X obj 473 128 s \$0-width; +#X obj 516 107 s \$0-decay; +#X obj 557 87 s \$0-cutoff; +#X obj 106 87 r \$0-width; +#X obj 188 89 r \$0-decay; +#X obj 264 90 r \$0-cutoff; +#X obj 92 181 karpluck~; +#X obj 175 203 karpluck~; +#X obj 241 224 karpluck~; +#X obj 309 233 karpluck~; +#X obj 374 264 karpluck~; +#X text 334 112 comment; +#X text 73 343 scale the output down by approx 12dB to avoid clipping +; +#X connect 0 0 11 0; +#X connect 1 0 20 0; +#X connect 2 0 21 0; +#X connect 3 0 22 0; +#X connect 4 0 23 0; +#X connect 5 0 24 0; +#X connect 6 0 14 0; +#X connect 7 0 15 0; +#X connect 8 0 16 0; +#X connect 11 0 13 0; +#X connect 13 0 12 0; +#X connect 17 0 11 1; +#X connect 17 0 20 1; +#X connect 17 0 21 1; +#X connect 17 0 22 1; +#X connect 17 0 23 1; +#X connect 17 0 24 1; +#X connect 18 0 11 2; +#X connect 18 0 20 2; +#X connect 18 0 21 2; +#X connect 18 0 22 2; +#X connect 18 0 23 2; +#X connect 18 0 24 2; +#X connect 19 0 11 3; +#X connect 19 0 20 3; +#X connect 19 0 22 3; +#X connect 19 0 21 3; +#X connect 19 0 23 3; +#X connect 19 0 24 3; +#X connect 20 0 13 0; +#X connect 21 0 13 0; +#X connect 22 0 13 0; +#X connect 23 0 13 0; +#X connect 24 0 13 0; +#X restore 329 281 pd plucked_instrument; +#X obj 411 118 hsl 180 15 1 250 0 0 empty \$0-strum_speed_ctrl strum_speed +-2 -8 1 10 -262144 -1 -1 6700 1; +#X obj 334 118 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 786 117 loadbang; +#X msg 781 147 0.995; +#X msg 824 147 5700; +#X obj 751 241 s \$0-width_ctrl; +#X obj 781 217 s \$0-decay_ctrl; +#X obj 824 196 s \$0-cutoff_ctrl; +#X text 83 112 Click here to start strummer -->; +#X msg 751 147 8; +#X obj 857 173 s \$0-strum_speed_ctrl; +#X msg 864 148 8; +#X obj 329 342 outlet~; +#X connect 0 0 4 0; +#X connect 0 1 4 1; +#X connect 0 2 4 2; +#X connect 0 3 4 3; +#X connect 0 4 4 4; +#X connect 0 5 4 5; +#X connect 1 0 4 6; +#X connect 2 0 4 7; +#X connect 3 0 4 8; +#X connect 4 0 17 0; +#X connect 5 0 0 1; +#X connect 6 0 0 0; +#X connect 7 0 14 0; +#X connect 7 0 8 0; +#X connect 7 0 9 0; +#X connect 7 0 16 0; +#X connect 8 0 11 0; +#X connect 9 0 12 0; +#X connect 14 0 10 0; +#X connect 16 0 15 0; +#X restore 516 291 pd karplus_strong; +#X text 494 270 "Guitar" String model; +#X obj 516 315 throw~ hamilr4_audio_1; +#X connect 7 0 9 0; +#X connect 8 0 12 0; +#X connect 10 0 11 0; +#X connect 12 0 10 0; +#X connect 17 0 19 0; +#X connect 17 1 20 0; +#X connect 18 0 19 0; +#X connect 18 1 20 0; +#X connect 21 0 17 0; +#X connect 22 0 23 1; +#X connect 22 0 21 1; +#X connect 23 0 18 0; +#X connect 24 0 21 0; +#X connect 25 0 23 0; +#X connect 31 0 33 0; diff --git a/karpluck~.pd b/karpluck~.pd new file mode 100755 index 0000000..f5f3c6c --- /dev/null +++ b/karpluck~.pd @@ -0,0 +1,79 @@ +#N canvas 541 348 726 517 10; +#X obj -38 11 inlet midi_note; +#X obj 44 99 inlet width; +#X obj 77 185 inlet decay; +#X obj 156 186 inlet cutoff; +#X obj -37 295 outlet~; +#N canvas 353 578 194 221 excitation~ 1; +#X obj 31 18 inlet midi_note; +#X obj 101 39 inlet width; +#X obj 30 120 vline~; +#X obj 100 123 noise~; +#X obj 30 154 *~; +#X obj 30 181 outlet~; +#X obj 30 44 bang; +#X obj 74 69 del 5; +#X msg 30 87 1 1; +#X msg 74 90 0 1; +#X connect 0 0 6 0; +#X connect 1 0 7 1; +#X connect 2 0 4 0; +#X connect 3 0 4 1; +#X connect 4 0 5 0; +#X connect 6 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 9 0; +#X connect 8 0 2 0; +#X connect 9 0 2 0; +#X restore -37 123 pd excitation~; +#N canvas 97 389 669 524 body~ 0; +#X obj 75 232 inlet~; +#X obj 221 274 outlet~; +#X obj 376 -12 block~ 1; +#X obj 75 270 delwrite~ \$0-dl 1000; +#X obj 99 131 delread~ \$0-dl 12; +#X obj 221 179 lop~ 4000; +#X obj 221 226 *~ 0.99; +#X obj 99 -22 mtof; +#X obj 99 8 t b f; +#X obj 99 69 /; +#X msg 92 43 1; +#X obj 99 99 * 1000; +#X obj 99 -55 inlet midi_note; +#X obj 260 202 inlet decay; +#X obj 272 154 inlet cutoff; +#X text 375 -55 Block size needs to be 1 sample for this subpatch to +ensure correct tuning and operation for delay line feedback; +#X text 151 70 Convert a midi note into the required delay line length +(in ms) to generate said pitch.; +#X connect 0 0 3 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 6 0 1 0; +#X connect 6 0 3 0; +#X connect 7 0 8 0; +#X connect 8 0 10 0; +#X connect 8 1 9 1; +#X connect 9 0 11 0; +#X connect 10 0 9 0; +#X connect 11 0 4 0; +#X connect 12 0 7 0; +#X connect 13 0 6 1; +#X connect 14 0 5 1; +#X restore -37 245 pd body~; +#X obj -38 35 s \$0-midi_note; +#X obj -37 80 r \$0-midi_note; +#X obj -22 171 r \$0-midi_note; +#X text 55 121 excitation generates a short noise burst the specied +width; +#X text 22 245 body filters the excitation noise in a pitch specific +delay line; +#X connect 0 0 7 0; +#X connect 1 0 5 1; +#X connect 2 0 6 2; +#X connect 3 0 6 3; +#X connect 5 0 6 0; +#X connect 6 0 4 0; +#X connect 8 0 5 0; +#X connect 9 0 6 1; +#X coords 0 0 1 1 200 100 0; diff --git a/list-abs/LICENSE.txt b/list-abs/LICENSE.txt new file mode 100755 index 0000000..222809e --- /dev/null +++ b/list-abs/LICENSE.txt @@ -0,0 +1,30 @@ +This software is copyrighted by Frank Barknecht and others. The following +terms (the "Standard Improved BSD License") apply to all files associated with +the software unless explicitly disclaimed in individual files: + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. diff --git a/list-abs/Makefile b/list-abs/Makefile new file mode 100755 index 0000000..ce1a5f0 --- /dev/null +++ b/list-abs/Makefile @@ -0,0 +1,351 @@ +## Pd library template version 1.0.7 +# For instructions on how to use this template, see: +# http://puredata.info/docs/developer/MakefileTemplate +LIBRARY_NAME = list-abs + +# add your .c source files, one object per file, to the SOURCES +# variable, help files will be included automatically +SOURCES = + +# list all pd objects (i.e. myobject.pd) files here, and their helpfiles will +# be included automatically +PDOBJECTS = OSCprepend.pd compare-any.pd last-x.pd list-abs.pd list-accum.pd list-add.pd list-apply.pd list-centroid.pd list-clip.pd list-compare.pd list-delete.pd list-dotprod.pd list-drip.pd list-drip2.pd list-dripslow.pd list-emath.pd list-enumerate.pd list-equalize.pd list-extend.pd list-fifo-delim.pd list-fifo.pd list-filter.pd list-find.pd list-geometric-mean.pd list-group.pd list-harmonic-mean.pd list-idx.pd list-insert.pd list-inter.pd list-inter-many.pd list-iter.pd list-l2s.pd list-lastx.pd list-len.pd list-lifo.pd list-makefilename.pd list-map.pd list-map2.pd list-math.pd list-mean.pd list-minmax.pd list-moses.pd list-mult.pd list-normalize.pd list-nth.pd list-onearg.pd list-pad.pd list-random.pd list-rdrip.pd list-reduce.pd list-replace.pd list-rev.pd list-rot.pd list-round.pd list-sect.pd list-seek.pd list-shellsort.pd list-sieve.pd list-sort.pd list-splat.pd list-sub.pd list-swap.pd list-tabdump.pd list-unique.pd list-unitvec.pd list-wrandom.pd prepent.pd sroute.pd take-two.pd triple-scale.pd list-invint.pd list-makefilename-a.pd list-stddev.pd + +# example patches and related files, in the 'examples' subfolder +EXAMPLES = list-demux.pd list-inter-example.pd list-inter-gem-example.pd list-sieve-example-2.pd + +# manuals and related files, in the 'manual' subfolder +MANUAL = + +# if you want to include any other files in the source and binary tarballs, +# list them here. This can be anything from header files, test patches, +# documentation, etc. README.txt and LICENSE.txt are required and therefore +# automatically included +EXTRA_DIST = list-abs-intro.pd list-abs-intro.txt + + + +#------------------------------------------------------------------------------# +# +# things you might need to edit if you are using other C libraries +# +#------------------------------------------------------------------------------# + +# -I"$(PD_INCLUDE)/pd" supports the header location for 0.43 +CFLAGS = -I"$(PD_INCLUDE)/pd" -Wall -W -g +LDFLAGS = +LIBS = + +#------------------------------------------------------------------------------# +# +# you shouldn't need to edit anything below here, if we did it right :) +# +#------------------------------------------------------------------------------# + +# get library version from meta file +LIBRARY_VERSION = $(shell sed -n 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' $(LIBRARY_NAME)-meta.pd) + +CFLAGS += -DPD -DVERSION='"$(LIBRARY_VERSION)"' + +PD_INCLUDE = $(PD_PATH)/include +# where to install the library, overridden below depending on platform +prefix = /usr/local +libdir = $(prefix)/lib +pkglibdir = $(libdir)/pd-externals +objectsdir = $(pkglibdir) + +INSTALL = install +INSTALL_PROGRAM = $(INSTALL) -p -m 644 +INSTALL_DATA = $(INSTALL) -p -m 644 +INSTALL_DIR = $(INSTALL) -p -m 755 -d + +ALLSOURCES := $(SOURCES) $(SOURCES_android) $(SOURCES_cygwin) $(SOURCES_macosx) \ + $(SOURCES_iphoneos) $(SOURCES_linux) $(SOURCES_windows) + +DISTDIR=$(LIBRARY_NAME)-$(LIBRARY_VERSION) +ORIGDIR=pd-$(LIBRARY_NAME:~=)_$(LIBRARY_VERSION) + +UNAME := $(shell uname -s) +ifeq ($(UNAME),Darwin) + CPU := $(shell uname -p) + ifeq ($(CPU),arm) # iPhone/iPod Touch + SOURCES += $(SOURCES_iphoneos) + EXTENSION = pd_darwin + OS = iphoneos + PD_PATH = /Applications/Pd-extended.app/Contents/Resources + IPHONE_BASE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin + CC=$(IPHONE_BASE)/gcc + CPP=$(IPHONE_BASE)/cpp + CXX=$(IPHONE_BASE)/g++ + ISYSROOT = -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk + IPHONE_CFLAGS = -miphoneos-version-min=3.0 $(ISYSROOT) -arch armv6 + OPT_CFLAGS = -fast -funroll-loops -fomit-frame-pointer + CFLAGS := $(IPHONE_CFLAGS) $(OPT_CFLAGS) $(CFLAGS) + LDFLAGS += -arch armv6 -bundle -undefined dynamic_lookup $(ISYSROOT) + LIBS += -lc + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) + else # Mac OS X + SOURCES += $(SOURCES_macosx) + EXTENSION = pd_darwin + OS = macosx + PD_PATH = /Applications/Pd-extended.app/Contents/Resources + OPT_CFLAGS = -ftree-vectorize -ftree-vectorizer-verbose=2 -fast +# build universal 32-bit on 10.4 and 32/64 on newer + ifeq ($(shell uname -r | sed 's|\([0-9][0-9]*\)\.[0-9][0-9]*\.[0-9][0-9]*|\1|'), 8) + FAT_FLAGS = -arch ppc -arch i386 -mmacosx-version-min=10.4 + else + FAT_FLAGS = -arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.4 + SOURCES += $(SOURCES_iphoneos) + endif + CFLAGS += $(FAT_FLAGS) -fPIC -I/sw/include + LDFLAGS += $(FAT_FLAGS) -bundle -undefined dynamic_lookup -L/sw/lib + # if the 'pd' binary exists, check the linking against it to aid with stripping + LDFLAGS += $(shell test -e $(PD_PATH)/bin/pd && echo -bundle_loader $(PD_PATH)/bin/pd) + LIBS += -lc + STRIP = strip -x + DISTBINDIR=$(DISTDIR)-$(OS) +# install into ~/Library/Pd on Mac OS X since /usr/local isn't used much + pkglibdir=$(HOME)/Library/Pd + endif +endif +# Tho Android uses Linux, we use this fake uname to provide an easy way to +# setup all this things needed to cross-compile for Android using the NDK +ifeq ($(UNAME),ANDROID) + CPU := arm + SOURCES += $(SOURCES_android) + EXTENSION = pd_linux + OS = android + PD_PATH = /usr + NDK_BASE=/usr/local/android-ndk + NDK_SYSROOT=$(NDK_BASE)/platforms/android-5/arch-arm + NDK_TOOLCHAIN=$(NDK_BASE)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 + CC=$(NDK_TOOLCHAIN)/bin/arm-linux-androideabi-gcc + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += -fPIC -I$(NDK_SYSROOT)/usr/include + LDFLAGS += -Wl,--export-dynamic -L$(NDK_SYSROOT)/usr/lib -shared -fPIC + LIBS += -lc + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),Linux) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += -fPIC + LDFLAGS += -Wl,--export-dynamic -shared -fPIC + LIBS += -lc + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU) + # GNU/Hurd, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += -fPIC + LDFLAGS += -Wl,--export-dynamic -shared -fPIC + LIBS += -lc + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq ($(UNAME),GNU/kFreeBSD) + # Debian GNU/kFreeBSD, should work like GNU/Linux for basically all externals + CPU := $(shell uname -m) + SOURCES += $(SOURCES_linux) + EXTENSION = pd_linux + OS = linux + PD_PATH = /usr + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += -fPIC + LDFLAGS += -Wl,--export-dynamic -shared -fPIC + LIBS += -lc + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS)-$(shell uname -m) +endif +ifeq (CYGWIN,$(findstring CYGWIN,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_cygwin) + EXTENSION = dll + OS = cygwin + PD_PATH = $(cygpath $(PROGRAMFILES))/pd + OPT_CFLAGS = -O6 -funroll-loops -fomit-frame-pointer + CFLAGS += + LDFLAGS += -Wl,--export-dynamic -shared -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" + LIBS += -lc -lpd + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif +ifeq (MINGW,$(findstring MINGW,$(UNAME))) + CPU := $(shell uname -m) + SOURCES += $(SOURCES_windows) + EXTENSION = dll + OS = windows + PD_PATH = $(shell cd "$(PROGRAMFILES)"/pd && pwd) + OPT_CFLAGS = -O3 -funroll-loops -fomit-frame-pointer + CFLAGS += -mms-bitfields + LDFLAGS += -s -shared -Wl,--enable-auto-import + LIBS += -L"$(PD_PATH)/src" -L"$(PD_PATH)/bin" -L"$(PD_PATH)/obj" -lpd -lwsock32 -lkernel32 -luser32 -lgdi32 + STRIP = strip --strip-unneeded -R .note -R .comment + DISTBINDIR=$(DISTDIR)-$(OS) +endif + +# in case somebody manually set the HELPPATCHES above +HELPPATCHES ?= $(SOURCES:.c=-help.pd) $(PDOBJECTS:.pd=-help.pd) + +CFLAGS += $(OPT_CFLAGS) + + +.PHONY = install libdir_install single_install install-doc install-exec install-examples install-manual clean dist etags $(LIBRARY_NAME) + +all: $(SOURCES:.c=.$(EXTENSION)) + +%.o: %.c + $(CC) $(CFLAGS) -o "$*.o" -c "$*.c" + +%.$(EXTENSION): %.o + $(CC) $(LDFLAGS) -o "$*.$(EXTENSION)" "$*.o" $(LIBS) + chmod a-x "$*.$(EXTENSION)" + +# this links everything into a single binary file +$(LIBRARY_NAME): $(SOURCES:.c=.o) $(LIBRARY_NAME).o + $(CC) $(LDFLAGS) -o $(LIBRARY_NAME).$(EXTENSION) $(SOURCES:.c=.o) $(LIBRARY_NAME).o $(LIBS) + chmod a-x $(LIBRARY_NAME).$(EXTENSION) + +install: libdir_install + +# The meta and help files are explicitly installed to make sure they are +# actually there. Those files are not optional, then need to be there. +libdir_install: $(SOURCES:.c=.$(EXTENSION)) install-doc install-examples install-manual + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES))" || (\ + $(INSTALL_PROGRAM) $(SOURCES:.c=.$(EXTENSION)) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) && \ + $(STRIP) $(addprefix $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/,$(SOURCES:.c=.$(EXTENSION)))) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + +# install library linked as single binary +single_install: $(LIBRARY_NAME) install-doc install-exec + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_PROGRAM) $(LIBRARY_NAME).$(EXTENSION) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(STRIP) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/$(LIBRARY_NAME).$(EXTENSION) + +install-doc: + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + test -z "$(strip $(SOURCES) $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(HELPPATCHES) \ + $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME) + $(INSTALL_DATA) README.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/README.txt + $(INSTALL_DATA) LICENSE.txt $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/LICENSE.txt + +install-examples: + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/examples; \ + done + +install-manual: + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DESTDIR)$(objectsdir)/$(LIBRARY_NAME)/manual; \ + done + + +clean: + -rm -f -- $(SOURCES:.c=.o) $(SOURCES_LIB:.c=.o) + -rm -f -- $(SOURCES:.c=.$(EXTENSION)) + -rm -f -- $(LIBRARY_NAME).o + -rm -f -- $(LIBRARY_NAME).$(EXTENSION) + +distclean: clean + -rm -f -- $(DISTBINDIR).tar.gz + -rm -rf -- $(DISTBINDIR) + -rm -f -- $(DISTDIR).tar.gz + -rm -rf -- $(DISTDIR) + -rm -f -- $(ORIGDIR).tar.gz + -rm -rf -- $(ORIGDIR) + + +$(DISTBINDIR): + $(INSTALL_DIR) $(DISTBINDIR) + +libdir: all $(DISTBINDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTBINDIR) + $(INSTALL_DATA) $(SOURCES) $(DISTBINDIR) + $(INSTALL_DATA) $(HELPPATCHES) $(DISTBINDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTBINDIR) +# tar --exclude-vcs -czpf $(DISTBINDIR).tar.gz $(DISTBINDIR) + +$(DISTDIR): + $(INSTALL_DIR) $(DISTDIR) + +$(ORIGDIR): + $(INSTALL_DIR) $(ORIGDIR) + +dist: $(DISTDIR) + $(INSTALL_DATA) Makefile $(DISTDIR) + $(INSTALL_DATA) README.txt $(DISTDIR) + $(INSTALL_DATA) LICENSE.txt $(DISTDIR) + $(INSTALL_DATA) $(LIBRARY_NAME)-meta.pd $(DISTDIR) + test -z "$(strip $(ALLSOURCES))" || \ + $(INSTALL_DATA) $(ALLSOURCES) $(DISTDIR) + test -z "$(strip $(PDOBJECTS))" || \ + $(INSTALL_DATA) $(PDOBJECTS) $(DISTDIR) + test -z "$(strip $(HELPPATCHES))" || \ + $(INSTALL_DATA) $(HELPPATCHES) $(DISTDIR) + test -z "$(strip $(EXTRA_DIST))" || \ + $(INSTALL_DATA) $(EXTRA_DIST) $(DISTDIR) + test -z "$(strip $(EXAMPLES))" || \ + $(INSTALL_DIR) $(DISTDIR)/examples && \ + for file in $(EXAMPLES); do \ + $(INSTALL_DATA) examples/$$file $(DISTDIR)/examples; \ + done + test -z "$(strip $(MANUAL))" || \ + $(INSTALL_DIR) $(DISTDIR)/manual && \ + for file in $(MANUAL); do \ + $(INSTALL_DATA) manual/$$file $(DISTDIR)/manual; \ + done + tar --exclude-vcs -czpf $(DISTDIR).tar.gz $(DISTDIR) + +# make a Debian source package +dpkg-source: + debclean + make distclean dist + mv $(DISTDIR) $(ORIGDIR) + tar --exclude-vcs -czpf ../$(ORIGDIR).orig.tar.gz $(ORIGDIR) + rm -f -- $(DISTDIR).tar.gz + rm -rf -- $(DISTDIR) $(ORIGDIR) + cd .. && dpkg-source -b $(LIBRARY_NAME) + +etags: + etags *.h $(SOURCES) ../../pd/src/*.[ch] /usr/include/*.h /usr/include/*/*.h + +showsetup: + @echo "CFLAGS: $(CFLAGS)" + @echo "LDFLAGS: $(LDFLAGS)" + @echo "LIBS: $(LIBS)" + @echo "PD_INCLUDE: $(PD_INCLUDE)" + @echo "PD_PATH: $(PD_PATH)" + @echo "objectsdir: $(objectsdir)" + @echo "LIBRARY_NAME: $(LIBRARY_NAME)" + @echo "LIBRARY_VERSION: $(LIBRARY_VERSION)" + @echo "SOURCES: $(SOURCES)" + @echo "PDOBJECTS: $(PDOBJECTS)" + @echo "ALLSOURCES: $(ALLSOURCES)" + @echo "UNAME: $(UNAME)" + @echo "CPU: $(CPU)" + @echo "pkglibdir: $(pkglibdir)" + @echo "DISTDIR: $(DISTDIR)" + @echo "ORIGDIR: $(ORIGDIR)" diff --git a/list-abs/OSCprepend-help.pd b/list-abs/OSCprepend-help.pd new file mode 100755 index 0000000..939b6f9 --- /dev/null +++ b/list-abs/OSCprepend-help.pd @@ -0,0 +1,41 @@ +#N canvas 0 31 565 415 10; +#X msg 121 238 /a 1 c 3; +#X obj 121 350 print OSC; +#X text 52 262 ignored:; +#X text 72 238 okay:; +#X obj 121 323 OSCprepend /synth/ha; +#X msg 256 231 /osc; +#X text 304 230 change OSC-messages; +#X msg 256 257 /freq/1; +#X obj 104 31 cnv 15 220 30 empty empty OSCprepend 20 12 0 14 -233017 +-66577 0; +#X text 98 76 "Prepends" first argument to an OSC message list.; +#X text 106 140 Right inlet lets you change the prepended argument +; +#X msg 121 262 900 2 3 4 a b c; +#X text 104 103 Example: with ARG_1 being "/synth" the message "/set +x 1 2" will become "/synth/set x 1 2".; +#X text 107 166 Lists not starting with a symbol are filtered out. +; +#X msg 325 285 1; +#X text 359 287 oops...; +#X symbolatom 324 260 10 0 0 1 type-here - -; +#N canvas 462 89 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION "Prepends" first argument to an OSC message +list; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 anything; +#X text 12 105 OUTLET_0 anything; +#X restore 504 381 pd META; +#X connect 0 0 4 0; +#X connect 4 0 1 0; +#X connect 5 0 4 1; +#X connect 7 0 4 1; +#X connect 11 0 4 0; +#X connect 14 0 4 1; +#X connect 16 0 4 1; diff --git a/list-abs/OSCprepend.pd b/list-abs/OSCprepend.pd new file mode 100755 index 0000000..efe01f9 --- /dev/null +++ b/list-abs/OSCprepend.pd @@ -0,0 +1,30 @@ +#N canvas 511 144 636 444 10; +#X obj 45 131 list split 1; +#X msg 94 90 /a 1 2 3; +#X obj 45 276 list append; +#X obj 45 299 list trim; +#X obj 45 239 makefilename \$1%s; +#X obj 45 188 route symbol; +#X obj 45 89 inlet; +#X obj 45 319 outlet; +#X text 215 99 "Prepends" first argument to an OSC message list.; +#X text 221 126 Example: with \$1 being "/synth" the message "/set +x 1 2" will become "/synth/set x 1 2".; +#X text 223 163 Right inlet lets you change the prepended argument +; +#X msg 146 209 set \$1%s; +#X obj 146 185 symbol; +#X obj 146 163 inlet; +#X text 224 189 Lists not starting with a symbol are filtered out! +; +#X connect 0 0 5 0; +#X connect 0 1 2 1; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 7 0; +#X connect 4 0 2 0; +#X connect 5 0 4 0; +#X connect 6 0 0 0; +#X connect 11 0 4 0; +#X connect 12 0 11 0; +#X connect 13 0 12 0; diff --git a/list-abs/README.txt b/list-abs/README.txt new file mode 100755 index 0000000..5fbf0ab --- /dev/null +++ b/list-abs/README.txt @@ -0,0 +1,10 @@ +list-abs +-------- + +A collection of list-processing abstractions for Pd. + +For a list of included objects open list-abs-intro.pd or list-abs-intro.txt + +Maintainer: Frank Barknecht + +-- diff --git a/list-abs/compare-any-help.pd b/list-abs/compare-any-help.pd new file mode 100755 index 0000000..0866166 --- /dev/null +++ b/list-abs/compare-any-help.pd @@ -0,0 +1,50 @@ +#N canvas 0 26 528 377 10; +#X msg 246 131 symbol x; +#X msg 255 154 symbol y; +#X msg 116 137 symbol x; +#X msg 125 160 symbol y; +#X obj 96 254 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 236 109 2.3; +#X msg 106 114 2.3; +#X msg 131 180 i; +#X msg 140 201 j; +#X msg 258 175 i; +#X msg 264 196 j; +#X obj 96 278 print; +#X text 37 14 [compare-any]; +#X text 81 37 Test if two anythings are the same. Out: 1 if equal \, +0 if not equal.; +#X msg 96 92 1; +#X msg 226 87 1; +#X obj 96 231 compare-any; +#X msg 221 66 0; +#X msg 86 71 0; +#N canvas 520 35 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 135 AUTHOR Frank Barknecht; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 75 INLET_0 anything; +#X text 12 95 INLET_1 anything; +#X text 12 115 OUTLET_0 float; +#X text 12 5 KEYWORDS control anything_op; +#X text 12 45 DESCRIPTION test if two anythings are the same. Out: +1 if equal \, 0 if not equal; +#X restore 474 347 pd META; +#X connect 0 0 16 1; +#X connect 1 0 16 1; +#X connect 2 0 16 0; +#X connect 3 0 16 0; +#X connect 4 0 11 0; +#X connect 5 0 16 1; +#X connect 6 0 16 0; +#X connect 7 0 16 0; +#X connect 8 0 16 0; +#X connect 9 0 16 1; +#X connect 10 0 16 1; +#X connect 14 0 16 0; +#X connect 15 0 16 1; +#X connect 16 0 4 0; +#X connect 17 0 16 1; +#X connect 18 0 16 0; diff --git a/list-abs/compare-any.pd b/list-abs/compare-any.pd new file mode 100755 index 0000000..8698da0 --- /dev/null +++ b/list-abs/compare-any.pd @@ -0,0 +1,54 @@ +#N canvas 460 148 653 646 10; +#X obj 118 28 inlet; +#X obj 118 451 outlet; +#X obj 118 336 ==; +#X obj 118 358 select 1; +#N canvas 272 259 450 300 demux 0; +#X obj 76 87 inlet; +#X obj 169 86 inlet; +#X obj 76 145 list prepend 0; +#X obj 76 186 route 0 1; +#X obj 76 242 outlet; +#X obj 105 213 outlet; +#X connect 0 0 2 0; +#X connect 1 0 2 1; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 1 5 0; +#X restore 118 230 pd demux; +#X msg 169 207 0; +#X msg 200 206 1; +#X obj 118 295 route float; +#X obj 219 293 route symbol; +#X obj 359 199 print HUH?; +#X obj 219 272 list; +#X obj 238 164 route float symbol; +#X obj 238 136 list; +#X msg 118 423 1; +#X msg 190 418 0; +#X obj 238 28 inlet; +#X obj 219 356 select [DUMMY-SYMBOL]; +#X connect 0 0 4 0; +#X connect 2 0 3 0; +#X connect 3 0 13 0; +#X connect 3 1 14 0; +#X connect 4 0 7 0; +#X connect 4 1 10 0; +#X connect 5 0 4 1; +#X connect 6 0 4 1; +#X connect 7 0 2 0; +#X connect 7 1 14 0; +#X connect 8 0 16 0; +#X connect 8 1 14 0; +#X connect 10 0 8 0; +#X connect 11 0 2 1; +#X connect 11 0 5 0; +#X connect 11 1 6 0; +#X connect 11 1 16 1; +#X connect 11 2 9 0; +#X connect 12 0 11 0; +#X connect 13 0 1 0; +#X connect 14 0 1 0; +#X connect 15 0 12 0; +#X connect 16 0 13 0; +#X connect 16 1 14 0; diff --git a/list-abs/examples/list-demux.pd b/list-abs/examples/list-demux.pd new file mode 100755 index 0000000..7c98565 --- /dev/null +++ b/list-abs/examples/list-demux.pd @@ -0,0 +1,18 @@ +#N canvas 0 0 450 300 10; +#X obj 131 118 list prepend 0; +#X obj 224 95 hradio 15 1 0 4 empty empty empty 0 -6 0 8 -262144 -1 +-1 3; +#X obj 131 146 route 0 1 2 3; +#X obj 131 251 print d1; +#X obj 195 177 print d4; +#X obj 174 202 print d3; +#X obj 152 224 print d2; +#X floatatom 131 81 5 0 0 0 - - -; +#X text 111 39 "demux" with lists; +#X connect 0 0 2 0; +#X connect 1 0 0 1; +#X connect 2 0 3 0; +#X connect 2 1 6 0; +#X connect 2 2 5 0; +#X connect 2 3 4 0; +#X connect 7 0 0 0; diff --git a/list-abs/examples/list-inter-example.pd b/list-abs/examples/list-inter-example.pd new file mode 100755 index 0000000..e1fd14d --- /dev/null +++ b/list-abs/examples/list-inter-example.pd @@ -0,0 +1,91 @@ +#N canvas 331 120 783 579 10; +#X obj 118 233 list-inter; +#X obj 118 166 list split 1; +#X obj 201 234 t l; +#X obj 118 193 expr 1-$f1; +#X obj 461 377 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 9377 1; +#X obj 118 303 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 6198 1; +#X obj 157 303 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 3953 1; +#X obj 197 303 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 4387 1; +#X floatatom 118 277 5 0 0 0 - - -; +#X floatatom 157 277 5 0 0 0 - - -; +#X floatatom 197 277 5 0 0 0 - - -; +#X obj 118 255 unpack 0 0 0; +#X obj 461 400 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 2363 1; +#X obj 461 423 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 960 1; +#X obj 447 143 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 12700 1; +#X obj 447 166 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 3200 1; +#X obj 447 189 hsl 128 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 1300 1; +#X msg 459 107 1; +#X msg 118 136 \$1 5 2 3 \, \$2 4 5 6 \, \$3 6 7 1; +#N canvas 0 0 753 456 normalize 0; +#X obj 369 105 pack 0 0 0; +#X obj 332 175 list-math /; +#X obj 438 76 t b f; +#X obj 391 78 t b f; +#X obj 403 154 list-accum; +#X obj 361 135 t a a; +#X obj 330 202 unpack 0 0 0; +#X msg 305 259 set \$1; +#X msg 365 260 set \$1; +#X msg 437 269 set \$1; +#X obj 360 47 inlet; +#X obj 403 48 inlet; +#X obj 450 49 inlet; +#X obj 328 327 outlet; +#X obj 380 328 outlet; +#X obj 438 324 outlet; +#X obj 190 246 outlet; +#X connect 0 0 5 0; +#X connect 1 0 6 0; +#X connect 1 0 16 0; +#X connect 2 0 0 0; +#X connect 2 1 0 2; +#X connect 3 0 0 0; +#X connect 3 1 0 1; +#X connect 4 0 1 1; +#X connect 5 0 1 0; +#X connect 5 1 4 0; +#X connect 6 0 7 0; +#X connect 6 1 8 0; +#X connect 6 2 9 0; +#X connect 7 0 13 0; +#X connect 8 0 14 0; +#X connect 9 0 15 0; +#X connect 10 0 0 0; +#X connect 11 0 3 0; +#X connect 12 0 2 0; +#X restore 342 339 pd normalize; +#X obj 342 369 s \$0-list; +#X obj 118 107 r \$0-list; +#X connect 0 0 11 0; +#X connect 0 0 2 0; +#X connect 1 0 3 0; +#X connect 1 1 0 1; +#X connect 2 0 0 2; +#X connect 3 0 0 0; +#X connect 8 0 5 0; +#X connect 9 0 6 0; +#X connect 10 0 7 0; +#X connect 11 0 8 0; +#X connect 11 1 9 0; +#X connect 11 2 10 0; +#X connect 14 0 19 0; +#X connect 15 0 19 1; +#X connect 16 0 19 2; +#X connect 17 0 14 0; +#X connect 18 0 1 0; +#X connect 19 0 20 0; +#X connect 19 1 4 0; +#X connect 19 2 12 0; +#X connect 19 3 13 0; +#X connect 21 0 18 0; diff --git a/list-abs/examples/list-inter-gem-example.pd b/list-abs/examples/list-inter-gem-example.pd new file mode 100755 index 0000000..209daa2 --- /dev/null +++ b/list-abs/examples/list-inter-gem-example.pd @@ -0,0 +1,100 @@ +#N canvas 402 9 678 693 10; +#X obj 459 490 gemwin; +#X msg 459 452 reset \, create \, 1; +#X msg 488 469 0 \, destroy; +#X obj 57 199 translateXYZ; +#X obj 58 161 gemhead; +#X obj 48 381 gemhead; +#X obj 249 202 translateXYZ; +#X obj 248 167 gemhead; +#X obj 426 203 translateXYZ; +#X obj 425 168 gemhead; +#X obj 151 313 t b a; +#X obj 152 338 f; +#X obj 90 99 hsl 128 15 0 1 0 0 empty empty factor_(0-1) -2 -6 0 10 +-262144 -1 -1 7100 1; +#X obj 377 105 hsl 128 15 0 1 0 0 empty empty factor_(0-1) -2 -6 0 +10 -262144 -1 -1 7000 1; +#X obj 253 114 t b b b; +#X msg 259 93 bang; +#X obj 97 290 list-inter; +#X obj 163 357 list-inter; +#X obj 62 234 color 1 0 0; +#X obj 248 242 color 0 1 0; +#X obj 422 246 color 0 0 1; +#X obj 54 491 color 1 1 1; +#X obj 483 170 unpack 0 0 0 0 0; +#X obj 306 169 unpack 0 0 0 0 0; +#X obj 116 163 unpack 0 0 0 0 0; +#X obj 154 195 pack 0 0 0; +#X msg 309 142 3 1 0 1 0; +#X obj 336 218 pack 0 0 0; +#X obj 519 205 pack 0 0 0; +#X obj 106 383 unpack 0 0 0 0 0; +#X obj 187 423 pack 0 0 0; +#X msg 487 147 -2 -3 1 0.3 0.5; +#X msg 119 135 -1 2 1 0 0; +#X obj 57 264 circle 0.1; +#X obj 251 277 circle 0.1; +#X obj 420 283 circle 0.1; +#X obj 35 421 translateXYZ 0 0 -0.1; +#X obj 252 72 loadbang; +#X obj 52 511 square 0.2; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 18 0; +#X connect 4 0 3 0; +#X connect 5 0 36 0; +#X connect 6 0 19 0; +#X connect 7 0 6 0; +#X connect 8 0 20 0; +#X connect 9 0 8 0; +#X connect 10 0 11 0; +#X connect 10 1 17 1; +#X connect 11 0 17 0; +#X connect 12 0 16 0; +#X connect 13 0 11 0; +#X connect 14 0 32 0; +#X connect 14 1 26 0; +#X connect 14 2 31 0; +#X connect 15 0 14 0; +#X connect 16 0 10 0; +#X connect 17 0 29 0; +#X connect 18 0 33 0; +#X connect 19 0 34 0; +#X connect 20 0 35 0; +#X connect 21 0 38 0; +#X connect 22 0 8 1; +#X connect 22 1 8 2; +#X connect 22 2 28 0; +#X connect 22 3 28 1; +#X connect 22 4 28 2; +#X connect 23 0 6 1; +#X connect 23 1 6 2; +#X connect 23 2 27 0; +#X connect 23 3 27 1; +#X connect 23 4 27 2; +#X connect 24 0 3 1; +#X connect 24 1 3 2; +#X connect 24 2 25 0; +#X connect 24 3 25 1; +#X connect 24 4 25 2; +#X connect 25 0 18 1; +#X connect 26 0 16 2; +#X connect 26 0 23 0; +#X connect 27 0 19 1; +#X connect 28 0 20 1; +#X connect 29 0 36 1; +#X connect 29 1 36 2; +#X connect 29 2 30 0; +#X connect 29 3 30 1; +#X connect 29 4 30 2; +#X connect 30 0 21 1; +#X connect 31 0 17 2; +#X connect 31 0 22 0; +#X connect 32 0 16 1; +#X connect 32 0 24 0; +#X connect 36 0 21 0; +#X connect 37 0 14 0; +#X connect 37 0 13 0; +#X connect 37 0 12 0; diff --git a/list-abs/examples/list-sieve-example-2.pd b/list-abs/examples/list-sieve-example-2.pd new file mode 100755 index 0000000..c0b762a --- /dev/null +++ b/list-abs/examples/list-sieve-example-2.pd @@ -0,0 +1,112 @@ +#N canvas 630 119 650 767 10; +#X obj 272 233 list-sieve; +#X msg 207 155 0 5 7; +#X msg 272 186 2 4 9; +#X msg 337 206 11; +#X obj 207 129 t b b b; +#X obj 142 111 mod 12; +#X floatatom 142 60 5 0 0 0 - - -; +#X obj 142 83 t f f; +#X obj 448 178 div 12; +#X obj 448 204 * 12; +#X msg 207 108 bang; +#X obj 205 78 loadbang; +#X obj 142 386 + 24; +#X obj 142 360 list-drip; +#X obj 448 270 t f; +#X obj 448 97 t f; +#X msg 193 300 0 4 7; +#X msg 264 301 0 3 7; +#X msg 332 302 0 3 6; +#X obj 241 272 b; +#X obj 140 484 rrad.fluid~ /fl; +#X obj 148 432 pack 0 0; +#X obj 144 457 list prepend 1; +#X obj 148 676 ezdac~; +#X obj 142 185 list-sieve; +#X obj 207 212 list-sieve; +#X obj 152 408 makenote 90 200; +#X floatatom 151 142 5 0 0 0 - - -; +#N canvas 0 0 450 300 add 0; +#X obj 116 150 list-math +; +#X obj 116 89 t b f; +#X obj 116 121 list; +#X obj 116 186 outlet; +#X obj 175 86 inlet; +#X obj 116 67 inlet; +#X connect 0 0 3 0; +#X connect 1 0 2 0; +#X connect 1 1 0 1; +#X connect 2 0 0 0; +#X connect 4 0 2 1; +#X connect 5 0 1 0; +#X restore 320 329 pd add; +#N canvas 0 0 450 300 add 0; +#X obj 116 150 list-math +; +#X obj 116 89 t b f; +#X obj 116 121 list; +#X obj 116 186 outlet; +#X obj 175 86 inlet; +#X obj 116 67 inlet; +#X connect 0 0 3 0; +#X connect 1 0 2 0; +#X connect 1 1 0 1; +#X connect 2 0 0 0; +#X connect 4 0 2 1; +#X connect 5 0 1 0; +#X restore 218 329 pd add; +#N canvas 0 0 450 300 add 0; +#X obj 116 150 list-math +; +#X obj 116 89 t b f; +#X obj 116 121 list; +#X obj 116 186 outlet; +#X obj 175 86 inlet; +#X obj 116 67 inlet; +#X connect 0 0 3 0; +#X connect 1 0 2 0; +#X connect 1 1 0 1; +#X connect 2 0 0 0; +#X connect 4 0 2 1; +#X connect 5 0 1 0; +#X restore 142 323 pd add; +#X connect 0 0 28 0; +#X connect 0 1 13 0; +#X connect 1 0 24 1; +#X connect 2 0 25 1; +#X connect 3 0 0 1; +#X connect 4 0 1 0; +#X connect 4 1 2 0; +#X connect 4 2 3 0; +#X connect 4 2 19 0; +#X connect 5 0 24 0; +#X connect 5 0 27 0; +#X connect 6 0 7 0; +#X connect 7 0 5 0; +#X connect 7 1 15 0; +#X connect 8 0 9 0; +#X connect 9 0 14 0; +#X connect 10 0 4 0; +#X connect 11 0 4 0; +#X connect 12 0 26 0; +#X connect 13 0 12 0; +#X connect 14 0 12 1; +#X connect 15 0 8 0; +#X connect 16 0 30 1; +#X connect 17 0 29 1; +#X connect 18 0 28 1; +#X connect 19 0 16 0; +#X connect 19 0 17 0; +#X connect 19 0 18 0; +#X connect 20 0 23 0; +#X connect 20 1 23 1; +#X connect 21 0 22 0; +#X connect 22 0 20 0; +#X connect 24 0 30 0; +#X connect 24 1 25 0; +#X connect 25 0 29 0; +#X connect 25 1 0 0; +#X connect 26 0 21 0; +#X connect 26 1 21 1; +#X connect 28 0 13 0; +#X connect 29 0 13 0; +#X connect 30 0 13 0; diff --git a/list-abs/last-x-help.pd b/list-abs/last-x-help.pd new file mode 100755 index 0000000..b3d0cb1 --- /dev/null +++ b/list-abs/last-x-help.pd @@ -0,0 +1,20 @@ +#N canvas 0 26 569 323 10; +#X obj 188 143 last-x 4; +#X floatatom 188 118 5 0 0 0 - - -; +#X obj 188 174 print last_x; +#X text 124 52 last-x: make a list of the last x floats.; +#X floatatom 239 119 5 0 0 2 change-size - -; +#N canvas 520 35 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION make a list of the last x floats; +#X text 12 65 INLET_0 float; +#X text 12 105 OUTLET_0 list; +#X text 12 85 INLET_1 float; +#X restore 511 292 pd META; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 4 0 0 1; diff --git a/list-abs/last-x.pd b/list-abs/last-x.pd new file mode 100755 index 0000000..a7cbc02 --- /dev/null +++ b/list-abs/last-x.pd @@ -0,0 +1,10 @@ +#N canvas 417 318 464 379 10; +#X obj 265 147 inlet; +#X obj 179 149 inlet; +#X obj 179 253 outlet; +#X text 54 77 This is just a backwards compatibility wrapper around +list-lastx; +#X obj 179 206 list-lastx \$1; +#X connect 0 0 4 1; +#X connect 1 0 4 0; +#X connect 4 0 2 0; diff --git a/list-abs/list-abs-help.pd b/list-abs/list-abs-help.pd new file mode 100755 index 0000000..107d876 --- /dev/null +++ b/list-abs/list-abs-help.pd @@ -0,0 +1,18 @@ +#N canvas 1 88 475 311 10; +#X obj 147 204 print; +#X msg 147 109 1 2 -3 -4 5 and -6; +#X text 55 66 list-abs: apply abs() on float elements of a list.; +#X obj 147 158 list-abs; +#N canvas 414 178 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 115 AUTHOR Frank Barknecht; +#X text 12 45 DESCRIPTION list-abs: apply abs() on float elements of +a list.; +#X text 12 75 INLET_0 list; +#X text 12 95 OUTLET_0 list; +#X text 12 135 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X restore 397 277 pd META; +#X connect 1 0 3 0; +#X connect 3 0 0 0; diff --git a/list-abs/list-abs-intro.pd b/list-abs/list-abs-intro.pd new file mode 100755 index 0000000..7aff176 --- /dev/null +++ b/list-abs/list-abs-intro.pd @@ -0,0 +1,78 @@ +#N canvas 802 145 296 279 10; +#N canvas 204 36 682 744 \$0-overview 0; +#X restore 79 115 pd \$0-overview; +#N canvas 337 123 805 747 dump 0; +#X obj 94 243 textfile; +#X obj 94 337 t a b; +#X obj 128 411 f; +#X obj 160 412 + 1; +#X obj 240 603 s pd-\$0-overview; +#X obj 94 461 list; +#X msg 172 247 1; +#X obj 94 211 until; +#X obj 74 41 inlet; +#X obj 74 76 list; +#X msg 258 199 print; +#X msg 115 184 read \$1 cr \, rewind; +#X msg 239 247 clear; +#X obj 239 42 inlet; +#X obj 128 434 * 45; +#X msg 74 113 symbol \$1.txt; +#X obj 74 152 t b b a b; +#X obj 94 362 list split 1; +#X obj 264 494 list prepend 0; +#X obj 264 536 list trim; +#X obj 197 414 route bang; +#X msg 74 537 vis 0 \, vis 1; +#X obj 94 269 route float; +#X obj 190 340 max; +#X obj 190 362 until; +#X text 258 348 lines that just contain a number are used to skip as +many lines as the number specifies. use this to make room for larger +GOP objects so they don't overlap with following objects.; +#X msg 94 483 obj 50 \$2 \$1; +#X obj 264 514 list prepend text 200; +#X connect 0 0 22 0; +#X connect 0 1 7 1; +#X connect 1 0 17 0; +#X connect 1 1 2 0; +#X connect 2 0 3 0; +#X connect 2 0 14 0; +#X connect 3 0 2 1; +#X connect 5 0 26 0; +#X connect 6 0 2 1; +#X connect 7 0 0 0; +#X connect 8 0 9 0; +#X connect 9 0 15 0; +#X connect 10 0 0 0; +#X connect 11 0 0 0; +#X connect 12 0 4 0; +#X connect 13 0 12 0; +#X connect 14 0 5 1; +#X connect 14 0 18 1; +#X connect 15 0 16 0; +#X connect 16 0 21 0; +#X connect 16 1 7 0; +#X connect 16 2 11 0; +#X connect 16 3 12 0; +#X connect 16 3 6 0; +#X connect 17 0 5 0; +#X connect 17 1 20 0; +#X connect 18 0 27 0; +#X connect 19 0 4 0; +#X connect 20 1 18 0; +#X connect 21 0 4 0; +#X connect 22 0 23 0; +#X connect 22 1 1 0; +#X connect 23 0 24 0; +#X connect 24 0 2 0; +#X connect 26 0 4 0; +#X connect 27 0 19 0; +#X restore 79 93 pd dump; +#X msg 138 93 clear; +#X text 80 150 Help-click any object to; +#X text 80 169 open the help file!; +#X msg 79 66 list-abs-intro; +#X text 77 42 click me:; +#X connect 2 0 1 1; +#X connect 5 0 1 0; diff --git a/list-abs/list-abs-intro.txt b/list-abs/list-abs-intro.txt new file mode 100755 index 0000000..2a1b9db --- /dev/null +++ b/list-abs/list-abs-intro.txt @@ -0,0 +1,72 @@ +OSCprepend - "Prepends" first argument to an OSC message list. +compare-any - Test if two anythings are the same. Out: 1 if equal +last-x - last-x: make a list of the last x floats (deprecated: use [list-lastx] instead +list-abs - apply abs() on float elements of a list. +list-accum - add all floats in a list +list-add - Add two lists element by element +list-apply - apply the object created by [arg1 arg2] on +list-centroid - Calculates the centroid or center of mass of a list of +list-clip - clip for lists +list-compare - Compare two lists element by element. +list-delete - delete element at position POS from list. +list-dotprod - dot-product of two lists: res = sum(Xi*Yi) +list-drip - list-drip: drips or serializes a list +list-drip2 - Drips two lists in sync as long as the first list +list-dripslow - Serialize a list on demand. +list-emath - Do math on lists element by element +list-enumerate - serialize a list and put numbers in front of every element +list-equalize - scale a list so that all float elements sum up to 1 +list-extend - Build a list from incoming lists or elements. +list-fifo-delim - This object is obsolete! Use [list-fifo] instead! +list-fifo - stores incoming (list-)messages +list-filter - filter out list elemnent by a condition +list-find - Find position(s) of a value in a list. +list-group - group items into lists of the same size +list-geometric-mean - Calculates the geometric mean of a list (of floats) +list-harmonic-mean - Calculates the harmonic mean of a list (of floats) +list-idx - Get element at position idx. +list-insert - insert LIST before element at position POS +list-inter - elementwise linear interpolation between +list-inter-many - Elementwise linear interpolation between several float lists +list-iter - group lists into sub-lists with size-limit +list-l2s - Concatenate a list into a single symbol using ARG1 as delimiter +list-lastx - make a list of the last x floats. +list-len - calculate length of a list (use [list length] if available) +list-lifo - stores incoming (list-)messages +list-makefilename - Change symbols in a list pass floats unchanged. +list-map - Calls a user-defined operation for each of the incoming list elements +list-map2 - Calls a user-defined operation for each pair of elements of two lists +list-math - simple mathematical operations on lists. +list-mean - Calculates the arithmetric mean of a list (of floats) +list-minmax - find minimum and maximum float in a list. +list-moses - [moses] for lists +list-mult - Substract two lists element by element +list-normalize - normalize a list +list-nth - look up the nth element in a list. n has to be positive +list-onearg - defaults for abstractions arguments +list-pad - pad a list with elements from a longer list +list-quicksort - Sort a list of floats into ascending order using a quicksort +list-random - generate lists of pseudorandom integers +list-rdrip - drips or serializes a list in reverse. +list-reduce - apply a function of two arguments cumulatively to the items of a list +list-replace - replace a list starting at position POS with another list +list-rev - reverse a list +list-rot - Rotate a list (move ROT# elements from front to back) +list-round - round all numbers in a list +list-sect - outputs the elements that are common to both input lists. +list-seek - walk through a list element by element - similar to [textfile] +list-shellsort - Sort a list of floats into ascending order using a Shell sort +list-sieve - Look up occurence of incoming floats in a list +list-sort - Sort an incoming list of values +list-splat - like [list split] which also accepts negative split locations +list-stddev - calculate the standard deviation of a float +list-sub - Substract two lists element by element +list-swap - swap two elements of a list at given indices. +list-tabdump - dump a [table] into a list +list-unique - remove duplicates from a list +list-unitvec - make a unit vector out of any list +list-wrandom - Use a list as a probability table for weighted random values +prepent - shortcut for [list prepend]--[list trim] +sroute - settable [route] +take-two - take a list as input and print all combinations of +triple-scale - interpolate linearily between two points (x y z) diff --git a/list-abs/list-abs-meta.pd b/list-abs/list-abs-meta.pd new file mode 100755 index 0000000..042f15f --- /dev/null +++ b/list-abs/list-abs-meta.pd @@ -0,0 +1,8 @@ +#N canvas 10 10 200 200 10; +#N canvas 20 20 420 300 META 0; +#X text 10 30 NAME list-abs; +#X text 10 50 AUTHOR Frank Barknecht; +#X text 10 70 LICENSE SIBSD; +#X text 10 90 DESCRIPTION a collection of objects for manipulating lists. Requires pd>=0.39; +#X text 10 110 VERSION 0.1; +#X restore 10 10 pd META; diff --git a/list-abs/list-abs.pd b/list-abs/list-abs.pd new file mode 100755 index 0000000..d032d3c --- /dev/null +++ b/list-abs/list-abs.pd @@ -0,0 +1,23 @@ +#N canvas 228 307 502 424 10; +#X obj 130 59 inlet; +#X obj 130 86 t b a b; +#X obj 152 145 list-drip; +#X obj 152 190 abs; +#X obj 152 168 route float; +#X obj 152 244 list prepend; +#X obj 245 244 t l; +#X obj 129 274 list; +#X obj 129 302 outlet; +#X text 92 30 list-abs: apply abs() on float elements of a list.; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 1 1 2 0; +#X connect 1 2 5 1; +#X connect 2 0 4 0; +#X connect 3 0 5 0; +#X connect 4 0 3 0; +#X connect 4 1 5 0; +#X connect 5 0 6 0; +#X connect 5 0 7 1; +#X connect 6 0 5 1; +#X connect 7 0 8 0; diff --git a/list-abs/list-accum-help.pd b/list-abs/list-accum-help.pd new file mode 100755 index 0000000..d679b85 --- /dev/null +++ b/list-abs/list-accum-help.pd @@ -0,0 +1,21 @@ +#N canvas 0 26 470 313 10; +#X obj 164 160 list-accum; +#X floatatom 164 199 5 0 0 0 - - -; +#X msg 164 119 1 2 3; +#X obj 120 197 print; +#X msg 217 120 1 2 3 and 4; +#X text 94 61 list-accum: add all floats in a list; +#N canvas 466 163 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 85 OUTLET_0 list; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 65 INLET_0 anything; +#X text 12 45 DESCRIPTION add all floats in a list; +#X restore 397 277 pd META; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 2 0 0 0; +#X connect 4 0 0 0; diff --git a/list-abs/list-accum.pd b/list-abs/list-accum.pd new file mode 100755 index 0000000..77e6358 --- /dev/null +++ b/list-abs/list-accum.pd @@ -0,0 +1,22 @@ +#N canvas 0 0 450 300 10; +#X obj 212 193 f 0; +#X obj 182 192 + 1; +#X obj 182 114 list-drip; +#X obj 212 168 0; +#X obj 182 53 inlet; +#X obj 182 81 t a b; +#X obj 182 140 route float; +#X obj 166 245 outlet; +#X obj 166 220 f; +#X text 116 23 list-accum: add all floats in a list; +#X connect 0 0 1 1; +#X connect 1 0 0 0; +#X connect 1 0 8 1; +#X connect 2 0 6 0; +#X connect 2 1 8 0; +#X connect 3 0 0 0; +#X connect 4 0 5 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 6 0 1 0; +#X connect 8 0 7 0; diff --git a/list-abs/list-add-help.pd b/list-abs/list-add-help.pd new file mode 100755 index 0000000..f7fae74 --- /dev/null +++ b/list-abs/list-add-help.pd @@ -0,0 +1,20 @@ +#N canvas 0 26 450 300 10; +#X msg 145 116 5 5 5 NOPE 5; +#X obj 145 217 print; +#X msg 196 140 1 2 3 0 -1; +#X text 108 67 Substract two lists element by element; +#X obj 145 177 list-add; +#N canvas 460 150 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 105 OUTLET_0 list; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 anything; +#X text 12 45 DESCRIPTION substract two lists element by element; +#X restore 397 277 pd META; +#X connect 0 0 4 0; +#X connect 2 0 4 1; +#X connect 4 0 1 0; diff --git a/list-abs/list-add.pd b/list-abs/list-add.pd new file mode 100755 index 0000000..dcc2e94 --- /dev/null +++ b/list-abs/list-add.pd @@ -0,0 +1,8 @@ +#N canvas 256 135 500 518 10; +#X obj 59 31 inlet; +#X obj 138 34 inlet; +#X obj 59 117 outlet; +#X obj 59 85 list-emath +; +#X connect 0 0 3 0; +#X connect 1 0 3 1; +#X connect 3 0 2 0; diff --git a/list-abs/list-apply-help.pd b/list-abs/list-apply-help.pd new file mode 100755 index 0000000..0b2872c --- /dev/null +++ b/list-abs/list-apply-help.pd @@ -0,0 +1,80 @@ +#N canvas 0 26 802 590 10; +#X obj 78 317 list-apply + 1; +#X msg 78 285 1 2 3 4; +#X obj 78 344 print; +#X msg 233 285 1 2 3 4; +#X obj 233 347 print; +#X text 29 23 list-apply: apply the object created by [arg1 arg2] on +every list element and return the modified list.; +#X floatatom 171 287 5 0 0 2 add_x - -; +#X msg 360 264 set /synth%d/freq; +#X text 129 126 Inlets:; +#X text 165 168 2) inlet connected to the apply-operation's first inlet. +; +#X text 164 191 3) inlet connected to the apply-operation's second +inlet \, if possible. (Not connected if there is no second inlet as +is the case with for example makefilename.; +#X msg 360 285 set count_%d...; +#X msg 487 286 not used with makefilename; +#X msg 77 396 1 2 3 4; +#X obj 77 438 print; +#X msg 288 397 1 2 3 4; +#X obj 288 439 print; +#X obj 388 379 hradio 15 1 0 4 empty empty empty 0 -6 0 8 -262144 -1 +-1 0; +#X obj 388 396 + 1; +#X floatatom 198 398 5 0 0 2 moses-arg - -; +#X text 128 74 Arguments:; +#X text 163 92 Arg1 and arg2 are used to create the object whose operation +is applied to the list elements.; +#X text 164 148 1) the list to modify.; +#X text 24 248 EXAMPLES:; +#X obj 503 446 print; +#X msg 503 366 1 2 3 3 3 4; +#X msg 560 392 set 1; +#X obj 645 447 print; +#X msg 645 387 45 57 69; +#X obj 79 551 print; +#X msg 79 507 1 2 3 4; +#X text 286 530 prepent is part of list-abs; +#X obj 233 317 list-apply makefilename /synth%d/freq; +#X obj 77 417 list-apply moses 3; +#X obj 288 418 list-apply == 4; +#X obj 503 418 list-apply change; +#X obj 645 418 list-apply mtof; +#X obj 79 528 list-apply prepent whatever; +#N canvas 460 150 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 AUTHOR Frank Barknecht; +#X text 12 135 OUTLET_0 list; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 95 INLET_1 anything; +#X text 12 75 INLET_0 anything; +#X text 12 45 DESCRIPTION apply the object created by [arg1 arg2] on +every list element and return the modified list.; +#X text 12 115 INLET_2 anything; +#X restore 737 557 pd META; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 3 0 32 0; +#X connect 6 0 0 2; +#X connect 7 0 32 1; +#X connect 11 0 32 1; +#X connect 12 0 32 2; +#X connect 13 0 33 0; +#X connect 15 0 34 0; +#X connect 17 0 18 0; +#X connect 18 0 34 2; +#X connect 19 0 33 2; +#X connect 25 0 35 0; +#X connect 26 0 35 1; +#X connect 28 0 36 0; +#X connect 30 0 37 0; +#X connect 32 0 4 0; +#X connect 33 0 14 0; +#X connect 34 0 16 0; +#X connect 35 0 24 0; +#X connect 36 0 27 0; +#X connect 37 0 29 0; diff --git a/list-abs/list-apply.pd b/list-abs/list-apply.pd new file mode 100755 index 0000000..06b5506 --- /dev/null +++ b/list-abs/list-apply.pd @@ -0,0 +1,29 @@ +#N canvas 0 0 554 590 10; +#X obj 77 499 list; +#X obj 100 385 list prepend; +#X obj 78 150 t b a b; +#X text 260 177 clear result list; +#X text 175 242 "Drip" (serialize) the list; +#X text 124 496 Final result is built here; +#X obj 78 81 inlet; +#X obj 210 271 inlet; +#X obj 77 530 outlet; +#X obj 100 307 \$1 \$2; +#X text 164 307 do \$1 \$2 with each element; +#X text 258 389 Repack the list; +#X obj 196 386 t a; +#X obj 163 270 inlet; +#X text 276 272 two inlets for the apply-operation; +#X obj 100 242 list-drip; +#X connect 0 0 8 0; +#X connect 1 0 0 1; +#X connect 1 0 12 0; +#X connect 2 0 0 0; +#X connect 2 1 15 0; +#X connect 2 2 1 1; +#X connect 6 0 2 0; +#X connect 7 0 9 1; +#X connect 9 0 1 0; +#X connect 12 0 1 1; +#X connect 13 0 9 0; +#X connect 15 0 9 0; diff --git a/list-abs/list-centroid-help.pd b/list-abs/list-centroid-help.pd new file mode 100755 index 0000000..c23138d --- /dev/null +++ b/list-abs/list-centroid-help.pd @@ -0,0 +1,201 @@ +#N struct 1031-centroid float x; +#N canvas 0 26 626 572 10; +#X floatatom 129 468 5 0 0 0 centroid - -; +#X msg 129 363 1 1 1 1; +#X msg 245 260 0 0 0 0; +#X msg 245 279 -1 1; +#X obj 215 469 bng 15 250 50 0 empty empty result_undefined 17 7 1 +10 -262144 -1 -1; +#X msg 129 245 0 1 0; +#X obj 129 439 list-centroid; +#X text 63 25 [list-centroid]; +#X text 93 90 centroid = sum(mi * i) / sum(mi); +#X text 71 49 Calculates the centroid or center of mass of a list of +floats according to:; +#X text 67 115 where the index i starts from 0; +#X msg 247 344 -1 3; +#X msg 129 287 1 2 3; +#X text 314 270 these two are undefined!; +#X msg 129 341 5 5 5; +#N canvas 0 0 450 300 randlist 0; +#X obj 134 129 until; +#X msg 246 151 set; +#X msg 134 193 add2 \$1; +#X obj 112 101 t b f b; +#X obj 135 249 outlet; +#X obj 112 31 inlet; +#X obj 112 73 + 1; +#X obj 112 53 random 10; +#X obj 134 151 random 10; +#X obj 134 171 - 5; +#X connect 0 0 8 0; +#X connect 1 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 3 1 0 0; +#X connect 3 2 1 0; +#X connect 5 0 7 0; +#X connect 6 0 3 0; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X connect 9 0 2 0; +#X restore 295 337 pd randlist; +#X msg 295 363 4; +#X msg 295 315 bang; +#X msg 129 306 10 20 30; +#X msg 129 267 0 2 0 0 0 1; +#X msg 248 325 -1 2; +#X msg 248 407 -10 9; +#X text 305 406 Note: a centroid can be negative!; +#X text 75 520 2007 Frank Barknecht; +#X text 67 146 Negative values are possible.; +#X text 65 174 If all floats add up to 0 \, the result is undefined. +In this case \, no result will be sent to the first outlet \, instead +the second outlet will bang and a console warning will be issued.; +#N canvas 318 53 641 556 graphical-centroid 0; +#N canvas 0 0 450 300 randlist 0; +#X obj 134 129 until; +#X msg 246 151 set; +#X msg 134 193 add2 \$1; +#X obj 112 101 t b f b; +#X obj 135 249 outlet; +#X obj 112 31 inlet; +#X obj 134 151 random 100; +#X obj 134 171 / 100; +#X msg 112 59 10; +#X connect 0 0 6 0; +#X connect 1 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 3 1 0 0; +#X connect 3 2 1 0; +#X connect 5 0 8 0; +#X connect 6 0 7 0; +#X connect 7 0 2 0; +#X connect 8 0 3 0; +#X restore 79 388 pd randlist; +#X msg 79 366 bang; +#X obj 79 447 list prepend 0; +#X obj 79 470 s \$0-tab; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-tab 10 float 0; +#X coords 0 1 9 0 200 140 1; +#X restore 79 105 graph; +#N canvas 0 0 694 427 \$0-c 0; +#X scalar 1031-centroid 0 \;; +#X coords 0 0 18 140 200 140 1; +#X restore 79 105 pd \$0-c; +#X floatatom 339 346 5 0 0 0 - - -; +#X obj 339 313 list-centroid; +#N canvas 336 319 712 355 \$0-centroid 0; +#X obj 19 329 outlet; +#X obj 19 86 route change; +#X obj 19 62 struct \$0-centroid float x; +#X obj 228 62 drawpolygon 900 2 x 0 x 140; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X restore 453 315 pd \$0-centroid; +#X obj 339 367 set \$0-centroid x; +#N canvas 0 0 503 429 create 0; +#X msg 242 258 traverse pd-\$1 \, bang; +#X obj 242 238 symbol \$0-c; +#X msg 107 79 0; +#X obj 242 278 pointer; +#X msg 243 178 clear; +#X obj 243 205 s pd-\$0-c; +#X obj 107 302 append \$0-centroid x; +#X obj 107 114 t a b b; +#X obj 107 50 loadbang; +#X obj 107 326 outlet; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 2 0 7 0; +#X connect 3 0 6 1; +#X connect 4 0 5 0; +#X connect 6 0 9 0; +#X connect 7 0 6 0; +#X connect 7 1 1 0; +#X connect 7 2 4 0; +#X connect 8 0 2 0; +#X restore 468 339 pd create; +#X obj 339 127 metro 50; +#X obj 339 102 tgl 15 0 empty empty show-centroid 17 7 1 10 -258699 +-262144 -1 0 1; +#N canvas 473 338 450 300 countto 0; +#X obj 131 154 f 0; +#X obj 156 153 + 1; +#X msg 174 113 0; +#X obj 131 183 outlet; +#X obj 131 59 inlet; +#X obj 131 116 until; +#X obj 131 96 t a b; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 1 0 0 1; +#X connect 2 0 0 1; +#X connect 4 0 6 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 6 1 2 0; +#X restore 362 195 pd countto; +#X obj 362 219 tabread \$0-tab; +#X obj 362 249 list prepend; +#X obj 452 249 t a; +#X msg 362 175 10; +#X obj 339 148 t b b b; +#X obj 339 274 list; +#X text 77 30 Switch on the "show-centroid"-metro and play with the +values in the array.; +#X obj 79 344 loadbang; +#X msg 79 414 0.56 0.59 0.8 0.98 0.3 0.64 0.96 0.57 0.55 0.08; +#X connect 0 0 22 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 6 0 9 0; +#X connect 7 0 6 0; +#X connect 8 0 9 1; +#X connect 10 0 9 1; +#X connect 11 0 18 0; +#X connect 12 0 11 0; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 15 0 16 0; +#X connect 15 0 19 1; +#X connect 16 0 15 1; +#X connect 17 0 13 0; +#X connect 18 0 19 0; +#X connect 18 1 17 0; +#X connect 18 2 15 1; +#X connect 19 0 7 0; +#X connect 21 0 1 0; +#X connect 22 0 2 0; +#X restore 392 510 pd graphical-centroid; +#X text 321 510 Also see:; +#N canvas 520 35 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 135 AUTHOR Frank Barknecht; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 75 INLET_0 list; +#X text 12 95 OUTLET_0 float; +#X text 12 115 OUTLET_1 bang; +#X text 12 45 DESCRIPTION calculate the centroid or center of mass +of a list of floats; +#X restore 544 540 pd META; +#X connect 1 0 6 0; +#X connect 2 0 6 0; +#X connect 3 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 0 0; +#X connect 6 1 4 0; +#X connect 11 0 6 0; +#X connect 12 0 6 0; +#X connect 14 0 6 0; +#X connect 15 0 16 0; +#X connect 16 0 6 0; +#X connect 17 0 15 0; +#X connect 18 0 6 0; +#X connect 19 0 6 0; +#X connect 20 0 6 0; +#X connect 21 0 6 0; diff --git a/list-abs/list-centroid.pd b/list-abs/list-centroid.pd new file mode 100755 index 0000000..30521e5 --- /dev/null +++ b/list-abs/list-centroid.pd @@ -0,0 +1,76 @@ +#N canvas 204 70 675 629 10; +#X obj 127 475 f; +#X obj 127 65 inlet; +#X obj 127 561 outlet; +#X obj 163 170 list-enumerate; +#X obj 163 197 t a a; +#X obj 261 406 /; +#X obj 261 376 swap; +#X obj 210 345 select 0; +#N canvas 286 344 401 287 sum(mi*i) 0; +#X obj 126 138 +; +#X obj 153 139 f; +#X msg 168 88 0; +#X obj 126 66 inlet; +#X obj 168 66 inlet; +#X obj 126 171 outlet; +#X obj 126 103 *; +#X connect 0 0 1 0; +#X connect 0 0 5 0; +#X connect 1 0 0 1; +#X connect 2 0 0 1; +#X connect 3 0 6 0; +#X connect 4 0 2 0; +#X connect 6 0 0 0; +#X restore 284 255 pd sum(mi*i); +#N canvas 573 330 450 328 sum(mi) 0; +#X obj 179 137 +; +#X obj 206 138 f; +#X msg 296 77 0; +#X obj 179 55 inlet; +#X obj 296 55 inlet; +#X obj 179 170 outlet; +#X text 143 34 in: (idx value); +#X text 40 89 swap to: (val idx); +#X text 67 172 sum of values; +#X obj 179 89 swap; +#X connect 0 0 1 0; +#X connect 0 0 5 0; +#X connect 1 0 0 1; +#X connect 2 0 0 1; +#X connect 3 0 9 0; +#X connect 4 0 2 0; +#X connect 9 0 0 0; +#X restore 163 253 pd sum(mi); +#X obj 210 559 outlet; +#X obj 127 399 spigot 1; +#X obj 145 285 f; +#X obj 240 528 print list-centroid; +#X obj 210 468 t b b; +#X msg 240 503 warning: sum of items equals 0: centroid is undefined! +; +#X obj 127 89 t b b a b b; +#X text 69 26 centroid (center of mass) = sum(mi * i) / sum(mi); +#X connect 0 0 2 0; +#X connect 1 0 16 0; +#X connect 3 0 4 0; +#X connect 4 0 9 0; +#X connect 4 1 8 0; +#X connect 5 0 0 1; +#X connect 6 0 5 0; +#X connect 6 1 5 1; +#X connect 7 0 14 0; +#X connect 7 1 6 0; +#X connect 8 0 6 1; +#X connect 9 0 12 1; +#X connect 11 0 0 0; +#X connect 12 0 7 0; +#X connect 12 0 11 1; +#X connect 14 0 10 0; +#X connect 14 1 15 0; +#X connect 15 0 13 0; +#X connect 16 0 11 0; +#X connect 16 1 12 0; +#X connect 16 2 3 0; +#X connect 16 3 9 1; +#X connect 16 4 8 1; diff --git a/list-abs/list-clip-help.pd b/list-abs/list-clip-help.pd new file mode 100755 index 0000000..80c962b --- /dev/null +++ b/list-abs/list-clip-help.pd @@ -0,0 +1,25 @@ +#N canvas 0 0 450 300 10; +#X obj 122 170 list-clip 2 8; +#X obj 122 204 print; +#X text 101 47 list-clip:; +#X obj 189 49 clip; +#X text 231 50 for lists; +#X msg 122 102 1 2 3 SYMBOL 4 5 6 7 8 9 10; +#X floatatom 165 144 5 0 0 0 - - -; +#X floatatom 208 145 5 0 0 0 - - -; +#N canvas 416 170 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 145 AUTHOR Frank Barknecht; +#X text 12 125 OUTLET_0 list; +#X text 12 165 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION clip for lists; +#X text 12 85 INLET_1 float; +#X text 12 105 INLET_2 float; +#X text 12 65 INLET_0 anything; +#X restore 387 267 pd META; +#X connect 0 0 1 0; +#X connect 5 0 0 0; +#X connect 6 0 0 1; +#X connect 7 0 0 2; diff --git a/list-abs/list-clip.pd b/list-abs/list-clip.pd new file mode 100755 index 0000000..afa43a0 --- /dev/null +++ b/list-abs/list-clip.pd @@ -0,0 +1,26 @@ +#N canvas 220 202 450 335 10; +#X obj 109 49 inlet; +#X obj 141 155 inlet; +#X obj 174 171 inlet; +#X obj 109 201 clip \$1 \$2; +#X obj 109 136 route float; +#X obj 109 100 list-drip; +#X obj 109 249 list prepend; +#X obj 200 249 t a; +#X obj 86 298 outlet; +#X obj 86 274 list; +#X obj 109 75 t a b; +#X connect 0 0 10 0; +#X connect 1 0 3 1; +#X connect 2 0 3 2; +#X connect 3 0 6 0; +#X connect 4 0 3 0; +#X connect 4 1 6 0; +#X connect 5 0 4 0; +#X connect 5 1 9 0; +#X connect 6 0 7 0; +#X connect 6 0 9 1; +#X connect 7 0 6 1; +#X connect 9 0 8 0; +#X connect 10 0 5 0; +#X connect 10 1 6 1; diff --git a/list-abs/list-compare-help.pd b/list-abs/list-compare-help.pd new file mode 100755 index 0000000..902f77e --- /dev/null +++ b/list-abs/list-compare-help.pd @@ -0,0 +1,42 @@ +#N canvas 0 26 529 463 10; +#X floatatom 149 244 5 0 0 0 - - -; +#X obj 213 244 loadbang; +#X msg 149 217 0; +#X msg 179 217 4; +#X msg 134 169 seven; +#X msg 134 196 symbol eight; +#X obj 134 316 list-compare; +#X obj 134 354 tgl 24 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 134 389 print EQUAL?; +#X text 69 21 [list-compare]; +#X text 108 42 Compare two lists element by element.; +#X floatatom 228 295 5 0 0 0 - - -; +#X text 134 90 Out: 1 if equal \, 0 if not equal.; +#X text 134 66 In: two lists to compare.; +#X msg 134 115 0 1 2 3 4 5 6 seven eight; +#X msg 134 142 0 1 2 3 4 5 6 seventy eight; +#X msg 213 271 0 1 2 3 4 5 6 seven eight; +#N canvas 416 170 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 105 OUTLET_0 float; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 anything; +#X text 12 45 DESCRIPTION compare two lists element by element; +#X restore 456 427 pd META; +#X connect 0 0 6 0; +#X connect 1 0 16 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 11 0 6 1; +#X connect 14 0 6 0; +#X connect 15 0 6 0; +#X connect 16 0 6 1; diff --git a/list-abs/list-compare.pd b/list-abs/list-compare.pd new file mode 100755 index 0000000..8a78b0d --- /dev/null +++ b/list-abs/list-compare.pd @@ -0,0 +1,74 @@ +#N canvas 368 289 390 300 10; +#X obj 222 58 inlet; +#X obj 94 57 inlet; +#X obj 94 199 outlet; +#N canvas 380 394 492 461 compare-elements 0; +#X obj 83 135 list-dripslow; +#X obj 83 226 compare-any; +#X obj 83 157 t a b; +#X obj 264 48 inlet; +#X obj 65 36 inlet; +#X obj 241 111 list; +#X obj 83 112 until; +#X obj 83 256 select 0; +#X obj 83 288 t b b; +#X msg 83 317 0; +#X obj 65 379 outlet; +#X obj 65 356 f 1; +#X obj 65 59 t b b a b b; +#X msg 125 319 1; +#X obj 155 192 list-dripslow; +#X connect 0 0 2 0; +#X connect 0 1 6 1; +#X connect 1 0 7 0; +#X connect 2 0 1 0; +#X connect 2 1 14 0; +#X connect 3 0 5 1; +#X connect 4 0 12 0; +#X connect 5 0 14 1; +#X connect 6 0 0 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 8 1 6 1; +#X connect 9 0 11 1; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 12 1 6 0; +#X connect 12 2 0 1; +#X connect 12 3 5 0; +#X connect 12 4 13 0; +#X connect 13 0 11 1; +#X connect 14 0 1 1; +#X restore 94 136 pd compare-elements; +#X msg 216 167 0; +#N canvas 446 369 450 300 compare-lengths 0; +#X obj 45 102 ==; +#X obj 45 123 select 1 0; +#X obj 144 35 inlet; +#X obj 45 20 inlet; +#X obj 45 203 outlet; +#X obj 77 182 outlet; +#X obj 45 45 t a a; +#X obj 45 154 list; +#X text 39 237 if equal \, send list out to first outlet \, else bang +second outlet; +#X obj 144 68 list-len; +#X obj 45 67 list-len; +#X connect 0 0 1 0; +#X connect 1 0 7 0; +#X connect 1 1 5 0; +#X connect 2 0 9 0; +#X connect 3 0 6 0; +#X connect 6 0 10 0; +#X connect 6 1 7 1; +#X connect 7 0 4 0; +#X connect 9 0 0 1; +#X connect 10 0 0 0; +#X restore 94 93 pd compare-lengths; +#X connect 0 0 5 1; +#X connect 0 0 3 1; +#X connect 1 0 5 0; +#X connect 3 0 2 0; +#X connect 4 0 2 0; +#X connect 5 0 3 0; +#X connect 5 1 4 0; diff --git a/list-abs/list-delete-help.pd b/list-abs/list-delete-help.pd new file mode 100755 index 0000000..5d07163 --- /dev/null +++ b/list-abs/list-delete-help.pd @@ -0,0 +1,43 @@ +#N canvas 0 26 572 423 10; +#X obj 85 190 hradio 15 1 0 8 empty empty POS_(zero-based) 0 -6 0 8 +-262144 -1 -1 0; +#X floatatom 85 210 5 0 0 0 - - -; +#X msg 49 160 0 1 2 3 4; +#X obj 49 288 print; +#X text 36 55 Negative POS counts from the end of the list.; +#X text 35 26 list-delete: delete element at position POS from list. +; +#X floatatom 121 239 5 0 0 1 how_many - -; +#X msg 293 170 0 1 2 3 4; +#X obj 293 288 print; +#X text 322 211 arguments: ; +#X obj 49 258 list-delete; +#X text 38 79 Arguments; +#X text 51 102 1: Default POS to delete.; +#X text 51 123 2: How many items to delete (cannot be less than 1) +; +#X floatatom 343 239 5 0 0 0 - - -; +#X floatatom 393 240 5 0 0 0 - - -; +#X obj 293 259 list-delete 2 3; +#N canvas 520 35 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 145 AUTHOR Frank Barknecht; +#X text 12 165 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 65 INLET_0 list; +#X text 12 45 DESCRIPTION delete element at position POS from list +; +#X text 12 85 INLET_1 float; +#X text 12 105 INLET_2 float; +#X text 12 125 OUTLET_0 list; +#X restore 507 387 pd META; +#X connect 0 0 1 0; +#X connect 1 0 10 1; +#X connect 2 0 10 0; +#X connect 6 0 10 2; +#X connect 7 0 16 0; +#X connect 10 0 3 0; +#X connect 14 0 16 1; +#X connect 15 0 16 2; +#X connect 16 0 8 0; diff --git a/list-abs/list-delete.pd b/list-abs/list-delete.pd new file mode 100755 index 0000000..7243239 --- /dev/null +++ b/list-abs/list-delete.pd @@ -0,0 +1,28 @@ +#N canvas 18 49 525 309 10; +#X obj 151 149 list-splat \$1; +#X obj 237 50 inlet; +#X text 235 30 pos; +#X obj 151 51 inlet; +#X text 135 29 orig. list; +#X obj 194 217 list split 1; +#X obj 151 256 list; +#X obj 151 285 outlet; +#X obj 302 127 moses 1; +#X obj 302 50 inlet; +#X obj 327 78 loadbang; +#X text 299 30 how many items to delete; +#X obj 302 106 f \$2; +#X msg 302 149 1; +#X connect 0 0 6 0; +#X connect 0 1 5 0; +#X connect 0 2 7 0; +#X connect 1 0 0 1; +#X connect 3 0 0 0; +#X connect 5 1 6 1; +#X connect 6 0 7 0; +#X connect 8 0 13 0; +#X connect 8 1 5 1; +#X connect 9 0 12 0; +#X connect 10 0 12 0; +#X connect 12 0 8 0; +#X connect 13 0 5 1; diff --git a/list-abs/list-dotprod-help.pd b/list-abs/list-dotprod-help.pd new file mode 100755 index 0000000..9f98dc8 --- /dev/null +++ b/list-abs/list-dotprod-help.pd @@ -0,0 +1,33 @@ +#N canvas 0 26 483 343 10; +#X obj 59 150 list-dotprod; +#X msg 138 118 3 1; +#X text 40 32 list-dotprod; +#X text 60 53 dot-product of two lists: res = sum(Xi*Yi); +#X obj 290 188 list-mult; +#X obj 290 215 list-accum; +#X msg 348 160 3 1; +#X floatatom 59 179 5 0 0 0 - - -; +#X floatatom 290 240 5 0 0 0 - - -; +#X text 240 137 a bit faster \, but the same as; +#X msg 59 119 2 4; +#X msg 290 161 2 4; +#X text 57 209 2*3 + 4*1 = 10; +#N canvas 520 35 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 65 INLET_0 list; +#X text 12 85 INLET_1 list; +#X text 12 105 OUTLET_0 list; +#X text 12 45 DESCRIPTION dot-product of two lists : res = sum(Xi*Yi) +; +#X restore 421 312 pd META; +#X connect 0 0 7 0; +#X connect 1 0 0 1; +#X connect 4 0 5 0; +#X connect 5 0 8 0; +#X connect 6 0 4 1; +#X connect 10 0 0 0; +#X connect 11 0 4 0; diff --git a/list-abs/list-dotprod.pd b/list-abs/list-dotprod.pd new file mode 100755 index 0000000..3f4520f --- /dev/null +++ b/list-abs/list-dotprod.pd @@ -0,0 +1,40 @@ +#N canvas 0 0 750 558 10; +#X obj 59 31 inlet; +#X obj 280 39 inlet; +#X obj 59 469 outlet; +#X obj 78 138 list-drip; +#X obj 257 231 list; +#X obj 171 259 list-dripslow; +#X obj 78 258 route float; +#X obj 171 286 route float; +#X obj 137 87 s \$0-reset; +#X obj 108 359 r \$0-reset; +#X obj 59 58 t b a b b; +#X text 305 153 list-dotprod; +#X text 325 174 dot-product of two lists: res = sum(Xi*Yi); +#X obj 108 409 f 0; +#X obj 108 384 0; +#X obj 59 436 f; +#X obj 78 408 +; +#X obj 78 322 *; +#X obj 78 162 t a b; +#X connect 0 0 10 0; +#X connect 1 0 4 1; +#X connect 3 0 18 0; +#X connect 4 0 5 1; +#X connect 5 0 7 0; +#X connect 6 0 17 0; +#X connect 7 0 17 1; +#X connect 9 0 14 0; +#X connect 10 0 15 0; +#X connect 10 1 3 0; +#X connect 10 2 4 0; +#X connect 10 3 8 0; +#X connect 13 0 16 1; +#X connect 14 0 13 0; +#X connect 15 0 2 0; +#X connect 16 0 13 0; +#X connect 16 0 15 1; +#X connect 17 0 16 0; +#X connect 18 0 6 0; +#X connect 18 1 5 0; diff --git a/list-abs/list-drip-help.pd b/list-abs/list-drip-help.pd new file mode 100755 index 0000000..4f8bf23 --- /dev/null +++ b/list-abs/list-drip-help.pd @@ -0,0 +1,208 @@ +#N canvas 0 26 635 655 10; +#X obj 70 93 list-drip; +#X msg 70 66 1 2 3 a b c; +#X obj 70 124 print; +#X obj 151 120 bng 15 250 50 0 empty empty end 0 -6 0 8 -262144 -1 +-1; +#X msg 297 70 1 2 3 a b c; +#X obj 382 129 bng 15 250 50 0 empty empty end 0 -6 0 8 -262144 -1 +-1; +#X obj 297 178 print first; +#X obj 329 154 print second; +#X obj 212 390 bng 15 250 50 0 empty empty end 0 -6 0 8 -262144 -1 +-1; +#X text 71 217 Use list-drip2 to combine two lists into one \, for +example by addition:; +#X obj 219 550 list; +#X obj 123 549 list prepend; +#X obj 42 584 list; +#X obj 42 612 print RESULT; +#X obj 123 289 t b b; +#X msg 123 269 bang; +#X obj 123 346 t l b; +#X text 190 302 Add these lists by element. Be careful with their lengths +; +#X text 70 18 list-drip: drips or serializes a list \, that is \, it +sends all elements one after another.; +#X text 434 105 Drip two lists in sync.; +#X text 285 429 filter out floats; +#X obj 42 552 r \$0-end; +#X obj 212 409 s \$0-end; +#X text 200 508 reset first; +#X obj 123 478 +; +#N canvas 315 75 709 522 add-lots-of-lists 0; +#X obj 273 211 bng 15 250 50 0 empty empty end 0 -6 0 8 -262144 -1 +-1; +#X obj 184 167 t l b; +#X text 138 51 Add many lists by routing the result back to the second +inlet of list-drip2; +#X obj 154 142 t b a; +#X obj 103 433 print CURRENT-RESULT; +#X msg 68 145 bang; +#X text 65 125 Reset; +#X msg 232 103 0.1 0.2 0.3 0.4; +#X msg 354 103 0.01 0.02 0.03 0.04; +#X obj 184 370 list prepend; +#X obj 280 371 list; +#X obj 103 405 list; +#X obj 184 299 +; +#X msg 154 105 1 3 4 7; +#X msg 84 219 0; +#X obj 88 176 t b b b; +#N canvas 347 135 671 625 weighted 0; +#X obj 435 225 list split 1; +#X text 59 90 weighted sum of lists; +#X obj 435 294 list-math *; +#X obj 435 270 list; +#X obj 435 248 t b f; +#X msg 361 184 \$1 0 0 1; +#X msg 435 184 \$1 0 1 0; +#X obj 380 83 hsl 64 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 0 1; +#X obj 454 83 hsl 64 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 0 1; +#X obj 530 83 hsl 64 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 0 1; +#X obj 353 486 list; +#X obj 361 149 f; +#X obj 435 151 f; +#X obj 511 153 f; +#N canvas 0 0 516 490 list-accum 0; +#X obj 319 215 bng 15 250 50 0 empty empty end 0 -6 0 8 -262144 -1 +-1; +#X obj 230 171 t l b; +#X obj 200 146 t b a; +#X msg 399 128 bang; +#X text 396 108 Reset; +#X obj 230 374 list prepend; +#X obj 326 375 list; +#X obj 149 409 list; +#X obj 230 303 +; +#X msg 375 214 0; +#X obj 379 171 t b b b; +#X obj 149 437 outlet; +#X obj 199 104 inlet; +#X obj 343 106 inlet; +#X obj 230 213 list-drip2; +#X connect 1 0 14 0; +#X connect 1 1 5 1; +#X connect 2 0 7 0; +#X connect 2 1 1 0; +#X connect 3 0 10 0; +#X connect 5 0 6 0; +#X connect 5 0 7 1; +#X connect 6 0 5 1; +#X connect 7 0 11 0; +#X connect 7 0 14 1; +#X connect 8 0 5 0; +#X connect 9 0 8 1; +#X connect 10 0 9 0; +#X connect 10 1 14 0; +#X connect 10 2 14 1; +#X connect 12 0 2 0; +#X connect 13 0 10 0; +#X connect 14 0 8 0; +#X connect 14 1 8 1; +#X connect 14 2 0 0; +#X restore 376 444 pd list-accum; +#X obj 354 509 print W_SUM; +#X msg 266 81 bang; +#X obj 269 104 t b b b; +#X msg 511 183 \$1 1 1 0; +#X obj 376 38 hsl 64 15 0 1 0 0 empty empty empty -2 -6 0 8 -262144 +-1 -1 0 1; +#X obj 375 59 t b f; +#X connect 0 0 4 0; +#X connect 0 1 3 1; +#X connect 2 0 14 0; +#X connect 3 0 2 0; +#X connect 4 0 3 0; +#X connect 4 1 2 1; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 11 1; +#X connect 8 0 12 1; +#X connect 9 0 13 1; +#X connect 10 0 15 0; +#X connect 11 0 5 0; +#X connect 12 0 6 0; +#X connect 13 0 18 0; +#X connect 14 0 10 1; +#X connect 16 0 17 0; +#X connect 17 0 10 0; +#X connect 17 1 11 0; +#X connect 17 1 12 0; +#X connect 17 1 13 0; +#X connect 17 2 14 1; +#X connect 18 0 0 0; +#X connect 19 0 20 0; +#X connect 20 0 17 0; +#X connect 20 1 11 1; +#X restore 434 245 pd weighted; +#X obj 184 209 list-drip2; +#X text 419 223 Add lists weighted:; +#X connect 1 0 17 0; +#X connect 1 1 9 1; +#X connect 3 0 11 0; +#X connect 3 1 1 0; +#X connect 5 0 15 0; +#X connect 7 0 3 0; +#X connect 8 0 3 0; +#X connect 9 0 10 0; +#X connect 9 0 11 1; +#X connect 10 0 9 1; +#X connect 11 0 4 0; +#X connect 11 0 17 1; +#X connect 12 0 9 0; +#X connect 13 0 3 0; +#X connect 14 0 12 1; +#X connect 15 0 14 0; +#X connect 15 1 17 0; +#X connect 15 2 17 1; +#X connect 17 0 12 0; +#X connect 17 1 12 1; +#X connect 17 2 0 0; +#X restore 415 583 pd add-lots-of-lists; +#X text 418 557 Another example:; +#X obj 297 97 list-drip2; +#X obj 123 388 list-drip2; +#X msg 124 326 1 2 3 4; +#X msg 196 326 5 6 7 8; +#X msg 396 70 4 5 6 d e f ignored; +#N canvas 431 110 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION drip or serialize a list \, that is \, send +all elements one after another.; +#X text 12 75 INLET_0 anything; +#X text 12 95 OUTLET_0 symbol float pointer; +#X text 12 115 OUTLET_1 bang; +#X text 12 135 AUTHOR Frank Barknecht \, Mathieu Bouchard; +#X restore 567 624 pd META; +#X connect 0 0 2 0; +#X connect 0 1 3 0; +#X connect 1 0 0 0; +#X connect 4 0 27 0; +#X connect 8 0 22 0; +#X connect 10 0 11 1; +#X connect 11 0 10 0; +#X connect 11 0 12 1; +#X connect 12 0 13 0; +#X connect 14 0 29 0; +#X connect 14 1 30 0; +#X connect 15 0 14 0; +#X connect 16 0 28 0; +#X connect 16 1 11 1; +#X connect 21 0 12 0; +#X connect 24 0 11 0; +#X connect 27 0 6 0; +#X connect 27 1 7 0; +#X connect 27 2 5 0; +#X connect 28 0 24 0; +#X connect 28 1 24 1; +#X connect 28 2 8 0; +#X connect 29 0 16 0; +#X connect 30 0 28 1; +#X connect 31 0 27 1; diff --git a/list-abs/list-drip.pd b/list-abs/list-drip.pd new file mode 100755 index 0000000..4f39a57 --- /dev/null +++ b/list-abs/list-drip.pd @@ -0,0 +1,47 @@ +#N canvas 218 94 842 634 10; +#X obj 63 84 t a a; +#X obj 63 241 spigot; +#X obj 102 149 bang; +#X obj 102 168 1; +#X obj 223 149 route bang; +#X obj 183 150 bang; +#X obj 183 169 0; +#X obj 102 114 list split 2; +#X obj 232 379 list split; +#X obj 299 328 list length; +#X obj 299 350 >> 1; +#X obj 63 260 t a a a a; +#X obj 63 446 list split; +#X obj 130 398 list length; +#X obj 130 423 >> 1; +#X obj 31 19 inlet; +#X obj 290 175 outlet; +#X text 73 19 Copyright 2009 by Mathieu Bouchard; +#X obj 31 53 t b a; +#X obj 465 119 outlet; +#X text 520 121 signal end of list; +#X text 381 23 made compatible with [list-drip]: fbar 2009; +#X connect 0 0 1 0; +#X connect 0 1 7 0; +#X connect 1 0 11 0; +#X connect 2 0 3 0; +#X connect 3 0 1 1; +#X connect 4 1 16 0; +#X connect 5 0 6 0; +#X connect 6 0 1 1; +#X connect 7 0 2 0; +#X connect 7 2 4 0; +#X connect 7 2 5 0; +#X connect 8 0 0 0; +#X connect 9 0 10 0; +#X connect 10 0 8 1; +#X connect 11 0 12 0; +#X connect 11 1 13 0; +#X connect 11 2 8 0; +#X connect 11 3 9 0; +#X connect 12 1 0 0; +#X connect 13 0 14 0; +#X connect 14 0 12 1; +#X connect 15 0 18 0; +#X connect 18 0 19 0; +#X connect 18 1 0 0; diff --git a/list-abs/list-drip2-help.pd b/list-abs/list-drip2-help.pd new file mode 100755 index 0000000..b0915c4 --- /dev/null +++ b/list-abs/list-drip2-help.pd @@ -0,0 +1,37 @@ +#N canvas 0 26 588 432 10; +#X obj 146 235 list-drip2; +#X text 72 58 Drips two lists in sync \, as long as the first list +lasts.; +#X text 42 25 list-drip2; +#X msg 213 208 a b c d; +#X obj 213 258 bng 15 250 50 0 empty empty End_of_1st_list 17 7 1 10 +-262144 -1 -1; +#X obj 179 306 print 2nd; +#X obj 146 334 print 1st; +#X msg 146 122 1 2 3 4; +#X msg 146 100 1 2 3; +#X msg 146 145 1 2 3 4 5; +#X obj 146 199 t a b; +#N canvas 436 26 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 175 AUTHOR Frank Barknecht; +#X text 12 195 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION drip two lists in sync \, as long as the +first list lasts; +#X text 12 95 INLET_1 anything; +#X text 12 75 INLET_0 anything; +#X text 12 135 OUTLET_1 float symbol; +#X text 12 115 OUTLET_0 float symbol; +#X text 12 155 OUTLET_2 bang; +#X restore 517 397 pd META; +#X connect 0 0 6 0; +#X connect 0 1 5 0; +#X connect 0 2 4 0; +#X connect 3 0 0 1; +#X connect 7 0 10 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 10 0 0 0; +#X connect 10 1 3 0; diff --git a/list-abs/list-drip2.pd b/list-abs/list-drip2.pd new file mode 100755 index 0000000..55ae94f --- /dev/null +++ b/list-abs/list-drip2.pd @@ -0,0 +1,19 @@ +#N canvas 161 215 536 406 10; +#X text 81 50 Drips two lists in sync \, as long as the first list +lasts.; +#X obj 96 273 outlet; +#X obj 96 87 inlet; +#X obj 189 270 outlet; +#X obj 257 272 outlet; +#X obj 353 125 inlet; +#X text 304 270 End; +#X obj 96 163 list-drip; +#X obj 96 186 t a b; +#X obj 189 222 list-dripslow; +#X connect 2 0 7 0; +#X connect 5 0 9 1; +#X connect 7 0 8 0; +#X connect 7 1 4 0; +#X connect 8 0 1 0; +#X connect 8 1 9 0; +#X connect 9 0 3 0; diff --git a/list-abs/list-dripslow-help.pd b/list-abs/list-dripslow-help.pd new file mode 100755 index 0000000..2b31feb --- /dev/null +++ b/list-abs/list-dripslow-help.pd @@ -0,0 +1,70 @@ +#N canvas 0 26 488 309 10; +#X msg 208 152 1 2 3 4; +#X obj 122 229 print element; +#X obj 208 202 print EOL; +#X msg 122 146 bang; +#X text 60 30 list-dripslow: Serialize a list on demand.; +#X text 56 69 First set list through right inlet \, then on each bang +into left inlet \, one element will be output through left outlet. +Right outlet bangs at list's end.; +#N canvas 401 196 593 450 drip-many-example 0; +#X obj 122 171 list-drip; +#X obj 122 194 t a b; +#X obj 122 323 print L1; +#X obj 207 324 print L2; +#X obj 297 326 print L3; +#X obj 207 249 t a b; +#X obj 122 121 t b b b; +#X text 160 39 Drip many lists in sync; +#X msg 122 92 bang; +#X msg 383 187 A B C; +#X msg 293 187 1 2 3; +#X msg 122 149 x y z; +#X obj 207 225 list-dripslow; +#X obj 297 283 list-dripslow; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 1 12 0; +#X connect 5 0 3 0; +#X connect 5 1 13 0; +#X connect 6 0 11 0; +#X connect 6 1 10 0; +#X connect 6 2 9 0; +#X connect 8 0 6 0; +#X connect 9 0 13 1; +#X connect 10 0 12 1; +#X connect 11 0 0 0; +#X connect 12 0 5 0; +#X connect 13 0 4 0; +#X restore 332 185 pd drip-many-example; +#N canvas 606 157 450 300 drip-emulation 0; +#X obj 140 194 list-dripslow; +#X obj 140 117 t b l; +#X obj 140 167 until; +#X obj 140 224 print; +#X msg 140 82 1 2 3 4 5 6 7 achtung; +#X text 135 49 drip fast with dripslow; +#X connect 0 0 3 0; +#X connect 0 1 2 1; +#X connect 1 0 2 0; +#X connect 1 1 0 1; +#X connect 2 0 0 0; +#X connect 4 0 1 0; +#X restore 332 219 pd drip-emulation; +#X obj 122 180 list-dripslow; +#N canvas 416 170 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 145 AUTHOR Frank Barknecht; +#X text 12 165 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION serialize a list on demand; +#X text 12 65 INLET_0 bang; +#X text 12 85 INLET_1 anything; +#X text 12 105 INLET_2 float symbol pointer; +#X text 12 125 OUTLET_0 bang; +#X restore 437 287 pd META; +#X connect 0 0 8 1; +#X connect 3 0 8 0; +#X connect 8 0 1 0; +#X connect 8 1 2 0; diff --git a/list-abs/list-dripslow.pd b/list-abs/list-dripslow.pd new file mode 100755 index 0000000..ca9dae9 --- /dev/null +++ b/list-abs/list-dripslow.pd @@ -0,0 +1,21 @@ +#N canvas 592 504 407 292 10; +#X obj 148 186 list split 1; +#X obj 148 161 list append; +#X obj 148 237 outlet; +#X obj 148 37 inlet; +#X obj 229 237 outlet; +#X obj 222 35 inlet; +#X obj 148 72 b; +#X text 265 36 list; +#X text 103 37 bang; +#X text 273 237 EOL; +#X text 89 236 element; +#X obj 229 207 b; +#X connect 0 0 2 0; +#X connect 0 1 1 1; +#X connect 0 2 11 0; +#X connect 1 0 0 0; +#X connect 3 0 6 0; +#X connect 5 0 1 1; +#X connect 6 0 1 0; +#X connect 11 0 4 0; diff --git a/list-abs/list-emath-help.pd b/list-abs/list-emath-help.pd new file mode 100755 index 0000000..3105136 --- /dev/null +++ b/list-abs/list-emath-help.pd @@ -0,0 +1,49 @@ +#N canvas 0 26 538 413 10; +#X obj 87 209 print add; +#X msg 87 138 5 5 5 5 x; +#X text 79 22 list-emath: Do math on lists element by element; +#X msg 350 141 0 1 2 3 4; +#X msg 271 140 5 5 5 5 x; +#X msg 88 256 5 5 5 5 x; +#X msg 269 262 5 5 5 5 x; +#X obj 271 211 print mult; +#X obj 88 327 print sub; +#X obj 269 333 print div; +#X obj 269 294 list-emath /; +#X obj 87 171 list-emath +; +#X obj 271 173 list-emath *; +#X obj 88 289 list-emath -; +#X msg 348 263 0 1 x 3 4; +#X msg 167 257 0 1 2 x 4; +#X msg 166 139 0 1 2 x 4; +#X text 80 55 Non-floats in second list will be replaced by 0 for + +and - \, and by 1 for * and /.; +#X msg 430 262 0 0 0 0 0; +#X text 428 243 Just say no!; +#X text 80 91 Symbols in first list will pass unchanged.; +#X text 83 376 Also see list-add \, list-mult \, list-sub for shortcuts. +; +#N canvas 416 170 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION do math on lists element by element; +#X text 12 65 INLET_0 list; +#X text 12 85 INLET_1 list; +#X text 12 105 OUTLET_0 list; +#X restore 483 386 pd META; +#X connect 1 0 11 0; +#X connect 3 0 12 1; +#X connect 4 0 12 0; +#X connect 5 0 13 0; +#X connect 6 0 10 0; +#X connect 10 0 9 0; +#X connect 11 0 0 0; +#X connect 12 0 7 0; +#X connect 13 0 8 0; +#X connect 14 0 10 1; +#X connect 15 0 13 1; +#X connect 16 0 11 1; +#X connect 18 0 10 1; diff --git a/list-abs/list-emath.pd b/list-abs/list-emath.pd new file mode 100755 index 0000000..27bebac --- /dev/null +++ b/list-abs/list-emath.pd @@ -0,0 +1,53 @@ +#N canvas 256 135 500 518 10; +#X obj 59 31 inlet; +#X obj 287 28 inlet; +#X obj 59 437 outlet; +#X obj 78 138 list-drip; +#X obj 264 131 list; +#X obj 178 234 list-dripslow; +#X obj 78 287 route float; +#X obj 178 261 route float; +#X obj 78 162 t a b b; +#X obj 78 379 list prepend; +#X obj 176 379 t a; +#X obj 59 404 list; +#X obj 136 57 s \$0-reset; +#X obj 157 343 r \$0-reset; +#X obj 59 58 t b a b b; +#X obj 341 49 loadbang; +#X obj 341 99 select + - * /; +#X msg 341 129 0; +#X msg 387 128 1; +#X obj 341 76 symbol \$1; +#X obj 325 232 f; +#X obj 78 322 \$1; +#X connect 0 0 14 0; +#X connect 1 0 4 1; +#X connect 3 0 8 0; +#X connect 4 0 5 1; +#X connect 5 0 7 0; +#X connect 6 0 21 0; +#X connect 6 1 9 0; +#X connect 7 0 21 1; +#X connect 8 0 6 0; +#X connect 8 1 5 0; +#X connect 8 2 20 0; +#X connect 9 0 10 0; +#X connect 9 0 11 1; +#X connect 10 0 9 1; +#X connect 11 0 2 0; +#X connect 13 0 9 1; +#X connect 14 0 11 0; +#X connect 14 1 3 0; +#X connect 14 2 4 0; +#X connect 14 3 12 0; +#X connect 15 0 19 0; +#X connect 16 0 17 0; +#X connect 16 1 17 0; +#X connect 16 2 18 0; +#X connect 16 3 18 0; +#X connect 17 0 20 1; +#X connect 18 0 20 1; +#X connect 19 0 16 0; +#X connect 20 0 21 1; +#X connect 21 0 9 0; diff --git a/list-abs/list-enumerate-help.pd b/list-abs/list-enumerate-help.pd new file mode 100755 index 0000000..f6622a2 --- /dev/null +++ b/list-abs/list-enumerate-help.pd @@ -0,0 +1,33 @@ +#N canvas 0 26 540 454 10; +#X obj 152 196 list-enumerate; +#X obj 152 274 list trim; +#X obj 152 254 list prepend add; +#X text 41 39 [list-enumerate]; +#X text 57 73 serialize a list and put numbers in front of every element +; +#X msg 225 275 set; +#X obj 152 158 t a b; +#X msg 152 137 a b c d 0 1 2 3; +#X obj 243 216 bng 15 250 50 0 empty empty EOL 17 7 1 10 -262144 -1 +-1; +#N canvas 416 170 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 135 AUTHOR Frank Barknecht; +#X text 12 95 OUTLET_0 list; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION serialize a list and put numbers in front +of every element; +#X text 12 75 INLET_0 anything; +#X text 12 115 OUTLET_1 bang; +#X restore 477 417 pd META; +#X msg 152 303; +#X connect 0 0 2 0; +#X connect 0 1 8 0; +#X connect 1 0 10 0; +#X connect 2 0 1 0; +#X connect 5 0 10 0; +#X connect 6 0 0 0; +#X connect 6 1 5 0; +#X connect 7 0 6 0; diff --git a/list-abs/list-enumerate.pd b/list-abs/list-enumerate.pd new file mode 100755 index 0000000..e9c3c60 --- /dev/null +++ b/list-abs/list-enumerate.pd @@ -0,0 +1,35 @@ +#N canvas 596 471 450 300 10; +#X obj 152 100 list-drip; +#X obj 152 78 t a b; +#N canvas 473 338 450 300 count 0; +#X obj 131 154 f 0; +#X obj 156 153 + 1; +#X msg 147 133 0; +#X obj 131 183 outlet; +#X obj 131 59 inlet; +#X obj 131 96 b; +#X obj 178 61 inlet; +#X obj 178 98 b; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 1 0 0 1; +#X connect 2 0 0 1; +#X connect 4 0 5 0; +#X connect 5 0 0 0; +#X connect 6 0 7 0; +#X connect 7 0 2 0; +#X restore 231 170 pd count; +#X obj 152 128 t a b; +#X obj 152 48 inlet; +#X obj 152 196 list prepend; +#X obj 152 224 outlet; +#X obj 210 224 outlet; +#X connect 0 0 3 0; +#X connect 0 1 7 0; +#X connect 1 0 0 0; +#X connect 1 1 2 1; +#X connect 2 0 5 1; +#X connect 3 0 5 0; +#X connect 3 1 2 0; +#X connect 4 0 1 0; +#X connect 5 0 6 0; diff --git a/list-abs/list-equalize-help.pd b/list-abs/list-equalize-help.pd new file mode 100755 index 0000000..b68567b --- /dev/null +++ b/list-abs/list-equalize-help.pd @@ -0,0 +1,59 @@ +#N canvas 0 26 562 531 10; +#X obj 93 283 list-equalize; +#X obj 93 71 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 93 248 pack 0 0 0; +#X obj 115 209 t b f; +#X obj 161 212 t b f; +#X obj 93 310 unpack 0 0 0; +#X obj 128 71 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 161 71 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X floatatom 93 341 5 0 0 0 - - -; +#X floatatom 132 341 5 0 0 0 - - -; +#X floatatom 172 341 5 0 0 0 - - -; +#X obj 93 367 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 132 367 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 172 367 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X text 207 34 list-equalize:; +#X text 227 53 scale a list so that all float elements sum up to 1 +; +#X text 227 77 L_result = L_input / sum(L_input); +#X obj 306 253 list-equalize; +#X obj 306 280 print; +#X text 258 177 Also handles non-float elements gracefully.; +#X msg 306 226 90 plus 10 is 100; +#X text 40 138 0-127; +#X text 42 427 0-1; +#N canvas 416 170 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 115 AUTHOR Frank Barknecht; +#X text 12 95 OUTLET_0 list; +#X text 12 135 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION scale a list so that all float elements sum +up to 1; +#X text 12 5 KEYWORDS control list_op; +#X text 12 75 INLET_0 anything; +#X restore 500 502 pd META; +#X connect 0 0 5 0; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 2 0; +#X connect 3 1 2 1; +#X connect 4 0 2 0; +#X connect 4 1 2 2; +#X connect 5 0 8 0; +#X connect 5 1 9 0; +#X connect 5 2 10 0; +#X connect 6 0 3 0; +#X connect 7 0 4 0; +#X connect 8 0 11 0; +#X connect 9 0 12 0; +#X connect 10 0 13 0; +#X connect 17 0 18 0; +#X connect 20 0 17 0; diff --git a/list-abs/list-equalize.pd b/list-abs/list-equalize.pd new file mode 100755 index 0000000..2ba29a0 --- /dev/null +++ b/list-abs/list-equalize.pd @@ -0,0 +1,11 @@ +#N canvas 0 0 450 300 10; +#X obj 139 43 inlet; +#X obj 139 65 t a a; +#X obj 139 166 list-math /; +#X obj 211 93 list-accum; +#X obj 139 227 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 1 3 0; +#X connect 2 0 4 0; +#X connect 3 0 2 1; diff --git a/list-abs/list-extend-help.pd b/list-abs/list-extend-help.pd new file mode 100755 index 0000000..d91ca22 --- /dev/null +++ b/list-abs/list-extend-help.pd @@ -0,0 +1,36 @@ +#N canvas 0 26 481 399 10; +#X msg 102 183 1 2 3; +#X msg 156 290 bang; +#X msg 101 215 bang; +#X msg 102 161 a b c; +#X msg 102 139 x y z; +#X msg 154 259 A B C; +#X obj 68 323 list-extend; +#X obj 68 363 print LIST-EXTEND; +#X text 44 27 list-extend; +#X text 60 52 Build a list from incoming lists or elements.; +#X floatatom 101 119 5 0 0 0 - - -; +#X text 97 97 Add elements or lists and output stored list.; +#X text 146 219 output stored list; +#X text 201 261 set complete stored list; +#X text 201 292 set stored list to empty list (==reset); +#N canvas 491 26 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 105 OUTLET_0 list; +#X text 12 45 DESCRIPTION build a list from incoming lists or elements +; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 anything; +#X restore 426 372 pd META; +#X connect 0 0 6 0; +#X connect 1 0 6 1; +#X connect 2 0 6 0; +#X connect 3 0 6 0; +#X connect 4 0 6 0; +#X connect 5 0 6 1; +#X connect 6 0 7 0; +#X connect 10 0 6 0; diff --git a/list-abs/list-extend.pd b/list-abs/list-extend.pd new file mode 100755 index 0000000..afa47df --- /dev/null +++ b/list-abs/list-extend.pd @@ -0,0 +1,13 @@ +#N canvas 354 269 450 300 10; +#X obj 77 41 inlet; +#X obj 156 66 inlet; +#X obj 77 257 outlet; +#X text 72 21 add new elements to stored list and output it; +#X text 156 47 set stored list \, no output; +#X obj 77 153 list prepend; +#X obj 172 153 t a; +#X connect 0 0 5 0; +#X connect 1 0 5 1; +#X connect 5 0 6 0; +#X connect 5 0 2 0; +#X connect 6 0 5 1; diff --git a/list-abs/list-fifo-delim-help.pd b/list-abs/list-fifo-delim-help.pd new file mode 100755 index 0000000..768bca3 --- /dev/null +++ b/list-abs/list-fifo-delim-help.pd @@ -0,0 +1,55 @@ +#N canvas 0 26 697 652 10; +#X obj 193 561 print; +#X obj 193 357 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X msg 300 383 1 2 3 4 5; +#X symbolatom 313 404 10 0 0 0 - - -; +#X floatatom 326 421 5 0 0 0 - - -; +#X symbolatom 420 450 10 0 0 0 - - -; +#X msg 110 438 clear; +#X obj 293 535 bng 15 250 50 0 empty empty EOL 17 7 1 10 -262144 -1 +-1; +#X text 118 201 CAUTION:; +#X text 119 219 When a message contains the delimiter symbol \, it +is falsely split into two parts.; +#X text 119 254 Default delimiter between messages is the empty symbol. +You can customize this with the first argument:; +#X text 62 423 clear stored list; +#X text 164 340 trigger output; +#X text 289 341 store lists or elements; +#X text 417 433 manually change delimiter symbol; +#X text 105 606 Based on a patch and idea by Roman Haefli 2006; +#X msg 291 363 eins due trois four; +#X text 82 55 [list-fifo-delim]; +#X text 120 81 [list-fifo-delim] stores incoming (list-)messages and +outputs them one by one on incoming bangs in the order they arrive +like a FIFO: first in \, first out.; +#X text 118 136 [list-fifo-delim] can be used to limit the number of +messages passing during a certain time (might be usefull to limit the +used network bandwidth). It also can be used as a sequencer.; +#X obj 122 297 list-fifo-delim MY_DELIMITER; +#X obj 193 502 list-fifo-delim; +#X text 58 16 This object is obsolete! Use [list-fifo] instead!; +#N canvas 491 26 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 195 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 135 OUTLET_0 list; +#X text 12 45 DESCRIPTION This object is obsolete! Use [list-fifo] +instead!; +#X text 12 5 KEYWORDS control list_op deprecated; +#X text 12 75 INLET_0 bang clear; +#X text 12 115 INLET_2 symbol; +#X text 12 95 INLET_1 anything; +#X text 12 155 OUTLET_1 bang; +#X text 12 174 AUTHOR Frank Barknecht \, Roman Haefli; +#X restore 578 600 pd META; +#X connect 1 0 21 0; +#X connect 2 0 21 1; +#X connect 3 0 21 1; +#X connect 4 0 21 1; +#X connect 5 0 21 2; +#X connect 6 0 21 0; +#X connect 16 0 21 1; +#X connect 21 0 0 0; +#X connect 21 1 7 0; diff --git a/list-abs/list-fifo-delim.pd b/list-abs/list-fifo-delim.pd new file mode 100755 index 0000000..3edff37 --- /dev/null +++ b/list-abs/list-fifo-delim.pd @@ -0,0 +1,56 @@ +#N canvas 252 152 752 488 10; +#X obj 22 272 list split 1; +#X obj 22 224 until; +#X obj 259 67 list append [delim]; +#X obj 22 395 list; +#X obj 22 321 t b b; +#X obj 22 26 inlet trigger; +#X obj 259 25 inlet list; +#X obj 423 26 inlet delimiter; +#X obj 22 419 outlet; +#X obj 101 420 outlet; +#X obj 52 198 b; +#X obj 423 78 symbol \$1; +#X obj 441 48 loadbang; +#X obj 423 124 route symbol; +#X obj 22 75 route bang clear; +#X obj 22 250 list; +#X obj 259 155 list-extend; +#X obj 115 365 list-extend; +#X obj 301 131 t b b; +#X obj 157 338 t b b; +#X obj 22 296 select [delim]; +#X text 108 439 EOL; +#X text 20 440 list; +#X text 334 310 Based on a patch and idea by Roman Haefli 2006; +#X connect 0 0 20 0; +#X connect 0 1 15 1; +#X connect 0 1 16 1; +#X connect 0 2 9 0; +#X connect 0 2 10 0; +#X connect 1 0 15 0; +#X connect 2 0 16 0; +#X connect 3 0 8 0; +#X connect 4 0 3 0; +#X connect 4 1 1 1; +#X connect 4 1 17 1; +#X connect 5 0 14 0; +#X connect 6 0 2 0; +#X connect 7 0 11 0; +#X connect 10 0 1 1; +#X connect 11 0 13 0; +#X connect 12 0 11 0; +#X connect 13 0 2 1; +#X connect 13 0 20 1; +#X connect 14 0 1 0; +#X connect 14 1 18 0; +#X connect 14 1 19 0; +#X connect 15 0 0 0; +#X connect 16 0 15 1; +#X connect 17 0 3 1; +#X connect 18 0 16 0; +#X connect 18 1 16 1; +#X connect 19 0 17 0; +#X connect 19 1 17 1; +#X connect 20 0 4 0; +#X connect 20 1 17 0; diff --git a/list-abs/list-fifo-help.pd b/list-abs/list-fifo-help.pd new file mode 100755 index 0000000..726b2ab --- /dev/null +++ b/list-abs/list-fifo-help.pd @@ -0,0 +1,53 @@ +#N canvas 0 26 587 530 10; +#X msg 247 186 1 2 3 4 5; +#X symbolatom 260 207 10 0 0 0 - - -; +#X floatatom 273 224 5 0 0 0 - - -; +#X obj 198 339 bng 15 250 50 0 empty empty EOL 17 7 1 10 -262144 -1 +-1; +#X text 59 38 [list-fifo]; +#X text 97 64 [list-fifo] stores incoming (list-)messages and outputs +them one by one on incoming bangs in the order they arrive like a FIFO: +first in \, first out.; +#X msg 295 274 bang; +#X obj 140 305 list-fifo; +#X text 82 439 2007 Frank Barknecht; +#X msg 238 166 a b c; +#X msg 140 149 bang; +#X text 230 147 store lists or elements ("push"); +#X text 111 125 trigger output ("pop"); +#X text 277 255 clear stored list ("reset"); +#N canvas 0 0 450 300 show 0; +#X obj 60 48 inlet; +#X obj 60 72 list prepend set; +#X obj 60 97 list trim; +#X obj 60 126 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X restore 140 364 pd show; +#X msg 74 262 clear; +#X msg 140 390 1 2 3 4 5; +#N canvas 491 26 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 175 AUTHOR Frank Barknecht; +#X text 12 195 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 135 OUTLET_0 list; +#X text 12 95 INLET_1 anything; +#X text 12 155 OUTLET_1 bang; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION store incoming (list-)messages and output +them one by one on incoming bangs in the order they arrive; +#X text 12 75 INLET_0 bang; +#X text 12 115 INLET_2 bang; +#X restore 528 500 pd META; +#X connect 0 0 7 1; +#X connect 1 0 7 1; +#X connect 2 0 7 1; +#X connect 6 0 7 2; +#X connect 7 0 14 0; +#X connect 7 1 3 0; +#X connect 9 0 7 1; +#X connect 10 0 7 0; +#X connect 14 0 16 0; +#X connect 15 0 7 0; diff --git a/list-abs/list-fifo.pd b/list-abs/list-fifo.pd new file mode 100755 index 0000000..df41d6c --- /dev/null +++ b/list-abs/list-fifo.pd @@ -0,0 +1,53 @@ +#N canvas 300 195 729 624 10; +#X obj 268 56 inlet; +#X obj 268 184 t a a; +#X obj 268 250 list prepend; +#X obj 366 302 t b a; +#X obj 366 325 list; +#X obj 143 379 list; +#X obj 143 407 list split 1; +#X obj 143 492 list split; +#X obj 143 527 outlet; +#X obj 71 56 inlet; +#X text 380 252 prepend size of list; +#X obj 222 528 outlet; +#X obj 347 217 list-len; +#X obj 366 55 inlet; +#X text 419 304 store lists; +#X text 256 445 get length of next stored list and split it off.; +#X text 270 34 push; +#X text 365 35 reset stack; +#X obj 366 79 b; +#X obj 71 138 route clear; +#X obj 143 164 b; +#X text 69 34 pop (or clear); +#X obj 143 441 t b a; +#X obj 143 467 list append; +#X obj 71 164 b; +#X obj 268 301 list prepend; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 1 12 0; +#X connect 2 0 25 0; +#X connect 3 0 4 0; +#X connect 3 1 4 1; +#X connect 4 0 5 1; +#X connect 4 0 25 1; +#X connect 5 0 6 0; +#X connect 6 0 22 0; +#X connect 6 1 23 1; +#X connect 6 2 11 0; +#X connect 7 0 8 0; +#X connect 7 1 3 0; +#X connect 9 0 19 0; +#X connect 12 0 2 1; +#X connect 13 0 18 0; +#X connect 18 0 3 0; +#X connect 19 0 24 0; +#X connect 19 1 20 0; +#X connect 20 0 5 0; +#X connect 22 0 23 0; +#X connect 22 1 7 1; +#X connect 23 0 7 0; +#X connect 24 0 3 0; +#X connect 25 0 3 0; diff --git a/list-abs/list-filter-help.pd b/list-abs/list-filter-help.pd new file mode 100755 index 0000000..0463084 --- /dev/null +++ b/list-abs/list-filter-help.pd @@ -0,0 +1,81 @@ +#N canvas 0 26 583 620 10; +#X obj 226 453 mod 2; +#X obj 226 483 != 0; +#X obj 274 454 mod 3; +#X obj 274 483 != 0; +#X obj 226 517 &&; +#X obj 226 426 t a a; +#N canvas 0 0 450 300 show 0; +#X obj 129 107 list prepend set; +#X obj 129 129 list trim; +#X obj 129 79 inlet; +#X obj 129 154 outlet; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 0 0; +#X restore 70 548 pd show; +#X msg 70 574; +#X text 62 27 [list-filter]; +#X text 66 58 [list-filter] returns a sequence consisting of those +items from the sequence for which the user-defined operation cross-connected +to the rightmost in- and outlet is true.; +#X text 66 112 Everything that is not 0 is considered a TRUE value. +Internally [select 0] is used.; +#X msg 70 213 0 1 2 3 4 5; +#N canvas 0 0 450 300 show 0; +#X obj 129 107 list prepend set; +#X obj 129 129 list trim; +#X obj 129 79 inlet; +#X obj 129 154 outlet; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 0 0; +#X restore 70 306 pd show; +#X msg 70 332; +#X obj 167 266 >= 3; +#X text 67 163 Examples:; +#X text 217 266 remove values smaller than 3 from list; +#X obj 160 212 t b a; +#X floatatom 160 193 5 0 0 0 - - -; +#X text 200 212 "bang" to [list-filter] will resend the last list; +#X obj 70 265 list-filter; +#X text 70 362 Calculate some small primes:; +#X msg 70 387 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 +23 24; +#X obj 70 471 list-filter; +#X msg 82 526 bang; +#X msg 79 285 bang; +#N canvas 491 26 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 AUTHOR Frank Barknecht; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 115 OUTLET_0 list; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION return a list of items for which the operation +cross-connected to the rightmost in- and outlet is true.; +#X text 12 75 INLET_0 list; +#X text 12 95 INLET_1 float; +#X text 12 135 OUTLET_1 float; +#X restore 508 580 pd META; +#X connect 0 0 1 0; +#X connect 1 0 4 0; +#X connect 2 0 3 0; +#X connect 3 0 4 1; +#X connect 4 0 23 1; +#X connect 5 0 0 0; +#X connect 5 1 2 0; +#X connect 6 0 7 0; +#X connect 11 0 20 0; +#X connect 12 0 13 0; +#X connect 14 0 20 1; +#X connect 17 0 20 0; +#X connect 17 1 14 1; +#X connect 18 0 17 0; +#X connect 20 0 12 0; +#X connect 20 1 14 0; +#X connect 22 0 23 0; +#X connect 23 0 6 0; +#X connect 23 1 5 0; +#X connect 24 0 6 0; +#X connect 25 0 12 0; diff --git a/list-abs/list-filter.pd b/list-abs/list-filter.pd new file mode 100755 index 0000000..d466f14 --- /dev/null +++ b/list-abs/list-filter.pd @@ -0,0 +1,42 @@ +#N canvas 723 173 519 432 10; +#X obj 86 33 inlet; +#X obj 275 52 inlet; +#X obj 151 352 outlet; +#X obj 169 268 outlet; +#X obj 169 215 list-drip; +#X obj 326 250 list prepend; +#X obj 405 220 t a; +#X obj 86 58 route bang; +#X obj 151 84 t b a; +#X obj 151 124 list; +#X obj 275 111 select 0; +#X obj 326 133 b; +#X obj 326 209 list; +#X obj 169 244 t a a; +#X obj 151 317 list; +#X obj 151 155 t b a b b b; +#X obj 86 83 t b b; +#X connect 0 0 7 0; +#X connect 1 0 10 0; +#X connect 4 0 13 0; +#X connect 5 0 6 0; +#X connect 5 0 14 1; +#X connect 6 0 5 1; +#X connect 7 0 16 0; +#X connect 7 1 8 0; +#X connect 8 0 9 0; +#X connect 8 1 9 1; +#X connect 9 0 15 0; +#X connect 10 1 11 0; +#X connect 11 0 12 0; +#X connect 12 0 5 0; +#X connect 13 0 3 0; +#X connect 13 1 12 1; +#X connect 14 0 2 0; +#X connect 15 0 14 0; +#X connect 15 1 4 0; +#X connect 15 2 14 1; +#X connect 15 3 5 1; +#X connect 15 4 12 1; +#X connect 16 0 9 0; +#X connect 16 1 9 1; diff --git a/list-abs/list-find-help.pd b/list-abs/list-find-help.pd new file mode 100755 index 0000000..e11ddc8 --- /dev/null +++ b/list-abs/list-find-help.pd @@ -0,0 +1,62 @@ +#N canvas 0 26 552 533 10; +#X floatatom 159 259 5 0 0 0 - - -; +#X obj 144 331 list-find; +#X obj 202 293 loadbang; +#X obj 101 449 print FOUND_AT; +#X text 59 21 [list-find]; +#N canvas 516 236 450 300 collect 0; +#X obj 195 37 inlet; +#X obj 41 37 inlet; +#X obj 41 144 outlet; +#X msg 195 74 set; +#X text 143 140 1993-2004 by Karlheinz Essl; +#X text 143 160 vs. 1.1; +#X obj 41 99 list trim; +#X obj 41 74 list prepend add2; +#X connect 0 0 3 0; +#X connect 1 0 7 0; +#X connect 3 0 2 0; +#X connect 6 0 2 0; +#X connect 7 0 6 0; +#X restore 144 395 pd collect; +#X obj 144 309 t a b; +#X msg 159 237 0; +#X msg 189 237 4; +#X text 120 53 Find position(s) of a value in a list.; +#X text 120 72 Inlet0: value to search; +#X text 120 91 Inlet1: list to search in.; +#X msg 144 184 seven; +#X msg 202 315 0 1 2 3 4 5 6 seven eight 0 0; +#X msg 144 206 symbol eight; +#X msg 144 417; +#X text 120 110 Outlet0: stream of found positions; +#X floatatom 202 354 5 0 0 1 hits - -; +#X msg 219 237 100; +#X text 120 129 Outlet1: after list was completely scanned \, report +number of elements found.; +#N canvas 491 26 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 145 AUTHOR Frank Barknecht; +#X text 12 165 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 125 OUTLET_1 float; +#X text 12 45 DESCRIPTION find position(s) of a value in a list; +#X text 12 65 INLET_0 float; +#X text 12 85 INLET_1 list; +#X text 12 105 OUTLET_0 float; +#X restore 483 503 pd META; +#X connect 0 0 6 0; +#X connect 1 0 3 0; +#X connect 1 0 5 0; +#X connect 1 1 17 0; +#X connect 2 0 13 0; +#X connect 5 0 15 0; +#X connect 6 0 1 0; +#X connect 6 1 5 1; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 12 0 6 0; +#X connect 13 0 1 1; +#X connect 14 0 6 0; +#X connect 18 0 0 0; diff --git a/list-abs/list-find.pd b/list-abs/list-find.pd new file mode 100755 index 0000000..0d48eef --- /dev/null +++ b/list-abs/list-find.pd @@ -0,0 +1,60 @@ +#N canvas 372 65 643 444 10; +#X obj 91 359 f; +#X obj 91 51 inlet; +#X obj 183 47 inlet; +#X obj 91 396 outlet; +#X text 60 27 value to find; +#X obj 91 180 list-drip; +#X obj 91 210 t a b; +#X obj 91 158 list; +#X text 180 27 list to search in; +#X text 208 103 [list-find] Find positions of a value (symbol or float) +in a list.; +#X obj 91 293 compare-any; +#X obj 91 317 select 1; +#N canvas 0 0 450 300 count 0; +#X obj 120 148 f 0; +#X obj 148 149 + 1; +#X obj 163 100 0; +#X obj 117 24 inlet; +#X obj 119 176 outlet; +#X obj 181 25 inlet; +#X obj 114 47 b; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 1; +#X connect 3 0 6 0; +#X connect 5 0 2 0; +#X connect 6 0 0 0; +#X restore 121 245 pd count; +#X obj 91 80 t b a b b; +#X obj 176 395 outlet; +#X obj 248 351 + 1; +#X obj 176 375 f; +#X obj 219 350 f 1; +#X msg 235 317 1; +#X msg 199 318 0; +#X connect 0 0 3 0; +#X connect 1 0 13 0; +#X connect 2 0 7 1; +#X connect 5 0 6 0; +#X connect 5 1 16 0; +#X connect 6 0 10 0; +#X connect 6 1 12 0; +#X connect 7 0 5 0; +#X connect 10 0 11 0; +#X connect 11 0 0 0; +#X connect 11 0 17 0; +#X connect 12 0 0 1; +#X connect 13 0 7 0; +#X connect 13 1 10 1; +#X connect 13 2 12 1; +#X connect 13 3 18 0; +#X connect 13 3 19 0; +#X connect 15 0 17 1; +#X connect 16 0 14 0; +#X connect 17 0 16 1; +#X connect 17 0 15 0; +#X connect 18 0 17 1; +#X connect 19 0 16 1; diff --git a/list-abs/list-geometric-mean-help.pd b/list-abs/list-geometric-mean-help.pd new file mode 100755 index 0000000..0790a93 --- /dev/null +++ b/list-abs/list-geometric-mean-help.pd @@ -0,0 +1,201 @@ +#N struct 1106-dial float y; +#N canvas 0 31 540 547 10; +#N canvas 0 0 450 300 randlist 0; +#X obj 134 129 until; +#X msg 246 151 set; +#X msg 134 193 add2 \$1; +#X obj 112 101 t b f b; +#X obj 135 249 outlet; +#X obj 112 31 inlet; +#X obj 112 73 + 1; +#X obj 112 53 random 10; +#X obj 134 151 random 10; +#X obj 134 171 + 1; +#X connect 0 0 8 0; +#X connect 1 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 3 1 0 0; +#X connect 3 2 1 0; +#X connect 5 0 7 0; +#X connect 6 0 3 0; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X connect 9 0 2 0; +#X restore 153 266 pd randlist; +#X msg 153 244 bang; +#X floatatom 98 400 5 0 0 1 geometric_mean - -; +#X msg 153 292 8 6 7 3 8 3 1 7; +#X msg 98 189 1 2 3 4; +#X msg 98 215 any symbols 1 2 3 4 are ignored; +#X text 96 146 Non-floats in a list are silently dropped.; +#X obj 98 366 list-geometric-mean; +#X text 86 22 [list-geometric-mean]; +#X text 96 51 Calculates the geometric mean of a list (of floats) according +to:; +#X text 96 119 where n is the total number of floats in a list.; +#X text 232 329 0 destroys everything!; +#X msg 154 328 1 2 0 3 4; +#X text 114 91 geometric mean = pow(f0 * f1 * f2 * ... * fn \, 1/n) +; +#N canvas 318 53 648 574 graphical-mean 0; +#N canvas 0 0 450 300 randlist 0; +#X obj 134 129 until; +#X msg 246 151 set; +#X msg 134 213 add2 \$1; +#X obj 112 101 t b f b; +#X obj 135 249 outlet; +#X obj 112 31 inlet; +#X obj 134 151 random 100; +#X msg 112 59 10; +#X obj 134 191 / 10; +#X obj 134 170 + 1; +#X connect 0 0 6 0; +#X connect 1 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 3 1 0 0; +#X connect 3 2 1 0; +#X connect 5 0 7 0; +#X connect 6 0 9 0; +#X connect 7 0 3 0; +#X connect 8 0 2 0; +#X connect 9 0 8 0; +#X restore 79 388 pd randlist; +#X msg 79 366 bang; +#X obj 79 447 list prepend 0; +#X obj 79 500 s \$0-tab; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-tab 10 float 0; +#X coords 0 10 9 0 200 140 1; +#X restore 75 152 graph; +#N canvas 0 0 916 918 \$0-c 0; +#X scalar 1106-dial 0 \;; +#X coords 0 0 200 140 200 140 1; +#X restore 75 152 pd \$0-c; +#N canvas 0 0 503 429 create 0; +#X msg 242 258 traverse pd-\$1 \, bang; +#X obj 242 238 symbol \$0-c; +#X msg 107 79 0; +#X obj 242 278 pointer; +#X msg 243 178 clear; +#X obj 243 205 s pd-\$0-c; +#X obj 107 114 t a b b; +#X obj 107 50 loadbang; +#X obj 107 326 outlet; +#X obj 107 302 append \$0-dial y; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 2 0 6 0; +#X connect 3 0 9 1; +#X connect 4 0 5 0; +#X connect 6 0 9 0; +#X connect 6 1 1 0; +#X connect 6 2 4 0; +#X connect 7 0 2 0; +#X connect 9 0 8 0; +#X restore 468 339 pd create; +#X obj 339 127 metro 50; +#X obj 339 102 tgl 15 0 empty empty show-mean 17 7 1 10 -258699 -262144 +-1 0 1; +#N canvas 473 338 450 300 countto 0; +#X obj 131 154 f 0; +#X obj 156 153 + 1; +#X msg 174 113 0; +#X obj 131 183 outlet; +#X obj 131 59 inlet; +#X obj 131 116 until; +#X obj 131 96 t a b; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 1 0 0 1; +#X connect 2 0 0 1; +#X connect 4 0 6 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 6 1 2 0; +#X restore 362 195 pd countto; +#X obj 362 219 tabread \$0-tab; +#X obj 362 249 list prepend; +#X obj 452 249 t a; +#X msg 362 175 10; +#X obj 339 148 t b b b; +#X obj 339 274 list; +#X obj 79 344 loadbang; +#X msg 79 414 0.6 6.9 3.6 5.6 0.7 3.8 3.9 5.3 9.2 9.2; +#X text 77 30 Switch on the "show"-metro and play with the values in +the array.; +#N canvas 336 319 712 355 \$0-dial 0; +#X obj 19 119 outlet; +#X obj 19 86 route change; +#X obj 19 62 struct \$0-dial float y; +#X obj 229 62 drawpolygon 900 2 0 y 200 y; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X restore 453 315 pd \$0-dial; +#X msg 213 469 bounds 0 10 9 0; +#X obj 213 449 loadbang; +#X obj 339 388 set \$0-dial y; +#X floatatom 339 339 5 0 0 0 - - -; +#X msg 92 469 const 5; +#N canvas 0 0 299 354 scale 0; +#X msg 74 83 10 \$1; +#X obj 74 107 -; +#X obj 74 158 * 140; +#X obj 74 134 / 20; +#X obj 74 49 inlet; +#X obj 74 182 outlet; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 5 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X restore 339 363 pd scale; +#X obj 339 313 list-geometric-mean; +#X connect 0 0 17 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 6 0 22 1; +#X connect 7 0 14 0; +#X connect 8 0 7 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 0 15 1; +#X connect 12 0 11 1; +#X connect 13 0 9 0; +#X connect 14 0 15 0; +#X connect 14 1 13 0; +#X connect 14 2 11 1; +#X connect 15 0 26 0; +#X connect 16 0 1 0; +#X connect 17 0 2 0; +#X connect 19 0 22 1; +#X connect 20 0 3 0; +#X connect 21 0 20 0; +#X connect 23 0 25 0; +#X connect 24 0 3 0; +#X connect 25 0 22 0; +#X connect 26 0 23 0; +#X restore 98 420 pd graphical-mean; +#X obj 185 453 list-harmonic-mean; +#X obj 184 474 list-mean; +#X text 97 450 More means:; +#N canvas 491 26 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION calculate the geometric mean of a list of +floats; +#X text 12 65 INLET_0 list; +#X text 12 85 OUTLET_0 float; +#X restore 478 520 pd META; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 3 0 7 0; +#X connect 4 0 7 0; +#X connect 5 0 7 0; +#X connect 7 0 2 0; +#X connect 12 0 7 0; diff --git a/list-abs/list-geometric-mean.pd b/list-abs/list-geometric-mean.pd new file mode 100755 index 0000000..ca48459 --- /dev/null +++ b/list-abs/list-geometric-mean.pd @@ -0,0 +1,54 @@ +#N canvas 355 173 457 428 10; +#X obj 127 69 inlet; +#X obj 127 337 outlet; +#X obj 146 138 list-drip; +#X obj 146 164 route float; +#X obj 127 274 f; +#N canvas 425 298 450 300 count 0; +#X obj 133 59 b; +#X obj 133 35 inlet; +#X obj 183 35 inlet; +#X obj 164 111 + 1; +#X obj 133 133 outlet; +#X msg 183 71 1; +#X obj 133 110 f 1; +#X connect 0 0 6 0; +#X connect 1 0 0 0; +#X connect 2 0 5 0; +#X connect 3 0 6 1; +#X connect 5 0 6 1; +#X connect 6 0 3 0; +#X connect 6 0 4 0; +#X restore 222 226 pd count; +#X obj 146 189 t a b; +#X obj 127 105 t b a b b; +#X obj 222 253 pow -1; +#X obj 127 302 pow; +#N canvas 370 313 450 300 product 0; +#X obj 135 79 inlet; +#X obj 182 79 inlet; +#X obj 135 169 outlet; +#X obj 168 138 f; +#X obj 135 137 *; +#X obj 182 102 1; +#X connect 0 0 4 0; +#X connect 1 0 5 0; +#X connect 3 0 4 1; +#X connect 4 0 2 0; +#X connect 4 0 3 0; +#X connect 5 0 4 1; +#X restore 146 225 pd product; +#X connect 0 0 7 0; +#X connect 2 0 3 0; +#X connect 3 0 6 0; +#X connect 4 0 9 0; +#X connect 5 0 8 0; +#X connect 6 0 10 0; +#X connect 6 1 5 0; +#X connect 7 0 4 0; +#X connect 7 1 2 0; +#X connect 7 2 10 1; +#X connect 7 3 5 1; +#X connect 8 0 9 1; +#X connect 9 0 1 0; +#X connect 10 0 4 1; diff --git a/list-abs/list-group-help.pd b/list-abs/list-group-help.pd new file mode 100755 index 0000000..f8f3dcd --- /dev/null +++ b/list-abs/list-group-help.pd @@ -0,0 +1,40 @@ +#N canvas 0 26 706 457 10; +#X msg 118 97 list a b; +#X msg 132 122 list c d e f; +#X msg 199 225 3; +#X msg 152 175 list a b c d e; +#X msg 152 196 list f g; +#X text 55 45 list-group - group items into lists of the same size +; +#X text 150 151 remaining items are stored and used for the next group: +; +#X floatatom 209 245 5 0 0 0 - - -; +#X floatatom 73 230 5 0 0 0 - - -; +#X text 63 353 It's a clone of [zl group]; +#X obj 118 296 print list-group; +#X text 233 267 argument sets number of elements to group (default: +1); +#X text 257 220 change group size (at least 1) - changing will also +empty the internal buffer; +#X obj 118 268 list-group 2; +#X text 94 382 Also see; +#X obj 161 382 list-iter; +#N canvas 460 46 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 105 OUTLET_0 list; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 85 INLET_1 float; +#X text 12 45 DESCRIPTION group items into lists of the same size; +#X text 12 65 INLET_0 list; +#X restore 577 387 pd META; +#X connect 0 0 13 0; +#X connect 1 0 13 0; +#X connect 2 0 13 1; +#X connect 3 0 13 0; +#X connect 4 0 13 0; +#X connect 7 0 13 1; +#X connect 8 0 13 0; +#X connect 13 0 10 0; diff --git a/list-abs/list-group.pd b/list-abs/list-group.pd new file mode 100755 index 0000000..d48a567 --- /dev/null +++ b/list-abs/list-group.pd @@ -0,0 +1,38 @@ +#N canvas 172 34 832 393 10; +#X floatatom 385 85 5 0 0 2 change-size - -; +#X obj 341 40 inlet; +#X obj 180 60 inlet; +#X obj 180 302 outlet; +#X obj 341 84 f \$1; +#X obj 180 183 list prepend; +#X obj 180 111 t b a; +#X obj 180 138 until; +#X obj 261 270 t b a; +#X obj 261 153 list prepend; +#X obj 341 118 t b b f; +#X text 393 116 reset (b) and set new length (f).; +#X text 369 225 Lists shorter than group size are stored for next list. +Lists longer get split at group size \, shorter part is put out \, +longer part is re-evaluated.; +#X obj 395 40 loadbang; +#X obj 180 228 list split 1; +#X obj 387 154 max 1; +#X connect 0 0 10 0; +#X connect 1 0 4 0; +#X connect 2 0 6 0; +#X connect 4 0 10 0; +#X connect 5 0 14 0; +#X connect 6 0 7 0; +#X connect 6 1 9 0; +#X connect 7 0 5 0; +#X connect 8 0 7 1; +#X connect 8 1 9 1; +#X connect 9 0 5 1; +#X connect 10 0 5 1; +#X connect 10 1 9 1; +#X connect 10 2 15 0; +#X connect 13 0 4 0; +#X connect 14 0 3 0; +#X connect 14 1 5 1; +#X connect 14 2 8 0; +#X connect 15 0 14 1; diff --git a/list-abs/list-harmonic-mean-help.pd b/list-abs/list-harmonic-mean-help.pd new file mode 100755 index 0000000..ec1cc45 --- /dev/null +++ b/list-abs/list-harmonic-mean-help.pd @@ -0,0 +1,204 @@ +#N struct 1033-dial float y; +#N canvas 0 31 566 571 10; +#N canvas 0 0 450 300 randlist 0; +#X obj 134 129 until; +#X msg 246 151 set; +#X msg 134 193 add2 \$1; +#X obj 112 101 t b f b; +#X obj 135 249 outlet; +#X obj 112 31 inlet; +#X obj 112 73 + 1; +#X obj 112 53 random 10; +#X obj 134 151 random 10; +#X obj 134 171 + 1; +#X connect 0 0 8 0; +#X connect 1 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 3 1 0 0; +#X connect 3 2 1 0; +#X connect 5 0 7 0; +#X connect 6 0 3 0; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X connect 9 0 2 0; +#X restore 153 305 pd randlist; +#X msg 153 283 bang; +#X floatatom 98 439 5 0 0 1 harmonic_mean - -; +#X msg 153 331 3 5 3 3 8; +#X msg 98 228 1 2 3 4; +#X msg 98 254 any symbols 1 2 3 4 are ignored; +#X text 96 146 Non-floats in a list are silently dropped.; +#X text 96 119 where n is the total number of floats in a list.; +#N canvas 318 53 648 574 graphical-mean 0; +#N canvas 0 0 450 300 randlist 0; +#X obj 134 129 until; +#X msg 246 151 set; +#X msg 134 213 add2 \$1; +#X obj 112 101 t b f b; +#X obj 135 249 outlet; +#X obj 112 31 inlet; +#X obj 134 151 random 100; +#X msg 112 59 10; +#X obj 134 191 / 10; +#X obj 134 170 + 1; +#X connect 0 0 6 0; +#X connect 1 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 3 1 0 0; +#X connect 3 2 1 0; +#X connect 5 0 7 0; +#X connect 6 0 9 0; +#X connect 7 0 3 0; +#X connect 8 0 2 0; +#X connect 9 0 8 0; +#X restore 79 388 pd randlist; +#X msg 79 366 bang; +#X obj 79 447 list prepend 0; +#X obj 79 500 s \$0-tab; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-tab 10 float 0; +#X coords 0 10 9 0 200 140 1; +#X restore 75 152 graph; +#N canvas 0 0 916 918 \$0-c 0; +#X scalar 1033-dial 0 \;; +#X coords 0 0 200 140 200 140 1; +#X restore 75 152 pd \$0-c; +#N canvas 0 0 503 429 create 0; +#X msg 242 258 traverse pd-\$1 \, bang; +#X obj 242 238 symbol \$0-c; +#X msg 107 79 0; +#X obj 242 278 pointer; +#X msg 243 178 clear; +#X obj 243 205 s pd-\$0-c; +#X obj 107 114 t a b b; +#X obj 107 50 loadbang; +#X obj 107 326 outlet; +#X obj 107 302 append \$0-dial y; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 2 0 6 0; +#X connect 3 0 9 1; +#X connect 4 0 5 0; +#X connect 6 0 9 0; +#X connect 6 1 1 0; +#X connect 6 2 4 0; +#X connect 7 0 2 0; +#X connect 9 0 8 0; +#X restore 440 364 pd create; +#X obj 339 127 metro 50; +#X obj 339 102 tgl 15 0 empty empty show-mean 17 7 1 10 -258699 -262144 +-1 0 1; +#N canvas 473 338 450 300 countto 0; +#X obj 131 154 f 0; +#X obj 156 153 + 1; +#X msg 174 113 0; +#X obj 131 183 outlet; +#X obj 131 59 inlet; +#X obj 131 116 until; +#X obj 131 96 t a b; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 1 0 0 1; +#X connect 2 0 0 1; +#X connect 4 0 6 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 6 1 2 0; +#X restore 362 195 pd countto; +#X obj 362 219 tabread \$0-tab; +#X obj 362 249 list prepend; +#X obj 452 249 t a; +#X msg 362 175 10; +#X obj 339 148 t b b b; +#X obj 339 274 list; +#X obj 79 344 loadbang; +#X text 77 30 Switch on the "show"-metro and play with the values in +the array.; +#N canvas 336 319 712 355 \$0-dial 0; +#X obj 19 119 outlet; +#X obj 19 86 route change; +#X obj 19 62 struct \$0-dial float y; +#X obj 229 62 drawpolygon 900 2 0 y 200 y; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X restore 425 340 pd \$0-dial; +#X msg 213 469 bounds 0 10 9 0; +#X obj 213 449 loadbang; +#X obj 339 388 set \$0-dial y; +#X floatatom 339 339 5 0 0 0 - - -; +#X msg 92 469 const 5; +#N canvas 0 0 299 354 scale 0; +#X msg 74 83 10 \$1; +#X obj 74 107 -; +#X obj 74 158 * 140; +#X obj 74 134 / 20; +#X obj 74 49 inlet; +#X obj 74 182 outlet; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 5 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X restore 339 363 pd scale; +#X obj 339 313 list-harmonic-mean; +#X msg 79 414 5.7 6 8.1 9.9 3.1 6.5 9.7 5.8 5.6 0.9; +#X connect 0 0 26 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 6 0 21 1; +#X connect 7 0 14 0; +#X connect 8 0 7 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 0 15 1; +#X connect 12 0 11 1; +#X connect 13 0 9 0; +#X connect 14 0 15 0; +#X connect 14 1 13 0; +#X connect 14 2 11 1; +#X connect 15 0 25 0; +#X connect 16 0 1 0; +#X connect 18 0 21 1; +#X connect 19 0 3 0; +#X connect 20 0 19 0; +#X connect 22 0 24 0; +#X connect 23 0 3 0; +#X connect 24 0 21 0; +#X connect 25 0 22 0; +#X connect 26 0 2 0; +#X restore 98 459 pd graphical-mean; +#X obj 98 405 list-harmonic-mean; +#X text 86 22 [list-harmonic-mean]; +#X text 96 51 Calculates the harmonic mean of a list (of floats) according +to:; +#X msg 154 357 0 1 2 3 4; +#X text 234 357 0 makes the harmonic mean limit to 0; +#X text 95 171 If a 0 occurs \, the harmonic mean is set to 0 \, because +if one value approaches zero \, the harmonic mean limits to zero as +well.; +#X obj 185 493 list-geometric-mean; +#X obj 184 515 list-mean; +#X text 97 494 More means:; +#X text 114 91 harmonic mean = n / (1/f0 + 1/f1 + 1/f2 + ... + 1/fn) +; +#N canvas 491 26 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 65 INLET_0 list; +#X text 12 85 OUTLET_0 float; +#X text 12 45 DESCRIPTION Calculates the harmonic mean of a list of +floats; +#X restore 498 530 pd META; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 3 0 9 0; +#X connect 4 0 9 0; +#X connect 5 0 9 0; +#X connect 9 0 2 0; +#X connect 12 0 9 0; diff --git a/list-abs/list-harmonic-mean.pd b/list-abs/list-harmonic-mean.pd new file mode 100755 index 0000000..4152143 --- /dev/null +++ b/list-abs/list-harmonic-mean.pd @@ -0,0 +1,71 @@ +#N canvas 355 173 457 428 10; +#X obj 127 69 inlet; +#X obj 127 377 outlet; +#X obj 146 138 list-drip; +#X obj 146 164 route float; +#X obj 127 314 f; +#N canvas 425 298 450 300 count 0; +#X obj 133 59 b; +#X obj 133 35 inlet; +#X obj 183 35 inlet; +#X obj 164 111 + 1; +#X obj 133 133 outlet; +#X msg 183 71 1; +#X obj 133 110 f 1; +#X connect 0 0 6 0; +#X connect 1 0 0 0; +#X connect 2 0 5 0; +#X connect 3 0 6 1; +#X connect 5 0 6 1; +#X connect 6 0 3 0; +#X connect 6 0 4 0; +#X restore 238 225 pd count; +#X obj 146 189 t a b; +#X obj 127 105 t b a b b; +#X obj 146 250 pow -1; +#X obj 127 342 *; +#N canvas 370 313 660 345 sum-reci 0; +#X obj 84 40 inlet; +#X obj 183 40 inlet; +#X obj 135 249 outlet; +#X obj 168 218 f; +#X obj 135 217 +; +#X obj 183 183 0; +#X obj 135 184 pow -1; +#X obj 84 149 select 0; +#X obj 219 249 outlet; +#X obj 84 122 spigot 1; +#X msg 135 90 1; +#X msg 84 176 0; +#X text 270 253 if a 0 occurs \, the harmonic mean always is 0 \, too! +; +#X connect 0 0 9 0; +#X connect 1 0 5 0; +#X connect 1 0 10 0; +#X connect 3 0 4 1; +#X connect 4 0 2 0; +#X connect 4 0 3 0; +#X connect 5 0 4 1; +#X connect 6 0 4 0; +#X connect 7 0 11 0; +#X connect 7 1 6 0; +#X connect 9 0 7 0; +#X connect 10 0 9 1; +#X connect 11 0 9 1; +#X connect 11 0 8 0; +#X restore 146 225 pd sum-reci; +#X connect 0 0 7 0; +#X connect 2 0 3 0; +#X connect 3 0 6 0; +#X connect 4 0 9 0; +#X connect 5 0 9 1; +#X connect 6 0 10 0; +#X connect 6 1 5 0; +#X connect 7 0 4 0; +#X connect 7 1 2 0; +#X connect 7 2 10 1; +#X connect 7 3 5 1; +#X connect 8 0 4 1; +#X connect 9 0 1 0; +#X connect 10 0 8 0; +#X connect 10 1 4 1; diff --git a/list-abs/list-idx-help.pd b/list-abs/list-idx-help.pd new file mode 100755 index 0000000..d2d9792 --- /dev/null +++ b/list-abs/list-idx-help.pd @@ -0,0 +1,28 @@ +#N canvas 0 31 434 313 10; +#X obj 136 121 t b f; +#X symbolatom 136 222 10 0 0 0 - - -; +#X obj 136 78 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 +-1 0; +#X msg 136 166 a b c d e f g h; +#X obj 136 193 list-idx 2; +#X text 86 52 list-idx: Get element at position idx.; +#X floatatom 136 102 5 0 0 0 - - -; +#X obj 136 245 print; +#N canvas 444 31 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 float; +#X text 12 105 OUTLET_0 symbol float pointer; +#X text 12 45 DESCRIPTION get element at position idx; +#X restore 377 287 pd META; +#X connect 0 0 3 0; +#X connect 0 1 4 1; +#X connect 1 0 7 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 1 0; +#X connect 6 0 0 0; diff --git a/list-abs/list-idx.pd b/list-abs/list-idx.pd new file mode 100755 index 0000000..6fc68bc --- /dev/null +++ b/list-abs/list-idx.pd @@ -0,0 +1,14 @@ +#N canvas 0 0 450 300 10; +#X obj 122 108 inlet; +#X obj 197 69 loadbang; +#X obj 187 95 f \$1; +#X obj 154 210 outlet; +#X obj 187 47 inlet; +#X obj 154 176 list split 1; +#X obj 122 139 list-splat; +#X connect 0 0 6 0; +#X connect 1 0 2 0; +#X connect 2 0 6 1; +#X connect 4 0 2 0; +#X connect 5 0 3 0; +#X connect 6 1 5 0; diff --git a/list-abs/list-insert-help.pd b/list-abs/list-insert-help.pd new file mode 100755 index 0000000..2b39903 --- /dev/null +++ b/list-abs/list-insert-help.pd @@ -0,0 +1,37 @@ +#N canvas 0 31 451 383 10; +#X obj 125 251 list-insert 2; +#X obj 168 172 hradio 15 1 0 8 empty empty POS_(zero-based) 0 -6 0 +8 -262144 -1 -1 0; +#X msg 233 222 0 1 2 3 4 5 6; +#X text 231 203 original list; +#X floatatom 168 197 5 0 0 0 - - -; +#X text 68 69 Argument: default POS; +#X text 67 49 POS is zerobased. Negative POS will count from the end. +; +#X msg 125 132 list SOME ELEMENTS; +#X msg 125 162 INS; +#X text 65 12 list-insert: insert LIST before element at position POS +in original list.; +#X obj 125 280 print NEW_LIST; +#X floatatom 125 190 5 0 0 0 - - -; +#X text 125 113 LIST or element to insert; +#N canvas 461 31 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 AUTHOR Frank Barknecht; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 75 INLET_0 anything; +#X text 12 95 INLET_1 float; +#X text 12 45 DESCRIPTION insert LIST before element at position POS +in original list; +#X text 12 115 INLET_2 anything; +#X text 12 135 OUTLET_0 list; +#X restore 397 357 pd META; +#X connect 0 0 10 0; +#X connect 1 0 4 0; +#X connect 2 0 0 2; +#X connect 4 0 0 1; +#X connect 7 0 0 0; +#X connect 8 0 0 0; +#X connect 11 0 0 0; diff --git a/list-abs/list-insert.pd b/list-abs/list-insert.pd new file mode 100755 index 0000000..0953826 --- /dev/null +++ b/list-abs/list-insert.pd @@ -0,0 +1,63 @@ +#N canvas 313 86 599 614 10; +#X obj 94 50 inlet; +#X obj 259 133 inlet; +#X obj 308 134 inlet; +#X text 257 112 pos; +#X text 306 113 list; +#X obj 173 180 list; +#X obj 94 528 outlet; +#X obj 94 308 list; +#X obj 94 250 list prepend; +#X text 91 29 list to insert; +#X obj 173 206 list-splat \$1; +#X obj 371 246 > 0; +#X obj 292 337 route 0 1; +#X obj 292 316 list prepend; +#X obj 292 371 list prepend; +#X obj 393 370 list; +#X obj 94 75 t a b b a; +#X obj 152 100 s \$0-insert; +#X obj 416 338 r \$0-insert; +#X obj 149 122 s \$0-init; +#X obj 190 250 r \$0-init; +#X obj 322 290 s \$0-out-of-range; +#X obj 145 350 r \$0-out-of-range; +#X obj 292 243 t a b; +#X obj 94 374 spigot 1; +#X obj 397 157 s \$0-out-of-range; +#X obj 397 108 r \$0-init; +#X obj 397 130 1; +#X obj 322 266 0; +#X obj 130 307 r \$0-init; +#X text 231 524 This is more complicated than I thought!; +#X connect 0 0 16 0; +#X connect 1 0 10 1; +#X connect 1 0 11 0; +#X connect 2 0 5 1; +#X connect 5 0 10 0; +#X connect 7 0 24 0; +#X connect 8 0 7 0; +#X connect 10 0 8 1; +#X connect 10 1 7 1; +#X connect 10 2 23 0; +#X connect 11 0 13 1; +#X connect 12 0 14 0; +#X connect 12 1 15 0; +#X connect 13 0 12 0; +#X connect 14 0 6 0; +#X connect 15 0 6 0; +#X connect 16 0 8 0; +#X connect 16 1 5 0; +#X connect 16 2 19 0; +#X connect 16 3 17 0; +#X connect 18 0 15 1; +#X connect 18 0 14 1; +#X connect 20 0 8 1; +#X connect 22 0 24 1; +#X connect 23 0 13 0; +#X connect 23 1 28 0; +#X connect 24 0 6 0; +#X connect 26 0 27 0; +#X connect 27 0 25 0; +#X connect 28 0 21 0; +#X connect 29 0 7 1; diff --git a/list-abs/list-inter-help.pd b/list-abs/list-inter-help.pd new file mode 100755 index 0000000..c166b90 --- /dev/null +++ b/list-abs/list-inter-help.pd @@ -0,0 +1,58 @@ +#N canvas 0 31 555 606 10; +#X text 101 83 inlets:; +#X text 115 101 1) float 0-1: distance between lists; +#X text 117 122 2) list 1; +#X text 117 141 2) list 2; +#X text 95 30 list-inter: elementwise linear interpolation between +two (float) lists.; +#X obj 228 153 hsl 128 15 0 1 0 0 empty empty factor_(0-1) -2 -6 0 +10 -262144 -1 -1 0 0; +#X obj 225 359 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 264 359 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 304 359 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X floatatom 225 333 5 0 0 0 - - -; +#X floatatom 264 333 5 0 0 0 - - -; +#X floatatom 304 333 5 0 0 0 - - -; +#X obj 225 282 list-inter; +#X text 87 519 Also see [triple-scale] \, but [list-inter] works for +float lists of arbitrary length.; +#X obj 225 311 unpack 0 0 0 0; +#X obj 343 360 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X floatatom 343 334 5 0 0 0 - - -; +#X obj 164 307 print; +#X text 96 63 Non-float elements in first list will be kept.; +#X msg 257 181 5 2 9 3; +#X msg 267 207 5 x 9 3; +#X text 326 207 careful!; +#X msg 290 255 8 7 1 10; +#N canvas 432 135 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 AUTHOR Frank Barknecht; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 135 OUTLET_0 list; +#X text 12 45 DESCRIPTION elementwise linear interpolation between +two (float) lists; +#X text 12 75 INLET_0 float; +#X text 12 95 INLET_1 list; +#X text 12 115 INLET_2 list; +#X restore 497 577 pd META; +#X connect 5 0 12 0; +#X connect 9 0 6 0; +#X connect 10 0 7 0; +#X connect 11 0 8 0; +#X connect 12 0 14 0; +#X connect 12 0 17 0; +#X connect 14 0 9 0; +#X connect 14 1 10 0; +#X connect 14 2 11 0; +#X connect 14 3 16 0; +#X connect 16 0 15 0; +#X connect 19 0 12 1; +#X connect 20 0 12 1; +#X connect 22 0 12 2; diff --git a/list-abs/list-inter-many-help.pd b/list-abs/list-inter-many-help.pd new file mode 100755 index 0000000..dd957c8 --- /dev/null +++ b/list-abs/list-inter-many-help.pd @@ -0,0 +1,103 @@ +#N canvas 0 31 579 616 10; +#X obj 195 419 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 234 419 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 274 419 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X floatatom 195 393 5 0 0 0 - - -; +#X floatatom 234 393 5 0 0 0 - - -; +#X floatatom 274 393 5 0 0 0 - - -; +#X obj 195 371 unpack 0 0 0 0; +#X obj 313 420 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X floatatom 313 394 5 0 0 0 - - -; +#X obj 195 342 list-inter-many; +#N canvas 239 261 368 386 randlist 0; +#X msg 141 73 4; +#X obj 141 103 until; +#X obj 141 130 random 100; +#X obj 141 157 / 10; +#X obj 141 199 list prepend; +#X obj 232 200 t a; +#X obj 118 242 list; +#X obj 118 47 t b b b; +#X obj 118 24 inlet; +#X obj 118 318 outlet; +#X connect 0 0 1 0; +#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 6 1; +#X connect 5 0 4 1; +#X connect 6 0 9 0; +#X connect 7 0 6 0; +#X connect 7 1 0 0; +#X connect 7 2 4 1; +#X connect 8 0 7 0; +#X restore 385 252 pd randlist; +#X msg 295 307 clear; +#X msg 295 285 print; +#X msg 385 230 add random list; +#X obj 195 261 / 100; +#X floatatom 195 238 5 0 0 0 - - -; +#X obj 385 207 until; +#X msg 385 184 4; +#X obj 244 262 line; +#X floatatom 244 291 5 0 0 0 - - -; +#X msg 244 239 0 \, 3 2000; +#X msg 385 404; +#X text 390 382 textfile contents:; +#X msg 339 346 set; +#X text 117 581 Also see:; +#X obj 193 582 list-inter; +#X text 97 16 [list-inter-many]; +#X obj 385 274 list prepend add; +#X obj 385 297 list trim; +#X text 94 73 Inlets:; +#X text 94 41 Elementwise linear interpolation between several float +lists stored in a [textfile] object internally.; +#X text 98 188 Outlet: interpolated list.; +#X text 108 151 1) [textfile] inlet. Use the selector "add" to add +lists to the interpolation space; +#X text 108 96 0) float: distance between lists. Values between 0 and +1 will interpolate the first two lists \, values between 1 and 2 interpolate +the second with the third list and so on.; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 135 AUTHOR Frank Barknecht; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 115 OUTLET_0 list; +#X text 12 75 INLET_0 float; +#X text 12 95 INLET_1 print add clear; +#X text 12 45 DESCRIPTION elementwise linear interpolation between +several float lists; +#X restore 517 587 pd META; +#X connect 3 0 0 0; +#X connect 4 0 1 0; +#X connect 5 0 2 0; +#X connect 6 0 3 0; +#X connect 6 1 4 0; +#X connect 6 2 5 0; +#X connect 6 3 8 0; +#X connect 8 0 7 0; +#X connect 9 0 6 0; +#X connect 10 0 27 0; +#X connect 11 0 9 1; +#X connect 11 0 23 0; +#X connect 12 0 9 1; +#X connect 13 0 10 0; +#X connect 14 0 9 0; +#X connect 15 0 14 0; +#X connect 16 0 13 0; +#X connect 17 0 16 0; +#X connect 18 0 9 0; +#X connect 18 0 19 0; +#X connect 20 0 18 0; +#X connect 23 0 21 0; +#X connect 27 0 28 0; +#X connect 28 0 9 1; +#X connect 28 0 21 0; diff --git a/list-abs/list-inter-many.pd b/list-abs/list-inter-many.pd new file mode 100755 index 0000000..7687e89 --- /dev/null +++ b/list-abs/list-inter-many.pd @@ -0,0 +1,83 @@ +#N canvas 452 377 578 375 10; +#X obj 85 312 list-inter; +#X obj 263 227 textfile; +#N canvas 490 388 450 300 get-list 0; +#X obj 61 48 inlet; +#X msg 105 133 rewind; +#X obj 83 158 until; +#X obj 61 74 f; +#X obj 61 97 t b a b; +#X obj 61 221 outlet; +#X obj 83 202 outlet; +#X connect 0 0 3 0; +#X connect 1 0 6 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 4 1 2 0; +#X connect 4 2 1 0; +#X restore 191 193 pd get-list; +#X obj 191 263 list; +#X obj 337 27 inlet; +#X obj 191 97 int; +#X obj 191 161 + 1; +#X obj 191 139 t a a; +#X obj 221 161 + 2; +#N canvas 490 388 450 300 get-list 0; +#X obj 61 48 inlet; +#X msg 105 133 rewind; +#X obj 83 158 until; +#X obj 61 74 f; +#X obj 61 97 t b a b; +#X obj 61 221 outlet; +#X obj 83 198 outlet; +#X connect 0 0 3 0; +#X connect 1 0 6 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 4 1 2 0; +#X connect 4 2 1 0; +#X restore 358 192 pd get-list; +#X obj 358 262 list; +#X obj 191 119 change; +#X obj 85 22 inlet; +#X obj 85 47 t a a; +#X obj 85 335 outlet; +#X obj 337 84 t b a; +#X obj 147 77 moses 0; +#N canvas 0 0 450 300 wrap 0; +#X obj 139 160 -; +#X obj 169 137 int; +#X obj 139 116 t a a; +#X obj 139 91 inlet; +#X obj 139 185 outlet; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 2 1 1 0; +#X connect 3 0 2 0; +#X restore 85 128 pd wrap; +#X connect 0 0 14 0; +#X connect 1 0 3 1; +#X connect 1 0 10 1; +#X connect 2 0 3 0; +#X connect 2 1 1 0; +#X connect 3 0 0 1; +#X connect 4 0 15 0; +#X connect 5 0 11 0; +#X connect 6 0 2 0; +#X connect 7 0 6 0; +#X connect 7 1 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 9 1 1 0; +#X connect 10 0 0 2; +#X connect 11 0 7 0; +#X connect 12 0 13 0; +#X connect 13 0 17 0; +#X connect 13 1 16 0; +#X connect 15 0 11 0; +#X connect 15 1 1 0; +#X connect 16 1 5 0; +#X connect 17 0 0 0; diff --git a/list-abs/list-inter.pd b/list-abs/list-inter.pd new file mode 100755 index 0000000..2ee96c1 --- /dev/null +++ b/list-abs/list-inter.pd @@ -0,0 +1,48 @@ +#N canvas 364 37 760 649 10; +#X obj 345 204 list-drip; +#X obj 426 327 list-dripslow; +#X obj 345 264 t a b; +#X obj 439 434 t l; +#X obj 322 477 list; +#X obj 322 502 outlet; +#X obj 345 176 list; +#X obj 368 145 inlet; +#X obj 535 282 inlet; +#X obj 345 64 inlet; +#X obj 345 434 list prepend; +#X obj 345 369 expr $f3*($f2-$f1) + $f1; +#X text 23 67 inlets:; +#X text 37 85 1) float 0-1: distance between lists; +#X text 39 106 2) list 1; +#X text 39 125 2) list 2; +#X text 20 25 list-inter: elementwise linear interpolation between +two (float) lists.; +#X obj 345 93 t b f b; +#X obj 512 303 list; +#X obj 512 259 r \$0-start; +#X obj 389 117 s \$0-start; +#X obj 424 411 r \$0-start; +#X obj 345 226 route float; +#X text 14 197 Non-float elements in first list will be kept.; +#X connect 0 0 22 0; +#X connect 0 1 4 0; +#X connect 1 0 11 1; +#X connect 2 0 11 0; +#X connect 2 1 1 0; +#X connect 3 0 10 1; +#X connect 4 0 5 0; +#X connect 6 0 0 0; +#X connect 7 0 6 1; +#X connect 8 0 18 1; +#X connect 9 0 17 0; +#X connect 10 0 3 0; +#X connect 10 0 4 1; +#X connect 11 0 10 0; +#X connect 17 0 6 0; +#X connect 17 1 11 2; +#X connect 17 2 20 0; +#X connect 18 0 1 1; +#X connect 19 0 18 0; +#X connect 21 0 10 1; +#X connect 22 0 2 0; +#X connect 22 1 10 0; diff --git a/list-abs/list-invint-help.pd b/list-abs/list-invint-help.pd new file mode 100755 index 0000000..c080d0a --- /dev/null +++ b/list-abs/list-invint-help.pd @@ -0,0 +1,18 @@ +#N canvas 121 115 518 278 10; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION Inverse (musical) intervals of a float list +; +#X text 12 65 INLET_0 list; +#X text 12 85 OUTLET_0 list; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht; +#X restore 443 251 pd META; +#X obj 52 127 list-invint; +#X msg 52 81 10 11 13 20; +#X obj 52 164 print; +#X text 38 26 list-invint: Inverse (musical) intervals of a float list +; +#X connect 1 0 3 0; +#X connect 2 0 1 0; diff --git a/list-abs/list-invint.pd b/list-abs/list-invint.pd new file mode 100755 index 0000000..8109421 --- /dev/null +++ b/list-abs/list-invint.pd @@ -0,0 +1,22 @@ +#N canvas 229 30 753 746 10; +#X obj 133 132 inlet; +#X text 211 80 list-invint: Inverse intervals of a float list; +#X msg 76 82 10 11 13 20; +#X obj 133 351 outlet; +#X obj 133 302 list-map; +#X obj 217 319 -; +#X obj 242 256 * 2; +#X obj 217 289 swap; +#X obj 133 166 t a a; +#X obj 242 230 list split 1; +#X connect 0 0 8 0; +#X connect 2 0 8 0; +#X connect 4 0 3 0; +#X connect 4 1 7 0; +#X connect 5 0 4 1; +#X connect 6 0 7 1; +#X connect 7 0 5 0; +#X connect 7 1 5 1; +#X connect 8 0 4 0; +#X connect 8 1 9 0; +#X connect 9 0 6 0; diff --git a/list-abs/list-iter-help.pd b/list-abs/list-iter-help.pd new file mode 100755 index 0000000..be97e84 --- /dev/null +++ b/list-abs/list-iter-help.pd @@ -0,0 +1,37 @@ +#N canvas 0 32 584 444 10; +#X msg 118 97 list a b; +#X msg 132 122 list c d e f; +#X msg 192 225 3; +#X msg 152 155 list a b c d e; +#X msg 152 176 list f g; +#X floatatom 202 245 5 0 0 0 - - -; +#X floatatom 73 230 5 0 0 0 - - -; +#X text 55 45 list-iter - group lists into sub-lists with size-limit +; +#X text 63 353 It's a clone of [zl iter]; +#X text 94 382 Also see; +#X obj 161 382 list-group; +#X obj 118 296 print list-iter; +#X obj 118 268 list-iter 2; +#X text 241 224 change size limit (must be at least 1); +#X text 233 267 argument sets size limit. Default: 1; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 105 OUTLET_0 list; +#X text 12 45 DESCRIPTION group lists into sub-lists with size-limit +; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 float; +#X restore 527 417 pd META; +#X connect 0 0 12 0; +#X connect 1 0 12 0; +#X connect 2 0 12 1; +#X connect 3 0 12 0; +#X connect 4 0 12 0; +#X connect 5 0 12 1; +#X connect 6 0 12 0; +#X connect 12 0 11 0; diff --git a/list-abs/list-iter.pd b/list-abs/list-iter.pd new file mode 100755 index 0000000..9fd901c --- /dev/null +++ b/list-abs/list-iter.pd @@ -0,0 +1,37 @@ +#N canvas 172 34 839 437 10; +#X floatatom 343 76 5 0 0 2 change-size - -; +#X obj 299 41 inlet; +#X obj 138 51 inlet; +#X obj 138 343 outlet; +#X obj 299 75 f \$1; +#X obj 138 174 list prepend; +#X obj 138 102 t b a; +#X obj 138 129 until; +#X obj 219 261 t b a; +#X text 351 107 reset (b) and set new length (f).; +#X text 327 216 Lists shorter than group size are stored for next list. +Lists longer get split at group size \, shorter part is put out \, +longer part is re-evaluated.; +#X obj 251 283 route bang; +#X obj 138 219 list split 1; +#X obj 331 186 max 1; +#X obj 299 109 t b f; +#X obj 343 41 loadbang; +#X connect 0 0 14 0; +#X connect 1 0 4 0; +#X connect 2 0 6 0; +#X connect 4 0 14 0; +#X connect 5 0 12 0; +#X connect 6 0 7 0; +#X connect 6 1 5 1; +#X connect 7 0 5 0; +#X connect 8 0 7 1; +#X connect 8 1 11 0; +#X connect 11 1 3 0; +#X connect 12 0 3 0; +#X connect 12 1 5 1; +#X connect 12 2 8 0; +#X connect 13 0 12 1; +#X connect 14 0 5 1; +#X connect 14 1 13 0; +#X connect 15 0 4 0; diff --git a/list-abs/list-l2s-help.pd b/list-abs/list-l2s-help.pd new file mode 100755 index 0000000..2daf4e1 --- /dev/null +++ b/list-abs/list-l2s-help.pd @@ -0,0 +1,33 @@ +#N canvas 0 31 518 278 10; +#X msg 52 90 a b c d 1 2; +#X msg 165 90 a b c d 1 2; +#X msg 288 91 a b c d 1 2; +#X symbolatom 165 154 15 0 0 0 - - -; +#X symbolatom 52 155 10 0 0 0 - - -; +#X symbolatom 288 154 25 0 0 0 - - -; +#X obj 52 127 list-l2s; +#X obj 165 126 list-l2s -; +#X obj 288 124 list-l2s _|_; +#X msg 395 90 symbol PD; +#X text 54 42 Concatenate a list into a single symbol using ARG1 as +delimiter. Delimiter can be set through second inlet.; +#X text 55 20 list-l2s; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 135 AUTHOR Frank Barknecht; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op symbol_op; +#X text 12 45 DESCRIPTION concatenate a list into a single symbol using +ARG1 as delimiter; +#X text 12 75 INLET_0 anything; +#X text 12 95 INLET_1 symbol; +#X text 12 115 OUTLET_0 symbol; +#X restore 443 251 pd META; +#X connect 0 0 6 0; +#X connect 1 0 7 0; +#X connect 2 0 8 0; +#X connect 6 0 4 0; +#X connect 7 0 3 0; +#X connect 8 0 5 0; +#X connect 9 0 8 1; diff --git a/list-abs/list-l2s.pd b/list-abs/list-l2s.pd new file mode 100755 index 0000000..2de5130 --- /dev/null +++ b/list-abs/list-l2s.pd @@ -0,0 +1,42 @@ +#N canvas 424 382 729 381 10; +#X msg 327 196 set %s; +#X obj 235 244 t a; +#X obj 118 252 makefilename %s; +#X obj 96 62 t b a b; +#X obj 96 283 symbol; +#X msg 142 22 a b c d 1 2; +#X obj 118 158 route symbol float; +#X obj 118 186 symbol; +#X obj 96 21 inlet; +#X obj 96 313 outlet; +#X obj 395 192 makefilename 1%s%%s; +#X obj 395 165 symbol \$1; +#X msg 405 123 bang; +#X obj 395 89 loadbang; +#X msg 395 228 set set \, adddollsym \$1; +#X msg 235 265 set \$1%s; +#X obj 447 124 inlet; +#X obj 178 190 makefilename %g; +#X obj 118 123 list-drip; +#X connect 0 0 2 0; +#X connect 1 0 15 0; +#X connect 2 0 1 0; +#X connect 2 0 4 1; +#X connect 3 0 4 0; +#X connect 3 1 18 0; +#X connect 3 2 0 0; +#X connect 4 0 9 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 6 1 17 0; +#X connect 7 0 2 0; +#X connect 8 0 3 0; +#X connect 10 0 14 0; +#X connect 11 0 10 0; +#X connect 12 0 11 0; +#X connect 13 0 11 0; +#X connect 14 0 15 0; +#X connect 15 0 2 0; +#X connect 16 0 11 0; +#X connect 17 0 2 0; +#X connect 18 0 6 0; diff --git a/list-abs/list-lastx-help.pd b/list-abs/list-lastx-help.pd new file mode 100755 index 0000000..f60af8e --- /dev/null +++ b/list-abs/list-lastx-help.pd @@ -0,0 +1,23 @@ +#N canvas 0 31 498 331 10; +#X floatatom 168 128 5 0 0 0 - - -; +#X obj 168 184 print last_x; +#X floatatom 247 129 5 0 0 2 change-size - -; +#X text 104 62 list-lastx: make a list of the last x floats.; +#X obj 168 153 list-lastx 4; +#X msg 266 153 bang; +#X text 308 152 reset stored list; +#N canvas 460 31 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION make a list of the last x floats; +#X text 12 65 INLET_0 float; +#X text 12 85 INLET_1 float bang; +#X text 12 105 OUTLET_0 list; +#X restore 425 291 pd META; +#X connect 0 0 4 0; +#X connect 2 0 4 1; +#X connect 4 0 1 0; +#X connect 5 0 4 1; diff --git a/list-abs/list-lastx.pd b/list-abs/list-lastx.pd new file mode 100755 index 0000000..50401a2 --- /dev/null +++ b/list-abs/list-lastx.pd @@ -0,0 +1,25 @@ +#N canvas 119 92 810 481 10; +#X obj 153 175 cnv 15 150 80 empty empty empty 20 12 0 14 -233017 -66577 +0; +#X floatatom 370 79 5 0 0 2 change-size - -; +#X obj 326 112 t f b; +#X text 378 110 first reset (b) \, then set new length (f).; +#X text 311 195 Right outlet is responsible to first fill the list +; +#X text 312 211 Left outlet then only lets the smaller list pass.; +#X obj 180 183 list; +#X obj 326 54 inlet; +#X obj 180 149 inlet; +#X obj 180 302 outlet; +#X obj 180 228 list split \$1; +#X obj 326 78 f \$1; +#X connect 1 0 2 0; +#X connect 2 0 10 1; +#X connect 2 1 6 1; +#X connect 6 0 10 0; +#X connect 7 0 11 0; +#X connect 8 0 6 0; +#X connect 10 0 6 1; +#X connect 10 0 9 0; +#X connect 10 2 6 1; +#X connect 11 0 2 0; diff --git a/list-abs/list-len-help.pd b/list-abs/list-len-help.pd new file mode 100755 index 0000000..5292e45 --- /dev/null +++ b/list-abs/list-len-help.pd @@ -0,0 +1,28 @@ +#N canvas 0 31 450 300 10; +#X obj 123 162 list-len; +#X msg 160 132 1 2 3 4 5 6; +#X obj 123 232 print Length; +#X floatatom 141 197 5 0 0 0 - - -; +#X msg 123 77 bang; +#X text 47 20 list-len: calculate length of a list.; +#X msg 136 101 1; +#X text 182 74 empty list; +#X text 218 102 convert atom to 1-elem list; +#X text 262 133 "real" lists; +#X msg 167 101 dog; +#N canvas 460 31 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 65 INLET_0 anything; +#X text 12 45 DESCRIPTION calculate length of a list; +#X text 12 85 OUTLET_0 float; +#X restore 386 261 pd META; +#X connect 0 0 2 0; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 4 0 0 0; +#X connect 6 0 0 0; +#X connect 10 0 0 0; diff --git a/list-abs/list-len.pd b/list-abs/list-len.pd new file mode 100755 index 0000000..86e5ca1 --- /dev/null +++ b/list-abs/list-len.pd @@ -0,0 +1,9 @@ +#N canvas 0 0 534 321 10; +#X obj 126 70 inlet; +#X obj 126 271 outlet; +#X text 37 37 list-len: calculate length of a list.; +#X obj 126 149 list length; +#X obj 126 125 list; +#X connect 0 0 4 0; +#X connect 3 0 1 0; +#X connect 4 0 3 0; diff --git a/list-abs/list-lifo-help.pd b/list-abs/list-lifo-help.pd new file mode 100755 index 0000000..2403faa --- /dev/null +++ b/list-abs/list-lifo-help.pd @@ -0,0 +1,53 @@ +#N canvas 0 31 546 480 10; +#X msg 247 186 1 2 3 4 5; +#X symbolatom 260 207 10 0 0 0 - - -; +#X floatatom 273 224 5 0 0 0 - - -; +#X obj 198 339 bng 15 250 50 0 empty empty EOL 17 7 1 10 -262144 -1 +-1; +#X msg 295 274 bang; +#X msg 238 166 a b c; +#X msg 140 149 bang; +#X text 230 147 store lists or elements ("push"); +#X text 111 125 trigger output ("pop"); +#X text 277 255 clear stored list ("reset"); +#X obj 140 305 list-lifo; +#X text 60 38 [list-lifo]; +#X text 97 64 [list-lifo] stores incoming (list-)messages and outputs +them one by one on incoming bangs in the opposite order of arrival +like a LIFO: Last in \, first out.; +#N canvas 0 0 450 300 show 0; +#X obj 60 48 inlet; +#X obj 60 72 list prepend set; +#X obj 60 97 list trim; +#X obj 60 126 outlet; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X restore 140 364 pd show; +#X msg 140 390; +#X msg 74 262 clear; +#X text 82 439 2007 Frank Barknecht; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 175 AUTHOR Frank Barknecht; +#X text 12 195 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 75 INLET_0 bang clear; +#X text 12 95 INLET_1 anything; +#X text 12 115 INLET_2 bang; +#X text 12 135 OUTLET_0 list; +#X text 12 155 OUTLET_1 bang; +#X text 12 45 DESCRIPTION stores incoming list messages and outputs +them one by one in opposite order or arrival when banged; +#X restore 487 447 pd META; +#X connect 0 0 10 1; +#X connect 1 0 10 1; +#X connect 2 0 10 1; +#X connect 4 0 10 2; +#X connect 5 0 10 1; +#X connect 6 0 10 0; +#X connect 10 0 13 0; +#X connect 10 1 3 0; +#X connect 13 0 14 0; +#X connect 15 0 10 0; diff --git a/list-abs/list-lifo.pd b/list-abs/list-lifo.pd new file mode 100755 index 0000000..b70e418 --- /dev/null +++ b/list-abs/list-lifo.pd @@ -0,0 +1,53 @@ +#N canvas 300 195 729 624 10; +#X obj 268 56 inlet; +#X obj 268 184 t a a; +#X obj 268 250 list prepend; +#X obj 366 302 t b a; +#X obj 366 325 list; +#X obj 143 379 list; +#X obj 143 407 list split 1; +#X obj 143 492 list split; +#X obj 143 527 outlet; +#X obj 71 56 inlet; +#X text 380 252 prepend size of list; +#X obj 222 528 outlet; +#X obj 347 217 list-len; +#X obj 366 55 inlet; +#X text 419 304 store lists; +#X text 256 445 get length of next stored list and split it off.; +#X text 270 34 push; +#X text 365 35 reset stack; +#X obj 366 79 b; +#X obj 71 138 route clear; +#X obj 143 164 b; +#X text 69 34 pop (or clear); +#X obj 143 441 t b a; +#X obj 143 467 list append; +#X obj 268 301 list append; +#X obj 71 164 b; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 1 12 0; +#X connect 2 0 24 0; +#X connect 3 0 4 0; +#X connect 3 1 4 1; +#X connect 4 0 5 1; +#X connect 4 0 24 1; +#X connect 5 0 6 0; +#X connect 6 0 22 0; +#X connect 6 1 23 1; +#X connect 6 2 11 0; +#X connect 7 0 8 0; +#X connect 7 1 3 0; +#X connect 9 0 19 0; +#X connect 12 0 2 1; +#X connect 13 0 18 0; +#X connect 18 0 3 0; +#X connect 19 0 25 0; +#X connect 19 1 20 0; +#X connect 20 0 5 0; +#X connect 22 0 23 0; +#X connect 22 1 7 1; +#X connect 23 0 7 0; +#X connect 24 0 3 0; +#X connect 25 0 3 0; diff --git a/list-abs/list-makefilename-a-help.pd b/list-abs/list-makefilename-a-help.pd new file mode 100755 index 0000000..b2f2dab --- /dev/null +++ b/list-abs/list-makefilename-a-help.pd @@ -0,0 +1,41 @@ +#N canvas 0 31 605 472 10; +#X obj 83 371 print M; +#X obj 82 33 cnv 15 220 30 empty empty list-makefilename-a 20 12 0 +14 -233017 -66577 0; +#X msg 283 219 xyz-%s-abc; +#X msg 283 199 /help/%s; +#X msg 83 200 1 2 3 4 SYMBOL; +#X msg 83 222 list FREQ 440 AMP 1; +#X msg 283 286 const; +#X msg 330 285 You-probably-%don't-want-this; +#X text 317 249 pass unchanged; +#X msg 283 248 %s; +#N canvas 460 31 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 105 OUTLET_0 list; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 anything; +#X text 12 45 DESCRIPTION apply makefilename on list items.; +#X restore 476 411 pd META; +#X obj 83 334 list-makefilename-a %s-blabla; +#X text 80 76 Apply makefilename on list items.; +#X text 78 111 Use as "list-makefilename-a makefilename-arg". Right +inlet can be used to change the arg to makefilename. You can use any +makefilename format placeholders \, but have to take care on your own +\, if your incoming lists have the correct item types.; +#X msg 100 249 1 2 3 4; +#X msg 104 274 a b c; +#X connect 2 0 11 1; +#X connect 3 0 11 1; +#X connect 4 0 11 0; +#X connect 5 0 11 0; +#X connect 6 0 11 1; +#X connect 7 0 11 1; +#X connect 9 0 11 1; +#X connect 11 0 0 0; +#X connect 14 0 11 0; +#X connect 15 0 11 0; diff --git a/list-abs/list-makefilename-a.pd b/list-abs/list-makefilename-a.pd new file mode 100755 index 0000000..c019c23 --- /dev/null +++ b/list-abs/list-makefilename-a.pd @@ -0,0 +1,37 @@ +#N canvas 674 83 624 640 10; +#X msg 119 113 1 2 3 4 a b c; +#X text 251 117 <- click to test; +#X obj 196 386 list; +#X obj 77 499 list; +#X obj 100 385 list prepend; +#X obj 78 150 t b a b; +#X obj 122 178 s \$0-reset-result; +#X obj 179 357 r \$0-reset-result; +#X text 260 177 clear result list; +#X text 181 204 "Drip" (serialize) the list; +#X text 258 389 Repack the list (think of the counter); +#X text 124 496 Final result is built here; +#X obj 78 81 inlet; +#X obj 223 248 inlet; +#X obj 77 530 outlet; +#X obj 100 334 makefilename \$1; +#X obj 223 272 symbol; +#X msg 223 293 set \$1; +#X text 148 27 Use as "list-makefilename makefilename-arg". Right inlet +can be used to change the arg to makefilename.; +#X obj 100 202 list-drip; +#X connect 0 0 5 0; +#X connect 2 0 4 1; +#X connect 3 0 14 0; +#X connect 4 0 2 0; +#X connect 4 0 3 1; +#X connect 5 0 3 0; +#X connect 5 1 19 0; +#X connect 5 2 6 0; +#X connect 7 0 4 1; +#X connect 12 0 5 0; +#X connect 13 0 16 0; +#X connect 15 0 4 0; +#X connect 16 0 17 0; +#X connect 17 0 15 0; +#X connect 19 0 15 0; diff --git a/list-abs/list-makefilename-help.pd b/list-abs/list-makefilename-help.pd new file mode 100755 index 0000000..517c6ab --- /dev/null +++ b/list-abs/list-makefilename-help.pd @@ -0,0 +1,37 @@ +#N canvas 0 31 605 472 10; +#X obj 83 371 print M; +#X obj 83 334 list-makefilename %s-blabla; +#X obj 82 33 cnv 15 220 30 empty empty list-makefilename 20 12 0 14 +-233017 -66577 0; +#X msg 267 220 xyz-%s-abc; +#X msg 267 200 /help/%s; +#X text 80 76 Change symbols in a list \, pass floats unchanged.; +#X msg 83 200 1 2 3 4 SYMBOL; +#X msg 83 222 list FREQ 440 AMP 1; +#X msg 267 287 const; +#X msg 314 286 You-probably-%don't-want-this; +#X text 301 250 pass unchanged; +#X msg 267 249 %s; +#X text 78 111 Use as "list-makefilename makefilename-arg". Right inlet +can be used to change the arg to makefilename. Please only use symbol +placeholders (== "%s"); +#N canvas 460 31 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 105 OUTLET_0 list; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 anything; +#X text 12 45 DESCRIPTION change symbols in a list \, pass floats unchanged +; +#X restore 476 411 pd META; +#X connect 1 0 0 0; +#X connect 3 0 1 1; +#X connect 4 0 1 1; +#X connect 6 0 1 0; +#X connect 7 0 1 0; +#X connect 8 0 1 1; +#X connect 9 0 1 1; +#X connect 11 0 1 1; diff --git a/list-abs/list-makefilename.pd b/list-abs/list-makefilename.pd new file mode 100755 index 0000000..9e55e04 --- /dev/null +++ b/list-abs/list-makefilename.pd @@ -0,0 +1,42 @@ +#N canvas 424 89 624 640 10; +#X msg 119 113 1 2 3 4 a b c; +#X text 251 117 <- click to test; +#X obj 196 386 list; +#X obj 77 499 list; +#X obj 100 385 list prepend; +#X obj 78 150 t b a b; +#X obj 122 178 s \$0-reset-result; +#X obj 179 357 r \$0-reset-result; +#X text 260 177 clear result list; +#X text 181 204 "Drip" (serialize) the list; +#X text 258 389 Repack the list (think of the counter); +#X text 124 496 Final result is built here; +#X obj 78 81 inlet; +#X obj 223 248 inlet; +#X obj 77 530 outlet; +#X obj 100 231 route symbol; +#X obj 100 334 makefilename \$1; +#X text 202 228 only work on symbols; +#X obj 223 272 symbol; +#X msg 223 293 set \$1; +#X text 148 27 Use as "list-makefilename makefilename-arg". Right inlet +can be used to change the arg to makefilename. Please only use symbol +placeholders (== "%s"); +#X obj 100 202 list-drip; +#X connect 0 0 5 0; +#X connect 2 0 4 1; +#X connect 3 0 14 0; +#X connect 4 0 2 0; +#X connect 4 0 3 1; +#X connect 5 0 3 0; +#X connect 5 1 21 0; +#X connect 5 2 6 0; +#X connect 7 0 4 1; +#X connect 12 0 5 0; +#X connect 13 0 18 0; +#X connect 15 0 16 0; +#X connect 15 1 4 0; +#X connect 16 0 4 0; +#X connect 18 0 19 0; +#X connect 19 0 16 0; +#X connect 21 0 15 0; diff --git a/list-abs/list-map-help.pd b/list-abs/list-map-help.pd new file mode 100755 index 0000000..fc5d4f3 --- /dev/null +++ b/list-abs/list-map-help.pd @@ -0,0 +1,277 @@ +#N canvas 0 31 612 654 10; +#X obj 67 280 list-map; +#X text 65 22 [list-map] - the swiss army knife of list-operations +; +#X obj 135 280 spigot; +#X obj 171 263 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X msg 67 236 0 1 2 3; +#X obj 118 317 print SERIALIZED; +#X obj 67 346 print MAIN; +#X msg 313 238 0 1 2 3; +#X obj 364 319 print SERIALIZED; +#X obj 313 348 print MAIN; +#X floatatom 404 262 5 0 0 0 - - -; +#X msg 67 215 bang; +#X msg 145 235 a b c; +#X msg 145 215 bang; +#X obj 381 282 * 10; +#X msg 313 214 bang; +#X msg 72 417 0 1 2 3; +#X obj 72 506 list trim; +#X obj 72 486 list prepend set; +#X msg 72 528; +#X obj 138 441 list append -|-; +#X msg 227 511 set; +#X text 304 534 A more complex example:; +#N canvas 164 99 846 438 filters 0; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-in 64 float 0; +#X coords 0 1 63 -1 128 60 1; +#X restore 503 222 graph; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-out 64 float 0; +#X coords 0 1 63 -1 128 60 1; +#X restore 645 222 graph; +#X obj 110 316 s \$0-out; +#N canvas 414 307 437 371 tabdump-in 0; +#X obj 147 152 tabread \$0-in; +#X obj 147 205 list prepend; +#X obj 238 205 t a; +#X obj 125 254 list; +#X obj 125 23 inlet; +#X obj 125 279 outlet; +#X obj 125 46 t b b b; +#X msg 147 104 64; +#N canvas 0 0 450 300 countto 0; +#X obj 163 151 f 0; +#X obj 190 151 + 1; +#X obj 163 109 until; +#X msg 205 111 0; +#X obj 163 180 outlet; +#X obj 163 39 inlet; +#X obj 163 87 t a b; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 5 0 6 0; +#X connect 6 0 2 0; +#X connect 6 1 3 0; +#X restore 147 126 pd countto; +#X connect 0 0 1 0; +#X connect 1 0 3 1; +#X connect 1 0 2 0; +#X connect 2 0 1 1; +#X connect 3 0 5 0; +#X connect 4 0 6 0; +#X connect 6 0 3 0; +#X connect 6 1 7 0; +#X connect 6 2 1 1; +#X connect 7 0 8 0; +#X connect 8 0 0 0; +#X restore 110 206 pd tabdump-in; +#X msg 110 155 bang; +#X obj 110 294 list prepend 0; +#N canvas 0 0 297 272 pole 0; +#X obj 71 140 +; +#X obj 71 172 t a a; +#X obj 117 173 * 0.9; +#X obj 71 54 inlet; +#X obj 147 51 inlet; +#X obj 71 230 outlet; +#X text 72 17 one-pole filter; +#X obj 147 74 t b a; +#X msg 87 118 0; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 1 1 2 0; +#X connect 2 0 0 1; +#X connect 3 0 0 0; +#X connect 4 0 7 0; +#X connect 7 0 8 0; +#X connect 7 1 2 1; +#X connect 8 0 0 1; +#X restore 297 269 pd pole; +#X obj 269 117 hsl 64 15 0 0.99 0 0 empty empty filter-coeff -2 -8 +1 10 -262144 -1 -1 0 1; +#N canvas 0 0 297 272 zero 0; +#X obj 71 142 t a a; +#X obj 71 44 inlet; +#X obj 124 41 inlet; +#X obj 71 230 outlet; +#X text 71 20 one-zero filter; +#X obj 71 204 +; +#X obj 154 112 * -1; +#X obj 71 168 * -0.5; +#X obj 124 66 t b a; +#X msg 87 113 0; +#X connect 0 0 7 0; +#X connect 0 1 5 0; +#X connect 1 0 0 0; +#X connect 2 0 8 0; +#X connect 5 0 3 0; +#X connect 6 0 7 1; +#X connect 7 0 5 1; +#X connect 8 0 9 0; +#X connect 8 1 6 0; +#X connect 9 0 5 1; +#X restore 244 269 pd zero; +#N canvas 0 0 341 267 split 0; +#X obj 11 193 outlet; +#X obj 68 194 outlet; +#X obj 11 143 list prepend 0; +#X obj 11 169 route 0 1; +#X obj 104 110 hradio 12 1 0 2 empty empty zero 28 3 1 10 -262144 -1 +-1 0; +#X obj 11 68 inlet; +#X obj 180 33 select 0 1; +#X msg 180 62 label zero; +#X msg 211 87 label pole; +#X obj 104 38 loadbang; +#X msg 104 64 0; +#X connect 2 0 3 0; +#X connect 3 0 0 0; +#X connect 3 1 1 0; +#X connect 4 0 2 1; +#X connect 4 0 6 0; +#X connect 5 0 2 0; +#X connect 6 0 7 0; +#X connect 6 1 8 0; +#X connect 7 0 4 0; +#X connect 8 0 4 0; +#X connect 9 0 10 0; +#X connect 10 0 4 0; +#X coords 0 -1 1 1 60 30 2 100 100; +#X restore 244 217 pd split; +#X floatatom 266 139 5 0 0 0 - - -; +#N canvas 0 0 297 280 noise 0; +#X obj 33 115 random 1000; +#X obj 33 88 t b a; +#X obj 33 194 tabwrite \$0-in; +#X obj 33 143 / 500; +#X obj 33 163 - 1; +#X msg 33 44 64; +#N canvas 0 0 450 300 countto 0; +#X obj 163 151 f 0; +#X obj 190 151 + 1; +#X obj 163 109 until; +#X msg 205 111 0; +#X obj 163 180 outlet; +#X obj 163 39 inlet; +#X obj 163 87 t a b; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 5 0 6 0; +#X connect 6 0 2 0; +#X connect 6 1 3 0; +#X restore 33 66 pd countto; +#X obj 33 21 inlet; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 1 1 2 1; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 6 0; +#X connect 6 0 1 0; +#X connect 7 0 5 0; +#X restore 504 184 pd noise; +#X msg 504 160 make noise; +#X obj 266 158 t b a a; +#X msg 439 324 const 0; +#X obj 439 365 s \$0-in; +#X obj 440 390 s \$0-out; +#X msg 500 324 const 0 \, 16 1; +#X text 498 308 impulse; +#X text 112 34 This is a more complex example showing how to apply +a set of elementary filters on a list of floats. Try playing with the +coeff-slider and switch between pole and zero operation.; +#X obj 110 236 list-map; +#X connect 3 0 20 0; +#X connect 4 0 3 0; +#X connect 5 0 2 0; +#X connect 6 0 20 1; +#X connect 7 0 10 0; +#X connect 8 0 20 1; +#X connect 9 0 8 0; +#X connect 9 1 6 0; +#X connect 10 0 13 0; +#X connect 12 0 11 0; +#X connect 13 0 3 0; +#X connect 13 1 8 1; +#X connect 13 2 6 1; +#X connect 14 0 15 0; +#X connect 14 0 16 0; +#X connect 17 0 15 0; +#X connect 20 0 5 0; +#X connect 20 1 9 0; +#X restore 330 556 pd filters; +#X text 67 596 2007 Frank Barknecht \, original idea by IOhannes m +zmoelnig and Thomas Musil.; +#X obj 313 282 list-map; +#X obj 72 441 list-map; +#X msg 71 391 bang; +#X text 64 52 Calls a user-defined operation for each of the incoming +list's items and returns a list of the return values.; +#X text 64 90 [list-map] is a helper abstraction to make element-wise +operations on lists easy to patch. The basic idea is to bundle a list-serializer +and a list-repacker into one object. Then you connect whatever operation +should be applied on every list item to the right outlet and send the +modified items back to the right inlet. Here the modified elements +get packed into a list again and sent to the left outlet of [list-map]. +; +#X obj 315 430 list-map; +#X obj 315 472 list trim; +#X obj 315 452 list prepend set; +#X obj 387 430 pow 3; +#X floatatom 417 407 5 0 0 0 - - -; +#X msg 315 405 1 2 3 4 5; +#X msg 315 494; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 AUTHOR Frank Barknecht; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 75 INLET_0 anything; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION call a user-defined operation for each of +the incoming list's items and return a list of the return values; +#X text 12 95 INLET_1 anything; +#X text 12 115 OUTLET_0 list; +#X text 12 135 OUTLET_1 float symbol pointer; +#X restore 533 611 pd META; +#X connect 0 0 6 0; +#X connect 0 1 2 0; +#X connect 0 1 5 0; +#X connect 2 0 0 1; +#X connect 3 0 2 1; +#X connect 4 0 0 0; +#X connect 7 0 25 0; +#X connect 10 0 14 1; +#X connect 11 0 0 0; +#X connect 12 0 0 1; +#X connect 13 0 0 1; +#X connect 14 0 25 1; +#X connect 15 0 25 0; +#X connect 16 0 26 0; +#X connect 17 0 19 0; +#X connect 18 0 17 0; +#X connect 20 0 26 1; +#X connect 21 0 19 0; +#X connect 25 0 9 0; +#X connect 25 1 8 0; +#X connect 25 1 14 0; +#X connect 26 0 18 0; +#X connect 26 1 20 0; +#X connect 27 0 26 0; +#X connect 30 0 32 0; +#X connect 30 1 33 0; +#X connect 31 0 36 0; +#X connect 32 0 31 0; +#X connect 33 0 30 1; +#X connect 34 0 33 1; +#X connect 35 0 30 0; diff --git a/list-abs/list-map.pd b/list-abs/list-map.pd new file mode 100755 index 0000000..b455567 --- /dev/null +++ b/list-abs/list-map.pd @@ -0,0 +1,31 @@ +#N canvas 470 232 489 423 10; +#X obj 86 33 inlet; +#X obj 275 52 inlet; +#X obj 151 352 outlet; +#X obj 170 248 outlet; +#X obj 151 317 list; +#X obj 170 215 list-drip; +#X obj 275 215 list prepend; +#X obj 354 185 t a; +#X obj 151 155 t b a a b; +#X obj 86 58 route bang; +#X obj 86 83 b; +#X obj 151 84 t b a; +#X obj 151 124 list; +#X connect 0 0 9 0; +#X connect 1 0 6 0; +#X connect 4 0 2 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 6 0 4 1; +#X connect 7 0 6 1; +#X connect 8 0 4 0; +#X connect 8 1 5 0; +#X connect 8 2 4 1; +#X connect 8 3 6 1; +#X connect 9 0 10 0; +#X connect 9 1 11 0; +#X connect 10 0 12 0; +#X connect 11 0 12 0; +#X connect 11 1 12 1; +#X connect 12 0 8 0; diff --git a/list-abs/list-map2-help.pd b/list-abs/list-map2-help.pd new file mode 100755 index 0000000..27b40d2 --- /dev/null +++ b/list-abs/list-map2-help.pd @@ -0,0 +1,452 @@ +#N canvas 0 31 725 634 10; +#X obj 135 300 spigot; +#X obj 171 283 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 67 366 print MAIN; +#X obj 381 329 print SERIALIZED; +#X obj 323 358 print MAIN; +#X msg 67 235 bang; +#X msg 131 256 a b c; +#X msg 323 224 bang; +#X msg 72 427 0 1 2 3; +#X obj 72 516 list trim; +#X obj 72 496 list prepend set; +#X obj 158 451 list append -|-; +#X msg 227 521 set; +#X msg 71 401 bang; +#X obj 325 512 list trim; +#X obj 325 492 list prepend set; +#X msg 325 425 1 2 3 4 5; +#X obj 323 292 list-map2; +#X obj 411 292 +; +#X msg 352 269 10 20 30 40; +#X msg 323 248 1 2 3 4; +#X msg 130 429 a b c d; +#X obj 67 300 list-map2; +#X obj 325 470 list-map2; +#X obj 72 451 list-map2; +#X msg 354 446 2 0; +#X obj 397 470 *; +#X text 64 57 Calls a user-defined operation for each pair of elements +of two incoming lists and returns a list of the return values.; +#X obj 125 339 print SERIALIZED_PAIRS; +#X text 64 100 [list-map2] is a helper abstraction to make element-wise +operations on two lists easy to patch. The basic idea is to bundle +two list-serializers and a list-repacker into one object. Then you +connect whatever operation should be applied on every pair of list +items to the right outlet and send the modified items back to the right +inlet. Here the modified elements get packed into a list again and +sent to the left outlet of [list-map2].; +#N canvas 239 121 843 692 more-examples 0; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-in1 64 float 0; +#X coords 0 1 63 -1 128 60 1; +#X restore 366 91 graph; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-in2 64 float 0; +#X coords 0 1 63 -1 128 60 1; +#X restore 508 91 graph; +#X msg 68 83 bang; +#N canvas 0 0 297 280 noise 0; +#X obj 33 115 random 1000; +#X obj 33 88 t b a; +#X obj 33 143 / 500; +#X obj 33 163 - 1; +#X msg 33 44 64; +#N canvas 0 0 450 300 countto 0; +#X obj 163 151 f 0; +#X obj 190 151 + 1; +#X obj 163 109 until; +#X msg 205 111 0; +#X obj 163 180 outlet; +#X obj 163 39 inlet; +#X obj 163 87 t a b; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 5 0 6 0; +#X connect 6 0 2 0; +#X connect 6 1 3 0; +#X restore 33 66 pd countto; +#X obj 33 21 inlet; +#X obj 33 194 tabwrite \$0-in2; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 1 1 7 1; +#X connect 2 0 3 0; +#X connect 3 0 7 0; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X connect 6 0 4 0; +#X restore 508 52 pd noise; +#X msg 508 28 make noise; +#X msg 527 184 const 0; +#X obj 527 280 s \$0-out; +#X text 586 168 impulse; +#X obj 149 164 list-map2; +#N canvas 414 307 598 380 tabdump-ins 0; +#X obj 187 213 list prepend; +#X obj 278 213 t a; +#X obj 125 254 list; +#X obj 125 23 inlet; +#X obj 125 279 outlet; +#X msg 187 92 64; +#N canvas 0 0 450 300 countto 0; +#X obj 163 151 f 0; +#X obj 190 151 + 1; +#X obj 163 109 until; +#X msg 205 111 0; +#X obj 163 180 outlet; +#X obj 163 39 inlet; +#X obj 163 87 t a b; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 5 0 6 0; +#X connect 6 0 2 0; +#X connect 6 1 3 0; +#X restore 187 114 pd countto; +#X obj 187 136 t a a; +#X obj 320 213 list prepend; +#X obj 411 213 t a; +#X obj 320 190 tabread \$0-in2; +#X obj 187 190 tabread \$0-in1; +#X obj 187 256 list; +#X obj 187 281 outlet; +#X obj 125 46 t b b b b b; +#X connect 0 0 2 1; +#X connect 0 0 1 0; +#X connect 1 0 0 1; +#X connect 2 0 4 0; +#X connect 3 0 14 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 11 0; +#X connect 7 1 10 0; +#X connect 8 0 9 0; +#X connect 8 0 12 1; +#X connect 9 0 8 1; +#X connect 10 0 8 0; +#X connect 11 0 0 0; +#X connect 12 0 13 0; +#X connect 14 0 2 0; +#X connect 14 1 12 0; +#X connect 14 2 5 0; +#X connect 14 3 0 1; +#X connect 14 4 8 1; +#X restore 149 134 pd tabdump-ins; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-out-max 64 float 0; +#X coords 0 1 63 -1 128 60 1; +#X restore 363 174 graph; +#X obj 149 192 list prepend 0; +#X obj 527 225 s \$0-in1; +#X msg 588 184 const 0 \, 16 1; +#X obj 231 165 max; +#X obj 527 249 s \$0-in2; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-out-min 64 float 0; +#X coords 0 1 63 -1 128 60 1; +#X restore 364 274 graph; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-out-mul 64 float 0; +#X coords 0 1 63 -1 128 60 1; +#X restore 364 398 graph; +#X obj 150 277 list-map2; +#X obj 150 305 list prepend 0; +#X obj 150 327 s \$0-out-min; +#X obj 232 278 min; +#X obj 150 390 list-map2; +#X obj 150 418 list prepend 0; +#X obj 232 391 *; +#X obj 150 440 s \$0-out-mul; +#X obj 149 214 s \$0-out-max; +#N canvas 414 307 598 380 tabdump-ins 0; +#X obj 187 213 list prepend; +#X obj 278 213 t a; +#X obj 125 254 list; +#X obj 125 23 inlet; +#X obj 125 279 outlet; +#X msg 187 92 64; +#N canvas 0 0 450 300 countto 0; +#X obj 163 151 f 0; +#X obj 190 151 + 1; +#X obj 163 109 until; +#X msg 205 111 0; +#X obj 163 180 outlet; +#X obj 163 39 inlet; +#X obj 163 87 t a b; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 5 0 6 0; +#X connect 6 0 2 0; +#X connect 6 1 3 0; +#X restore 187 114 pd countto; +#X obj 187 136 t a a; +#X obj 320 213 list prepend; +#X obj 411 213 t a; +#X obj 320 190 tabread \$0-in2; +#X obj 187 190 tabread \$0-in1; +#X obj 187 256 list; +#X obj 187 281 outlet; +#X obj 125 46 t b b b b b; +#X connect 0 0 2 1; +#X connect 0 0 1 0; +#X connect 1 0 0 1; +#X connect 2 0 4 0; +#X connect 3 0 14 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 11 0; +#X connect 7 1 10 0; +#X connect 8 0 9 0; +#X connect 8 0 12 1; +#X connect 9 0 8 1; +#X connect 10 0 8 0; +#X connect 11 0 0 0; +#X connect 12 0 13 0; +#X connect 14 0 2 0; +#X connect 14 1 12 0; +#X connect 14 2 5 0; +#X connect 14 3 0 1; +#X connect 14 4 8 1; +#X restore 150 252 pd tabdump-ins; +#N canvas 414 307 598 380 tabdump-ins 0; +#X obj 187 213 list prepend; +#X obj 278 213 t a; +#X obj 125 254 list; +#X obj 125 23 inlet; +#X obj 125 279 outlet; +#X msg 187 92 64; +#N canvas 0 0 450 300 countto 0; +#X obj 163 151 f 0; +#X obj 190 151 + 1; +#X obj 163 109 until; +#X msg 205 111 0; +#X obj 163 180 outlet; +#X obj 163 39 inlet; +#X obj 163 87 t a b; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 5 0 6 0; +#X connect 6 0 2 0; +#X connect 6 1 3 0; +#X restore 187 114 pd countto; +#X obj 187 136 t a a; +#X obj 320 213 list prepend; +#X obj 411 213 t a; +#X obj 320 190 tabread \$0-in2; +#X obj 187 190 tabread \$0-in1; +#X obj 187 256 list; +#X obj 187 281 outlet; +#X obj 125 46 t b b b b b; +#X connect 0 0 2 1; +#X connect 0 0 1 0; +#X connect 1 0 0 1; +#X connect 2 0 4 0; +#X connect 3 0 14 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 11 0; +#X connect 7 1 10 0; +#X connect 8 0 9 0; +#X connect 8 0 12 1; +#X connect 9 0 8 1; +#X connect 10 0 8 0; +#X connect 11 0 0 0; +#X connect 12 0 13 0; +#X connect 14 0 2 0; +#X connect 14 1 12 0; +#X connect 14 2 5 0; +#X connect 14 3 0 1; +#X connect 14 4 8 1; +#X restore 150 365 pd tabdump-ins; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-out-xfade 64 float 0; +#X coords 0 1 63 -1 128 60 1; +#X restore 365 534 graph; +#X obj 151 582 list-map2; +#X obj 151 610 list prepend 0; +#N canvas 414 307 598 380 tabdump-ins 0; +#X obj 187 213 list prepend; +#X obj 278 213 t a; +#X obj 125 254 list; +#X obj 125 23 inlet; +#X obj 125 279 outlet; +#X msg 187 92 64; +#N canvas 0 0 450 300 countto 0; +#X obj 163 151 f 0; +#X obj 190 151 + 1; +#X obj 163 109 until; +#X msg 205 111 0; +#X obj 163 180 outlet; +#X obj 163 39 inlet; +#X obj 163 87 t a b; +#X connect 0 0 1 0; +#X connect 0 0 4 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 5 0 6 0; +#X connect 6 0 2 0; +#X connect 6 1 3 0; +#X restore 187 114 pd countto; +#X obj 187 136 t a a; +#X obj 320 213 list prepend; +#X obj 411 213 t a; +#X obj 320 190 tabread \$0-in2; +#X obj 187 190 tabread \$0-in1; +#X obj 187 256 list; +#X obj 187 281 outlet; +#X obj 125 46 t b b b b b; +#X connect 0 0 2 1; +#X connect 0 0 1 0; +#X connect 1 0 0 1; +#X connect 2 0 4 0; +#X connect 3 0 14 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 11 0; +#X connect 7 1 10 0; +#X connect 8 0 9 0; +#X connect 8 0 12 1; +#X connect 9 0 8 1; +#X connect 10 0 8 0; +#X connect 11 0 0 0; +#X connect 12 0 13 0; +#X connect 14 0 2 0; +#X connect 14 1 12 0; +#X connect 14 2 5 0; +#X connect 14 3 0 1; +#X connect 14 4 8 1; +#X restore 151 529 pd tabdump-ins; +#X obj 151 632 s \$0-out-xfade; +#X obj 154 487 hsl 64 15 0 1 0 0 empty empty crossfade_0-1 -2 -8 1 +10 -262144 -1 -1 0 1; +#X obj 151 506 t b a; +#N canvas 0 0 450 300 xfade 0; +#X obj 54 131 -; +#X obj 54 155 * 0.5; +#X obj 54 182 +; +#X obj 104 48 inlet; +#X obj 54 48 inlet; +#X obj 54 206 outlet; +#X obj 54 81 unpack 0 0; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 5 0; +#X connect 3 0 1 1; +#X connect 4 0 6 0; +#X connect 6 0 0 0; +#X connect 6 1 0 1; +#X connect 6 1 2 1; +#X restore 234 582 pd xfade; +#X obj 258 520 hsl 64 15 0 1 0 0 empty empty crossfade_0-1 -2 -8 1 +10 -262144 -1 -1 0 1; +#X obj 255 539 t b a; +#X obj 298 640 list-inter; +#X text 272 622 this is similar to:; +#X connect 2 0 9 0; +#X connect 2 0 27 0; +#X connect 2 0 28 0; +#X connect 2 0 32 0; +#X connect 4 0 3 0; +#X connect 5 0 6 0; +#X connect 5 0 12 0; +#X connect 5 0 15 0; +#X connect 8 0 11 0; +#X connect 8 1 14 0; +#X connect 9 0 8 0; +#X connect 9 1 8 1; +#X connect 11 0 26 0; +#X connect 13 0 12 0; +#X connect 14 0 8 2; +#X connect 18 0 19 0; +#X connect 18 1 21 0; +#X connect 19 0 20 0; +#X connect 21 0 18 2; +#X connect 22 0 23 0; +#X connect 22 1 24 0; +#X connect 23 0 25 0; +#X connect 24 0 22 2; +#X connect 27 0 18 0; +#X connect 27 1 18 1; +#X connect 28 0 22 0; +#X connect 28 1 22 1; +#X connect 30 0 31 0; +#X connect 30 1 36 0; +#X connect 31 0 33 0; +#X connect 32 0 30 0; +#X connect 32 1 30 1; +#X connect 34 0 35 0; +#X connect 35 0 32 0; +#X connect 35 1 36 1; +#X connect 36 0 30 2; +#X connect 37 0 38 0; +#X connect 38 0 30 0; +#X connect 38 1 36 1; +#X restore 69 575 pd more-examples; +#X text 67 217 bang will redo the last two lists; +#X text 324 391 If the second list is too short \, its final element +will be repeated:; +#X text 65 22 [list-map2] - map an operation on element pairs from +two lists.; +#X text 67 606 2007 Frank Barknecht; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 165 AUTHOR Frank Barknecht; +#X text 12 185 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 85 INLET_1 anything; +#X text 12 125 OUTLET_0 list; +#X text 12 45 DESCRIPTION map an operation on element pairs from two +lists; +#X text 12 65 INLET_0 bang anything; +#X text 12 105 INLET_2 anything; +#X text 12 145 OUTLET_1 list; +#X restore 663 601 pd META; +#X msg 325 534; +#X msg 72 538; +#X msg 67 256 1 2 3 4; +#X connect 0 0 22 2; +#X connect 1 0 0 1; +#X connect 5 0 22 0; +#X connect 6 0 22 1; +#X connect 7 0 17 0; +#X connect 8 0 24 0; +#X connect 9 0 37 0; +#X connect 10 0 9 0; +#X connect 11 0 24 2; +#X connect 12 0 37 0; +#X connect 13 0 24 0; +#X connect 14 0 36 0; +#X connect 15 0 14 0; +#X connect 16 0 23 0; +#X connect 17 0 4 0; +#X connect 17 1 3 0; +#X connect 17 1 18 0; +#X connect 18 0 17 2; +#X connect 19 0 17 1; +#X connect 20 0 17 0; +#X connect 21 0 24 1; +#X connect 22 0 2 0; +#X connect 22 1 0 0; +#X connect 22 1 28 0; +#X connect 23 0 15 0; +#X connect 23 1 26 0; +#X connect 24 0 10 0; +#X connect 24 1 11 0; +#X connect 25 0 23 1; +#X connect 26 0 23 2; +#X connect 38 0 22 0; diff --git a/list-abs/list-map2.pd b/list-abs/list-map2.pd new file mode 100755 index 0000000..8901c74 --- /dev/null +++ b/list-abs/list-map2.pd @@ -0,0 +1,39 @@ +#N canvas 470 232 489 423 10; +#X obj 86 33 inlet; +#X obj 300 34 inlet; +#X obj 151 352 outlet; +#X obj 169 269 outlet; +#X obj 151 317 list; +#X obj 300 215 list prepend; +#X obj 379 185 t a; +#X obj 86 58 route bang; +#X obj 86 83 b; +#X obj 151 84 t b a; +#X obj 151 124 list; +#X obj 169 215 list-drip2; +#X obj 169 243 list; +#X obj 258 33 inlet; +#X obj 234 192 list; +#X obj 151 155 t b a a b b; +#X connect 0 0 7 0; +#X connect 1 0 5 0; +#X connect 4 0 2 0; +#X connect 5 0 6 0; +#X connect 5 0 4 1; +#X connect 6 0 5 1; +#X connect 7 0 8 0; +#X connect 7 1 9 0; +#X connect 8 0 10 0; +#X connect 9 0 10 0; +#X connect 9 1 10 1; +#X connect 10 0 15 0; +#X connect 11 0 12 0; +#X connect 11 1 12 1; +#X connect 12 0 3 0; +#X connect 13 0 14 1; +#X connect 14 0 11 1; +#X connect 15 0 4 0; +#X connect 15 1 11 0; +#X connect 15 2 4 1; +#X connect 15 3 14 0; +#X connect 15 4 5 1; diff --git a/list-abs/list-math-help.pd b/list-abs/list-math-help.pd new file mode 100755 index 0000000..e621b8c --- /dev/null +++ b/list-abs/list-math-help.pd @@ -0,0 +1,57 @@ +#N canvas 0 31 618 551 10; +#X obj 100 259 print L; +#X msg 100 194 1 2 3 4 a b c; +#X floatatom 210 193 5 0 0 0 - - -; +#X obj 344 263 print L; +#X msg 344 198 1 2 3 4 a b c; +#X floatatom 454 197 5 0 0 0 - - -; +#X obj 104 365 print L; +#X msg 104 300 1 2 3 4 a b c; +#X floatatom 214 299 5 0 0 0 - - -; +#X obj 100 226 list-math *; +#X msg 99 167 1 2 3 4 a b c \, 10 20 30 x y z; +#X text 72 87 Use as "list-math operator" where operator is some binary +operator \, that expr can understand \, like + \, - \, * or /; +#X obj 346 373 print L; +#X msg 346 308 1 2 3 4 a b c; +#X floatatom 456 307 5 0 0 0 - - -; +#X obj 72 31 cnv 15 140 30 empty empty list-math 20 12 0 14 -233017 +-66577 0; +#X text 232 40 simple mathematical operations on lists.; +#X obj 344 230 list-math +; +#X obj 104 332 list-math /; +#X obj 346 340 list-math -; +#X msg 346 416 1 2 3 4 a b c; +#X floatatom 456 415 5 0 0 0 - - -; +#X obj 346 448 list-math - 2; +#X obj 346 481 print L-with-arg; +#X text 189 448 Using a default arg:; +#X text 71 125 A second argument is accepted to set a default scalar +to use.; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 65 INLET_0 anything; +#X text 12 5 KEYWORDS control list_op; +#X text 12 105 OUTLET_0 list; +#X text 12 45 DESCRIPTION simple mathematical operations on lists; +#X text 12 85 INLET_1 float; +#X restore 556 521 pd META; +#X connect 1 0 9 0; +#X connect 2 0 9 1; +#X connect 4 0 17 0; +#X connect 5 0 17 1; +#X connect 7 0 18 0; +#X connect 8 0 18 1; +#X connect 9 0 0 0; +#X connect 10 0 9 0; +#X connect 13 0 19 0; +#X connect 14 0 19 1; +#X connect 17 0 3 0; +#X connect 18 0 6 0; +#X connect 19 0 12 0; +#X connect 20 0 22 0; +#X connect 21 0 22 1; +#X connect 22 0 23 0; diff --git a/list-abs/list-math.pd b/list-abs/list-math.pd new file mode 100755 index 0000000..591a423 --- /dev/null +++ b/list-abs/list-math.pd @@ -0,0 +1,16 @@ +#N canvas 424 89 462 324 10; +#X obj 55 58 inlet; +#X obj 55 235 outlet; +#X text 44 16 Use as "list-math operator" where operator is some binary +operator \, expr can understand.; +#X obj 55 136 list-map; +#X obj 152 208 \$1 \$2; +#X obj 182 134 inlet; +#X obj 152 97 route float; +#X connect 0 0 3 0; +#X connect 3 0 1 0; +#X connect 3 1 6 0; +#X connect 4 0 3 1; +#X connect 5 0 4 1; +#X connect 6 0 4 0; +#X connect 6 1 3 1; diff --git a/list-abs/list-mean-help.pd b/list-abs/list-mean-help.pd new file mode 100755 index 0000000..7c99ed5 --- /dev/null +++ b/list-abs/list-mean-help.pd @@ -0,0 +1,196 @@ +#N struct 1114-dial float y; +#N canvas 0 31 534 466 10; +#X obj 98 306 list-mean; +#N canvas 0 0 450 300 randlist 0; +#X obj 134 129 until; +#X msg 246 151 set; +#X msg 134 193 add2 \$1; +#X obj 112 101 t b f b; +#X obj 135 249 outlet; +#X obj 112 31 inlet; +#X obj 112 73 + 1; +#X obj 112 53 random 10; +#X obj 134 151 random 10; +#X obj 134 171 - 5; +#X connect 0 0 8 0; +#X connect 1 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 3 1 0 0; +#X connect 3 2 1 0; +#X connect 5 0 7 0; +#X connect 6 0 3 0; +#X connect 7 0 6 0; +#X connect 8 0 9 0; +#X connect 9 0 2 0; +#X restore 153 236 pd randlist; +#X msg 153 214 bang; +#X floatatom 98 340 5 0 0 1 arithmetric_mean - -; +#X text 86 22 [list-mean]; +#X msg 153 262 4 -3 -4 1 2 -3; +#X msg 98 159 1 2 3 4; +#X msg 98 185 any symbols 1 2 3 4 are ignored; +#X text 96 117 Non-floats in a list are silently dropped.; +#X text 114 82 mean = sum(f[i]) / total number of floats; +#X text 96 42 Calculates the arithmetric mean of a list (of floats) +according to:; +#N canvas 318 53 648 574 graphical-mean 0; +#N canvas 0 0 450 300 randlist 0; +#X obj 134 129 until; +#X msg 246 151 set; +#X msg 134 213 add2 \$1; +#X obj 112 101 t b f b; +#X obj 135 249 outlet; +#X obj 112 31 inlet; +#X obj 134 151 random 100; +#X msg 112 59 10; +#X obj 134 191 / 10; +#X obj 134 170 + 1; +#X connect 0 0 6 0; +#X connect 1 0 4 0; +#X connect 2 0 4 0; +#X connect 3 0 4 0; +#X connect 3 1 0 0; +#X connect 3 2 1 0; +#X connect 5 0 7 0; +#X connect 6 0 9 0; +#X connect 7 0 3 0; +#X connect 8 0 2 0; +#X connect 9 0 8 0; +#X restore 79 388 pd randlist; +#X msg 79 366 bang; +#X obj 79 447 list prepend 0; +#X obj 79 500 s \$0-tab; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-tab 10 float 0; +#X coords 0 10 9 0 200 140 1; +#X restore 75 152 graph; +#N canvas 0 0 916 918 \$0-c 0; +#X scalar 1114-dial 0 \;; +#X coords 0 0 200 140 200 140 1; +#X restore 75 152 pd \$0-c; +#N canvas 0 0 503 429 create 0; +#X msg 242 258 traverse pd-\$1 \, bang; +#X obj 242 238 symbol \$0-c; +#X msg 107 79 0; +#X obj 242 278 pointer; +#X msg 243 178 clear; +#X obj 243 205 s pd-\$0-c; +#X obj 107 114 t a b b; +#X obj 107 50 loadbang; +#X obj 107 326 outlet; +#X obj 107 302 append \$0-dial y; +#X connect 0 0 3 0; +#X connect 1 0 0 0; +#X connect 2 0 6 0; +#X connect 3 0 9 1; +#X connect 4 0 5 0; +#X connect 6 0 9 0; +#X connect 6 1 1 0; +#X connect 6 2 4 0; +#X connect 7 0 2 0; +#X connect 9 0 8 0; +#X restore 468 339 pd create; +#X obj 339 127 metro 50; +#X obj 339 102 tgl 15 0 empty empty show-mean 17 7 1 10 -258699 -262144 +-1 0 1; +#N canvas 473 338 450 300 countto 0; +#X obj 131 154 f 0; +#X obj 156 153 + 1; +#X msg 174 113 0; +#X obj 131 183 outlet; +#X obj 131 59 inlet; +#X obj 131 116 until; +#X obj 131 96 t a b; +#X connect 0 0 1 0; +#X connect 0 0 3 0; +#X connect 1 0 0 1; +#X connect 2 0 0 1; +#X connect 4 0 6 0; +#X connect 5 0 0 0; +#X connect 6 0 5 0; +#X connect 6 1 2 0; +#X restore 362 195 pd countto; +#X obj 362 219 tabread \$0-tab; +#X obj 362 249 list prepend; +#X obj 452 249 t a; +#X msg 362 175 10; +#X obj 339 148 t b b b; +#X obj 339 274 list; +#X obj 79 344 loadbang; +#X msg 79 414 0.6 6.9 3.6 5.6 0.7 3.8 3.9 5.3 9.2 9.2; +#X text 77 30 Switch on the "show"-metro and play with the values in +the array.; +#N canvas 336 319 712 355 \$0-dial 0; +#X obj 19 119 outlet; +#X obj 19 86 route change; +#X obj 19 62 struct \$0-dial float y; +#X obj 229 62 drawpolygon 900 2 0 y 200 y; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X restore 453 315 pd \$0-dial; +#X msg 213 469 bounds 0 10 9 0; +#X obj 213 449 loadbang; +#X obj 339 313 list-mean; +#X obj 339 388 set \$0-dial y; +#X floatatom 339 339 5 0 0 0 - - -; +#X msg 92 469 const 5; +#N canvas 0 0 299 354 scale 0; +#X msg 74 83 10 \$1; +#X obj 74 107 -; +#X obj 74 158 * 140; +#X obj 74 134 / 20; +#X obj 74 49 inlet; +#X obj 74 182 outlet; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 5 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X restore 339 363 pd scale; +#X connect 0 0 17 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 6 0 23 1; +#X connect 7 0 14 0; +#X connect 8 0 7 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 0 15 1; +#X connect 12 0 11 1; +#X connect 13 0 9 0; +#X connect 14 0 15 0; +#X connect 14 1 13 0; +#X connect 14 2 11 1; +#X connect 15 0 22 0; +#X connect 16 0 1 0; +#X connect 17 0 2 0; +#X connect 19 0 23 1; +#X connect 20 0 3 0; +#X connect 21 0 20 0; +#X connect 22 0 24 0; +#X connect 24 0 26 0; +#X connect 25 0 3 0; +#X connect 26 0 23 0; +#X restore 97 363 pd graphical-mean; +#X text 101 394 More means:; +#X obj 192 394 list-geometric-mean; +#X obj 192 415 list-harmonic-mean; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 115 AUTHOR Frank Barknecht; +#X text 12 135 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 75 INLET_0 anything; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION calculate the arithmetric mean of a list +of floats; +#X text 12 95 OUTLET_0 float; +#X restore 466 421 pd META; +#X connect 0 0 3 0; +#X connect 1 0 5 0; +#X connect 2 0 1 0; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 7 0 0 0; diff --git a/list-abs/list-mean.pd b/list-abs/list-mean.pd new file mode 100755 index 0000000..f561c11 --- /dev/null +++ b/list-abs/list-mean.pd @@ -0,0 +1,52 @@ +#N canvas 0 0 457 428 10; +#X obj 127 69 inlet; +#X obj 127 337 outlet; +#X obj 146 138 list-drip; +#X obj 146 164 route float; +#X obj 127 274 f; +#X obj 127 308 /; +#X obj 146 189 t a b; +#N canvas 370 313 450 300 accum 0; +#X obj 182 102 0; +#X obj 135 79 inlet; +#X obj 182 79 inlet; +#X obj 135 169 outlet; +#X obj 135 137 +; +#X obj 168 138 f; +#X connect 0 0 4 1; +#X connect 1 0 4 0; +#X connect 2 0 0 0; +#X connect 4 0 3 0; +#X connect 4 0 5 0; +#X connect 5 0 4 1; +#X restore 146 224 pd accum; +#N canvas 425 298 450 300 count 0; +#X obj 133 59 b; +#X obj 133 35 inlet; +#X obj 183 35 inlet; +#X obj 164 111 + 1; +#X obj 133 133 outlet; +#X msg 183 71 1; +#X obj 133 110 f 1; +#X connect 0 0 6 0; +#X connect 1 0 0 0; +#X connect 2 0 5 0; +#X connect 3 0 6 1; +#X connect 5 0 6 1; +#X connect 6 0 3 0; +#X connect 6 0 4 0; +#X restore 229 227 pd count; +#X obj 127 105 t b a b b; +#X connect 0 0 9 0; +#X connect 2 0 3 0; +#X connect 3 0 6 0; +#X connect 4 0 5 0; +#X connect 5 0 1 0; +#X connect 6 0 7 0; +#X connect 6 1 8 0; +#X connect 7 0 4 1; +#X connect 8 0 5 1; +#X connect 9 0 4 0; +#X connect 9 1 2 0; +#X connect 9 2 7 1; +#X connect 9 3 8 1; diff --git a/list-abs/list-minmax-help.pd b/list-abs/list-minmax-help.pd new file mode 100755 index 0000000..09a76c5 --- /dev/null +++ b/list-abs/list-minmax-help.pd @@ -0,0 +1,41 @@ +#N canvas 0 31 626 365 10; +#X floatatom 254 271 5 0 0 0 min - -; +#X floatatom 326 271 5 0 0 0 max - -; +#X obj 254 138 random 100; +#X obj 254 116 until; +#X msg 366 138 set; +#X msg 232 61 10; +#X msg 254 160 add2 \$1; +#X obj 232 88 t b f b; +#X msg 254 203 41 49 75 14 47 94 89 87 30 87; +#X text 178 28 list-minmax: find minimum and maximum float in a list. +; +#X msg 141 201 2; +#X text 140 178 special cases; +#X obj 254 234 list-minmax; +#X msg 179 202 11 2 2 2; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 85 OUTLET_0 float; +#X text 12 45 DESCRIPTION find minimum and maximum float in a list +; +#X text 12 65 INLET_0 list; +#X text 12 105 OUTLET_1 float; +#X restore 566 331 pd META; +#X connect 2 0 6 0; +#X connect 3 0 2 0; +#X connect 4 0 8 0; +#X connect 5 0 7 0; +#X connect 6 0 8 0; +#X connect 7 0 8 0; +#X connect 7 1 3 0; +#X connect 7 2 4 0; +#X connect 8 0 12 0; +#X connect 10 0 12 0; +#X connect 12 0 0 0; +#X connect 12 1 1 0; +#X connect 13 0 12 0; diff --git a/list-abs/list-minmax.pd b/list-abs/list-minmax.pd new file mode 100755 index 0000000..a5f5890 --- /dev/null +++ b/list-abs/list-minmax.pd @@ -0,0 +1,53 @@ +#N canvas 385 204 676 470 10; +#X obj 128 97 list-drip; +#X obj 128 120 route float; +#X obj 159 256 f; +#X obj 106 394 outlet; +#X obj 165 369 f; +#X obj 165 396 outlet; +#X obj 106 305 t b b; +#X obj 106 10 inlet; +#X obj 106 366 f; +#N canvas 0 0 450 300 once 0; +#X obj 110 75 inlet; +#X obj 105 187 spigot 1; +#X obj 110 104 t b f; +#X msg 125 151 0; +#X msg 165 99 1; +#X obj 165 63 inlet; +#X obj 102 219 outlet; +#X connect 0 0 2 0; +#X connect 1 0 6 0; +#X connect 2 0 3 0; +#X connect 2 1 1 0; +#X connect 3 0 1 1; +#X connect 4 0 1 1; +#X connect 5 0 4 0; +#X restore 260 183 pd once; +#X obj 275 258 f; +#X obj 244 257 max; +#X obj 128 256 min; +#X obj 128 150 t a a a; +#X obj 106 30 t b a b; +#X text 321 183 prime [min] and [max] with first item once; +#X connect 0 0 1 0; +#X connect 1 0 13 0; +#X connect 2 0 12 1; +#X connect 4 0 5 0; +#X connect 6 0 8 0; +#X connect 6 1 4 0; +#X connect 7 0 14 0; +#X connect 8 0 3 0; +#X connect 9 0 11 1; +#X connect 9 0 12 1; +#X connect 10 0 11 1; +#X connect 11 0 10 0; +#X connect 11 0 4 1; +#X connect 12 0 2 0; +#X connect 12 0 8 1; +#X connect 13 0 12 0; +#X connect 13 1 11 0; +#X connect 13 2 9 0; +#X connect 14 0 6 0; +#X connect 14 1 0 0; +#X connect 14 2 9 1; diff --git a/list-abs/list-moses-help.pd b/list-abs/list-moses-help.pd new file mode 100755 index 0000000..95aae6e --- /dev/null +++ b/list-abs/list-moses-help.pd @@ -0,0 +1,41 @@ +#N canvas 0 31 691 397 10; +#X floatatom 95 93 5 0 0 0 - - -; +#X obj 95 355 print smaller; +#X obj 141 332 print bigger-or-equal; +#X floatatom 141 227 5 0 0 2 split-value - -; +#X text 57 38 list-moses: like [moses] for lists. Additionally you +can set the element index \, at which to compare \, if it is bigger +or smaller than the stored value.; +#X text 338 217 arg1: comparison value; +#X obj 188 255 hradio 15 1 0 8 empty empty split-index 0 -6 0 10 -262144 +-1 -1 1; +#X floatatom 128 148 5 0 0 0 - - -; +#X obj 95 277 list-moses 4 2; +#X text 337 252 arg2: which element to compare (zero based). Can be +negative \, too.; +#X msg 128 172 1 TEST \$1 4 5 6 7 8; +#X obj 188 306 print not-a-float; +#X msg 95 117 \$1 \$1 \$1 \$1 \$1 \$1 \$1 \$1; +#N canvas 510 66 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 185 AUTHOR Frank Barknecht; +#X text 12 205 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION like [moses] for lists; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 float; +#X text 12 105 INLET_2 float; +#X text 12 125 OUTLET_0 list; +#X text 12 145 OUTLET_1 list; +#X text 12 165 OUTLET_2 list; +#X restore 636 371 pd META; +#X connect 0 0 12 0; +#X connect 3 0 8 1; +#X connect 6 0 8 2; +#X connect 7 0 10 0; +#X connect 8 0 1 0; +#X connect 8 1 2 0; +#X connect 8 2 11 0; +#X connect 10 0 8 0; +#X connect 12 0 8 0; diff --git a/list-abs/list-moses.pd b/list-abs/list-moses.pd new file mode 100755 index 0000000..c15fa82 --- /dev/null +++ b/list-abs/list-moses.pd @@ -0,0 +1,32 @@ +#N canvas 264 111 497 457 10; +#X obj 66 63 inlet; +#X obj 201 120 list-idx \$2; +#X obj 273 91 inlet; +#X obj 231 210 inlet; +#X obj 201 148 route float; +#X obj 66 399 outlet; +#X obj 90 369 outlet; +#X obj 201 242 >= \$1; +#X obj 66 90 t a a; +#X text 165 34 arg1: comparison value; +#X text 165 59 arg2: which element to compare (zero based); +#X obj 114 338 outlet; +#X obj 273 210 b; +#X obj 66 278 list prepend 2; +#X obj 273 242 2; +#X obj 66 308 route 0 1 2; +#X connect 0 0 8 0; +#X connect 1 0 4 0; +#X connect 2 0 1 1; +#X connect 3 0 7 1; +#X connect 4 0 7 0; +#X connect 4 1 12 0; +#X connect 7 0 13 1; +#X connect 8 0 13 0; +#X connect 8 1 1 0; +#X connect 12 0 14 0; +#X connect 13 0 15 0; +#X connect 14 0 13 1; +#X connect 15 0 5 0; +#X connect 15 1 6 0; +#X connect 15 2 11 0; diff --git a/list-abs/list-mult-help.pd b/list-abs/list-mult-help.pd new file mode 100755 index 0000000..17f2cc7 --- /dev/null +++ b/list-abs/list-mult-help.pd @@ -0,0 +1,20 @@ +#N canvas 0 31 450 300 10; +#X msg 145 116 5 5 5 NOPE 5; +#X obj 145 217 print; +#X msg 203 139 1 2 3 0 -1; +#X text 108 67 Substract two lists element by element; +#X obj 145 177 list-mult; +#N canvas 460 31 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 105 OUTLET_0 list; +#X text 12 45 DESCRIPTION substract two lists element by element; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 anything; +#X restore 386 271 pd META; +#X connect 0 0 4 0; +#X connect 2 0 4 1; +#X connect 4 0 1 0; diff --git a/list-abs/list-mult.pd b/list-abs/list-mult.pd new file mode 100755 index 0000000..8c04ab8 --- /dev/null +++ b/list-abs/list-mult.pd @@ -0,0 +1,8 @@ +#N canvas 256 135 500 518 10; +#X obj 59 31 inlet; +#X obj 138 34 inlet; +#X obj 59 117 outlet; +#X obj 59 84 list-emath *; +#X connect 0 0 3 0; +#X connect 1 0 3 1; +#X connect 3 0 2 0; diff --git a/list-abs/list-normalize-help.pd b/list-abs/list-normalize-help.pd new file mode 100755 index 0000000..844c4bd --- /dev/null +++ b/list-abs/list-normalize-help.pd @@ -0,0 +1,79 @@ +#N canvas 0 31 832 543 10; +#X obj 145 295 list-normalize; +#X msg 145 183 10 100 200; +#X msg 157 204 -10 100 200; +#X msg 165 226 -10 100 and -200; +#X msg 168 251 0.1 0.01 and -0.02; +#X text 40 13 list-normalize: normalize a list.; +#X text 54 89 All the other float elements then are scaled with the +same factor.; +#X text 54 41 First it looks for the element with the largest absolute +value \, then this is scaled to be 1 or -1 preserving the sign.; +#X text 54 129 It's the same operation as the "Normalize" instruction +in many soundfile editors or the "normalize 1" method of Pd arrays. +; +#X obj 427 425 list-math *; +#X text 33 427 Hint: To normalize to values other than 1 \, you can +use:; +#X obj 499 366 loadbang; +#X floatatom 499 406 5 0 0 0 - - -; +#X msg 499 386 3; +#X obj 145 377 print Normalized; +#X obj 427 450 print Norm_to_3; +#X obj 617 28 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 617 205 pack 0 0 0; +#X obj 639 166 t b f; +#X obj 685 169 t b f; +#X obj 617 267 unpack 0 0 0; +#X obj 652 28 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 685 28 vsl 15 128 0 127 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X floatatom 617 298 5 0 0 0 - - -; +#X floatatom 656 298 5 0 0 0 - - -; +#X floatatom 696 298 5 0 0 0 - - -; +#X obj 617 324 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 656 324 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 696 324 vsl 15 128 0 1 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X text 735 94 0-127; +#X text 740 390 0-1; +#X obj 617 240 list-normalize; +#N canvas 460 31 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 85 OUTLET_0 list; +#X text 12 45 DESCRIPTION normalize a list; +#X text 12 65 INLET_0 list; +#X restore 746 491 pd META; +#X connect 0 0 9 0; +#X connect 0 0 14 0; +#X connect 1 0 0 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 9 0 15 0; +#X connect 11 0 13 0; +#X connect 12 0 9 1; +#X connect 13 0 12 0; +#X connect 16 0 17 0; +#X connect 17 0 31 0; +#X connect 18 0 17 0; +#X connect 18 1 17 1; +#X connect 19 0 17 0; +#X connect 19 1 17 2; +#X connect 20 0 23 0; +#X connect 20 1 24 0; +#X connect 20 2 25 0; +#X connect 21 0 18 0; +#X connect 22 0 19 0; +#X connect 23 0 26 0; +#X connect 24 0 27 0; +#X connect 25 0 28 0; +#X connect 31 0 20 0; diff --git a/list-abs/list-normalize.pd b/list-abs/list-normalize.pd new file mode 100755 index 0000000..953a51f --- /dev/null +++ b/list-abs/list-normalize.pd @@ -0,0 +1,14 @@ +#N canvas 306 264 642 393 10; +#X obj 209 202 list-minmax; +#X obj 209 170 list-abs; +#X obj 179 77 inlet; +#X obj 179 99 t a a; +#X obj 209 286 list-math /; +#X obj 209 319 outlet; +#X text 135 41 list-normalize: normalize a list inside (-1 \, 1); +#X connect 0 1 4 1; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 1 1 0; +#X connect 4 0 5 0; diff --git a/list-abs/list-nth-help.pd b/list-abs/list-nth-help.pd new file mode 100755 index 0000000..12792fc --- /dev/null +++ b/list-abs/list-nth-help.pd @@ -0,0 +1,43 @@ +#N canvas 0 31 624 592 10; +#X floatatom 268 339 5 0 0 1 n - -; +#X text 136 110 Inlets: 1) list to look up in; +#X text 134 38 look up the nth element in a list. n has to be positive +and is zero-based!; +#X obj 56 493 list-idx; +#X text 53 472 Also see:; +#X obj 215 392 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 56 38 list-nth; +#X text 193 129 2) number giving position to filter. Zero-based \, +positive.; +#X msg 201 238 0 1 2 3 4 5 6; +#X text 138 83 Argument: ; +#X msg 223 300 a b c d e; +#X obj 201 425 prepent set; +#X msg 201 448; +#X msg 149 395 bang; +#X msg 218 266 list x y z; +#X obj 201 364 list-nth 2; +#X text 310 301 non-lists get converted to proper lists.; +#X text 134 162 Note: negative postion numbers give no output \, lists +longer than the index give a spurious 0 as result \, but also an error +in the console: "$x: argument out of range".; +#X text 53 520 [list-idx] is more flexible \, but a bit slower.; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION look up the nth element in a list; +#X text 12 65 INLET_0 anything; +#X text 12 85 OUTLET_0 float symbol pointer; +#X restore 538 539 pd META; +#X connect 0 0 15 1; +#X connect 8 0 15 0; +#X connect 10 0 15 0; +#X connect 11 0 12 0; +#X connect 13 0 11 0; +#X connect 14 0 15 0; +#X connect 15 0 5 0; +#X connect 15 0 11 0; diff --git a/list-abs/list-nth.pd b/list-abs/list-nth.pd new file mode 100755 index 0000000..ac48a52 --- /dev/null +++ b/list-abs/list-nth.pd @@ -0,0 +1,23 @@ +#N canvas 0 0 570 388 10; +#X obj 116 86 list; +#X msg 203 167 set \, adddollar \$1; +#X obj 116 259 outlet; +#X obj 116 57 inlet; +#X obj 171 88 f \$1; +#X obj 217 58 loadbang; +#X obj 171 57 inlet; +#X obj 171 111 moses; +#X obj 203 133 + 1; +#X msg 171 145 set; +#X msg 116 227; +#X connect 0 0 10 0; +#X connect 1 0 10 0; +#X connect 3 0 0 0; +#X connect 4 0 7 0; +#X connect 5 0 4 0; +#X connect 6 0 4 0; +#X connect 7 0 9 0; +#X connect 7 1 8 0; +#X connect 8 0 1 0; +#X connect 9 0 10 0; +#X connect 10 0 2 0; diff --git a/list-abs/list-onearg-help.pd b/list-abs/list-onearg-help.pd new file mode 100755 index 0000000..c45989c --- /dev/null +++ b/list-abs/list-onearg-help.pd @@ -0,0 +1,48 @@ +#N canvas 0 31 550 477 10; +#X msg 195 65 bang; +#X obj 195 132 print float; +#X msg 49 65 bang; +#X msg 51 197 bang; +#X obj 51 264 print blank; +#X msg 53 348 bang; +#X obj 53 415 print blank_with_default; +#X text 24 173 When there is a blank argument \, there is no output: +; +#X text 26 37 This object can take any kind of argument:; +#X msg 276 349 bang; +#X obj 276 416 print blank_with_default; +#X msg 204 195 bang; +#X obj 204 262 print blank; +#X obj 49 132 print non-float; +#X obj 49 101 list-onearg word; +#X obj 53 384 list-onearg \$1 default; +#X obj 51 233 list-onearg; +#X obj 204 231 list-onearg \$1; +#X obj 195 101 list-onearg 5; +#X text 13 12 [list-onearg]; +#X obj 276 385 list-onearg 0 256; +#X text 32 295 If you set a second argument \, it will be used as the +default when the argument is blank. (0 is treated as no argument \, +too.); +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op abstraction_op; +#X text 12 45 DESCRIPTION output on bang only if \$1 exists; +#X text 12 65 INLET_0 bang; +#X text 12 85 OUTLET_0 float symbol; +#X restore 485 446 pd META; +#X connect 0 0 18 0; +#X connect 2 0 14 0; +#X connect 3 0 16 0; +#X connect 5 0 15 0; +#X connect 9 0 20 0; +#X connect 11 0 17 0; +#X connect 14 0 13 0; +#X connect 15 0 6 0; +#X connect 16 0 4 0; +#X connect 17 0 12 0; +#X connect 18 0 1 0; +#X connect 20 0 10 0; diff --git a/list-abs/list-onearg.pd b/list-abs/list-onearg.pd new file mode 100755 index 0000000..44c1463 --- /dev/null +++ b/list-abs/list-onearg.pd @@ -0,0 +1,23 @@ +#N canvas 160 304 587 350 10; +#X obj 259 234 outlet; +#X text 83 259 If the argument is not equal to 0 \, use it. Pd init +arguments to 0 so unused arguments will be 0; +#X obj 143 116 select 0; +#X text 82 296 This is useful to have internals inited \, but not reset +if there is no argument specified.; +#X obj 143 190 select 0; +#X text 275 172 if 2nd arg \, then use as default value; +#X obj 143 20 inlet; +#X obj 259 13 inlet; +#X text 297 14 convenience inlet; +#X obj 143 96 list append \$1; +#X obj 143 169 list append \$2; +#X obj 143 55 bang; +#X connect 2 0 10 0; +#X connect 2 1 0 0; +#X connect 4 1 0 0; +#X connect 6 0 11 0; +#X connect 7 0 0 0; +#X connect 9 0 2 0; +#X connect 10 0 4 0; +#X connect 11 0 9 0; diff --git a/list-abs/list-pad-help.pd b/list-abs/list-pad-help.pd new file mode 100755 index 0000000..73c44c8 --- /dev/null +++ b/list-abs/list-pad-help.pd @@ -0,0 +1,42 @@ +#N canvas 0 31 554 508 10; +#X obj 159 285 list-pad; +#X obj 159 335 list trim; +#X obj 159 313 list prepend set; +#X msg 62 209 bang; +#X msg 212 253 a b c d e f; +#X msg 159 211 1 2 3; +#X msg 206 210 1 2 3 4 5 6 7 8 9; +#X text 111 417 Using an idiom by Michal Seta; +#X msg 125 211 1; +#X text 97 53 Use [list-pad] when you want to complete a list with +more values \, if the incoming list is too short. Longer lists get +passed unchanged.; +#X obj 50 29 list-pad; +#X text 315 256 <= pad to these values; +#X obj 212 233 loadbang; +#X text 97 105 The list of padding values is provided through the second +inlet.; +#X text 96 149 The result list consists of the first list padded with +the respective values of the second list.; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 135 AUTHOR Frank Barknecht; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION complete a list with more values \, if the +incoming list is too short; +#X text 12 75 INLET_0 anything; +#X text 12 115 OUTLET_0 list; +#X text 12 95 INLET_1 anything; +#X text 12 5 KEYWORDS control list_op; +#X restore 465 456 pd META; +#X msg 159 380; +#X connect 0 0 2 0; +#X connect 1 0 16 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 0 1; +#X connect 5 0 0 0; +#X connect 6 0 0 0; +#X connect 8 0 0 0; +#X connect 12 0 4 0; diff --git a/list-abs/list-pad.pd b/list-abs/list-pad.pd new file mode 100755 index 0000000..4242a2b --- /dev/null +++ b/list-abs/list-pad.pd @@ -0,0 +1,21 @@ +#N canvas 325 242 450 300 10; +#X obj 129 41 inlet; +#X obj 216 113 list; +#X obj 216 140 list length; +#X obj 149 190 list split; +#X obj 228 43 inlet; +#X obj 129 256 outlet; +#X obj 129 74 t a b b a; +#X obj 129 229 list append; +#X obj 149 166 list; +#X connect 0 0 6 0; +#X connect 1 0 2 0; +#X connect 2 0 3 1; +#X connect 3 1 7 1; +#X connect 4 0 8 1; +#X connect 6 0 7 0; +#X connect 6 1 8 0; +#X connect 6 2 7 1; +#X connect 6 3 1 0; +#X connect 7 0 5 0; +#X connect 8 0 3 0; diff --git a/list-abs/list-quicksort-help.pd b/list-abs/list-quicksort-help.pd new file mode 100755 index 0000000..af97e10 --- /dev/null +++ b/list-abs/list-quicksort-help.pd @@ -0,0 +1,51 @@ +#N canvas 155 47 766 651 10; +#X msg 93 470 2 3 100; +#X obj 223 357 hradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144 +-1 -1 0; +#X msg 267 357 asc; +#X msg 305 357 desc; +#X obj 93 205 list-random 100 10; +#X obj 125 256 prepent set; +#X msg 93 179 bang; +#X obj 93 230 t b a; +#X msg 93 291 91 35 78 70 85 46 64 10 93 83; +#X text 279 324 non-floats are removed with a warning.; +#X msg 135 324 100 2 wrong type 3; +#X obj 93 441 prepent set; +#X text 66 80 Inlets: 1) list to sort; +#X text 66 134 Argument:; +#X text 121 98 2) direction: 0 or asc for ascending \, 1 or desc for +descending; +#X text 137 134 +; +#X text 65 40 Sort an incoming list of values in ascending or descending +order. Non-numbers are dropped.; +#X text 299 510 Alternative implementations available in:; +#X obj 383 540 list-shellsort; +#X obj 309 540 list-sort; +#X text 59 525 2008 Matt Barber; +#X obj 93 396 list-quicksort desc; +#X obj 35 11 list-quicksort; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 5 KEYWORDS control list_op; +#X text 12 75 INLET_0 list; +#X text 12 95 INLET_1 float asc desc; +#X text 12 115 OUTLET_0 list; +#X text 12 135 AUTHOR Matt Barber; +#X text 12 155 HELP_PATCH_AUTHORS Matt Barber \, Frank Barknecht; +#X text 11 44 DESCRIPTION sort an incoming list of values in ascending +or descending order using a quicksort algorithm on a table.; +#X restore 675 603 pd META; +#X connect 1 0 21 1; +#X connect 2 0 21 1; +#X connect 3 0 21 1; +#X connect 4 0 7 0; +#X connect 5 0 8 0; +#X connect 6 0 4 0; +#X connect 7 0 8 0; +#X connect 7 1 5 0; +#X connect 8 0 21 0; +#X connect 10 0 21 0; +#X connect 11 0 0 0; +#X connect 21 0 11 0; diff --git a/list-abs/list-quicksort.pd b/list-abs/list-quicksort.pd new file mode 100755 index 0000000..06f54bc --- /dev/null +++ b/list-abs/list-quicksort.pd @@ -0,0 +1,1130 @@ +#N canvas 639 454 587 357 10; +#X obj 53 47 inlet; +#X obj 53 249 outlet; +#X obj 449 100 loadbang; +#X obj 387 52 inlet; +#X obj 387 161 list append \$1; +#X obj 387 131 t b a; +#X obj 387 189 s \$0-direction; +#X obj 53 121 sel 0 1; +#X obj 72 221 list-tabdump; +#X obj 72 175 list prepend \$0-table; +#X obj 72 199 list append 0; +#X text 55 334 2008 Matt Barber; +#N canvas 520 211 803 430 \$0-table 0; +#X obj 185 113 list-len; +#X msg 271 361 resize \$1; +#X obj 271 384 s \$0-table; +#X obj 41 24 inlet; +#X obj 41 344 outlet; +#X obj 41 207 f; +#X obj 139 24 table \$0-table 100; +#X obj 185 136 moses 100; +#X obj 185 173 * 0.01; +#X obj 185 195 + 1; +#X obj 185 218 int; +#X obj 185 242 * 100; +#X obj 271 259 t f f f; +#X obj 290 283 * 2; +#X msg 290 305 resize \$1; +#X obj 290 327 s \$0-queue-table; +#X text 401 327 <== resize list table so that it can hold the lists. +Size of queue table needs to be about 2 times this in the worst case +(2 values for each partition \, with a worst case of n-1 partitions +for a list of size n). This could be more conservative since the size +is based on the list before the floats were filtered out.; +#N canvas 0 22 583 323 \$0-filter-write 0; +#X text 20 20 Filter non-floats quicker than [list-filter]; +#X obj 109 69 inlet; +#X obj 51 135 list-drip; +#X obj 201 204 print; +#X msg 201 174 list-quicksort: Warning: dropped a non-number from list +; +#X obj 158 238 outlet; +#X obj 121 207 f; +#X obj 149 207 + 1; +#X obj 51 273 tabwrite \$0-table; +#X msg 136 120 0; +#X obj 51 157 route float; +#X obj 51 179 t f b; +#X obj 109 91 t a b; +#X connect 1 0 12 0; +#X connect 2 0 10 0; +#X connect 4 0 3 0; +#X connect 6 0 7 0; +#X connect 6 0 8 1; +#X connect 7 0 6 1; +#X connect 7 0 5 0; +#X connect 9 0 6 1; +#X connect 10 0 11 0; +#X connect 10 1 4 0; +#X connect 11 0 8 0; +#X connect 11 1 6 0; +#X connect 12 0 2 0; +#X connect 12 1 9 0; +#X restore 58 145 pd \$0-filter-write; +#X obj 41 56 t b a a b; +#X msg 92 111 0; +#X connect 0 0 7 0; +#X connect 1 0 2 0; +#X connect 3 0 18 0; +#X connect 5 0 4 0; +#X connect 7 1 8 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 12 0 1 0; +#X connect 12 1 13 0; +#X connect 12 2 7 1; +#X connect 13 0 14 0; +#X connect 14 0 15 0; +#X connect 17 0 5 1; +#X connect 18 0 5 0; +#X connect 18 1 17 0; +#X connect 18 2 0 0; +#X connect 18 3 19 0; +#X connect 19 0 5 1; +#X restore 53 76 pd \$0-table; +#X text 332 234 <== engine; +#X obj 232 205 - 1; +#N canvas 232 332 1064 568 \$0-main-loop 1; +#X obj 70 14 inlet; +#X obj 70 231 v \$0-left; +#X obj 136 231 v \$0-right; +#N canvas 677 165 450 300 \$0-tabswap 0; +#X obj 164 23 inlet; +#X obj 236 47 inlet; +#X obj 250 120 f; +#X obj 265 97 tabread \$0-table; +#X obj 69 120 tabread \$0-table; +#X obj 93 204 tabwrite \$0-table; +#X obj 164 46 t b f f; +#X connect 0 0 6 0; +#X connect 1 0 3 0; +#X connect 1 0 5 1; +#X connect 2 0 5 0; +#X connect 3 0 2 1; +#X connect 4 0 5 0; +#X connect 6 0 2 0; +#X connect 6 1 5 1; +#X connect 6 2 4 0; +#X restore 401 461 pd \$0-tabswap; +#N canvas 404 68 735 438 \$0-find-pivot 1; +#X obj 38 135 inlet; +#N canvas 95 526 394 222 \$0-median-of-three 0; +#X obj 47 13 inlet; +#X obj 146 50 v \$0-right; +#X obj 47 58 v \$0-left; +#X obj 96 96 +; +#X obj 96 116 * 0.5; +#X obj 47 79 t f f; +#N canvas 291 521 635 449 \$0-find-median 0; +#X obj 163 76 inlet; +#X obj 331 86 inlet; +#X obj 386 82 inlet; +#X obj 206 311 outlet; +#X obj 206 261 f; +#X obj 175 261 f; +#N canvas 60 186 904 625 \$0-logic 0; +#X obj 68 27 inlet; +#X obj 239 108 inlet; +#X obj 383 108 inlet; +#X obj 72 493 outlet; +#X obj 152 493 outlet; +#X obj 239 180 max; +#X obj 148 169 min; +#X obj 48 197 min; +#X obj 133 214 max; +#X obj 368 257 ==; +#X obj 152 293 ==; +#X obj 72 301 ==; +#X obj 133 240 t f f f; +#X obj 72 325 sel 1; +#X obj 152 317 sel 1; +#X obj 368 290 sel 1; +#X obj 152 461 spigot; +#X obj 72 460 spigot; +#X obj 68 60 t f f b; +#X obj 107 108 s \$0-logic-spigots; +#X msg 107 86 1; +#X obj 152 342 t b b; +#X obj 246 398 r \$0-logic-spigots; +#X msg 185 398 0; +#X msg 105 398 0; +#X text 376 396 <== if median is doubled \, only bang out one of them. +; +#X obj 368 314 t b b; +#X obj 368 493 outlet; +#X text 396 177 <== First "sort" right and center \, then "sort" left +and right \, then "sort" left and center. Median will be sent to the +trigger. Another option might be to actually sort them in the table +\, but this probably takes more steps in Pd since reading a table requires +an object.; +#X connect 0 0 18 0; +#X connect 1 0 5 0; +#X connect 1 0 6 0; +#X connect 1 0 10 1; +#X connect 2 0 6 1; +#X connect 2 0 5 1; +#X connect 2 0 9 1; +#X connect 5 0 7 1; +#X connect 6 0 8 1; +#X connect 7 0 8 0; +#X connect 8 0 12 0; +#X connect 9 0 15 0; +#X connect 10 0 14 0; +#X connect 11 0 13 0; +#X connect 12 0 11 0; +#X connect 12 1 10 0; +#X connect 12 2 9 0; +#X connect 13 0 17 0; +#X connect 14 0 21 0; +#X connect 15 0 26 0; +#X connect 16 0 4 0; +#X connect 17 0 3 0; +#X connect 18 0 7 0; +#X connect 18 1 11 1; +#X connect 18 2 20 0; +#X connect 20 0 19 0; +#X connect 21 0 16 0; +#X connect 21 1 24 0; +#X connect 22 0 16 1; +#X connect 22 0 17 1; +#X connect 23 0 16 1; +#X connect 23 0 17 1; +#X connect 24 0 17 1; +#X connect 26 0 27 0; +#X connect 26 1 23 0; +#X connect 26 1 24 0; +#X restore 45 189 pd \$0-logic; +#X obj 386 103 tabread \$0-table; +#X obj 213 103 tabread \$0-table; +#X obj 45 120 tabread \$0-table; +#X obj 163 103 t f f; +#X obj 237 261 f; +#X text 276 262 <== output index of median; +#X connect 0 0 10 0; +#X connect 1 0 4 1; +#X connect 1 0 8 0; +#X connect 2 0 7 0; +#X connect 2 0 11 1; +#X connect 4 0 3 0; +#X connect 5 0 3 0; +#X connect 6 0 5 0; +#X connect 6 1 4 0; +#X connect 6 2 11 0; +#X connect 7 0 6 2; +#X connect 8 0 6 1; +#X connect 9 0 6 0; +#X connect 10 0 9 0; +#X connect 10 1 5 1; +#X connect 11 0 3 0; +#X restore 47 160 pd \$0-find-median; +#X obj 47 182 outlet; +#X obj 96 137 int; +#X obj 47 33 t b b; +#X connect 0 0 9 0; +#X connect 1 0 6 2; +#X connect 1 0 3 1; +#X connect 2 0 5 0; +#X connect 3 0 4 0; +#X connect 4 0 8 0; +#X connect 5 0 6 0; +#X connect 5 1 3 0; +#X connect 6 0 7 0; +#X connect 8 0 6 1; +#X connect 9 0 2 0; +#X connect 9 1 1 0; +#X restore 38 214 pd \$0-median-of-three; +#X obj 182 173 v \$0-right; +#X obj 38 156 t b b; +#X obj 38 268 ==; +#X obj 38 238 t f f; +#X obj 88 323 f; +#X obj 137 340 pack 0 0; +#X obj 38 290 sel 0; +#X obj 137 361 s \$0-swap; +#X text 215 289 <== If the median is the right element \, do nothing +\, otherwise swap the median element with the right element.; +#X text 36 15 Quicksort algorithm runs quicker on average (with evenly +distributed lists) if pivot is chosen as the median of three elements +of a partition to be sorted. The upshot is that the same method can +be used to manually sort partitions of 3 elements or less. This step +isn't needed for partitions of size four \, since the next round will +be manually sorted no matter what. This step can be sabotaged with +specialized "median-of-three killer" lists \, which don't arise in +everyday circumstances.; +#X text 235 212 <== Find the median of the left \, middle \, and right +elements and pass the index. Any three indices will do \, but using +these three might lead to fewer total swaps.; +#X connect 0 0 3 0; +#X connect 1 0 5 0; +#X connect 2 0 4 1; +#X connect 2 0 7 1; +#X connect 3 0 1 0; +#X connect 3 1 2 0; +#X connect 4 0 8 0; +#X connect 5 0 4 0; +#X connect 5 1 6 1; +#X connect 6 0 7 0; +#X connect 7 0 9 0; +#X connect 8 0 6 0; +#X restore 175 403 pd \$0-find-pivot; +#N canvas 292 184 823 728 \$0-partition-loop 0; +#X obj 327 288 v \$0-right; +#X obj 149 260 v \$0-left; +#X obj 64 136 inlet; +#N canvas 741 346 630 559 \$0-right-loop 0; +#X obj 165 53 inlet; +#X obj 245 266 inlet; +#X obj 112 133 until; +#X obj 165 74 - 1; +#X obj 169 168 f; +#X obj 225 168 - 1; +#X obj 193 467 f; +#X obj 38 337 sel 1; +#X obj 38 359 t b b; +#X obj 65 382 s \$0-stop-right-loop; +#X obj 38 260 tabread \$0-table; +#X obj 304 208 v $-left; +#X obj 289 286 sel 1; +#X obj 316 329 s \$0-stop-right-loop; +#X obj 139 32 r \$0-stop-right-loop; +#X obj 165 96 t b f b; +#X text 338 266 <== insulate against a runaway "pointer"; +#X obj 193 488 outlet; +#X obj 289 306 t b b; +#X obj 169 196 t f f f; +#X obj 289 263 <; +#X obj 304 235 + 1; +#X text 275 45 This decrements a pointer from the right side until +it finds a value less than the pivot.; +#X obj 38 305 <; +#N canvas 547 408 584 529 >oror; +#X connect 0 0 3 0; +#X connect 1 0 24 1; +#X connect 2 0 4 0; +#X connect 3 0 15 0; +#X connect 4 0 19 0; +#X connect 5 0 4 1; +#X connect 6 0 17 0; +#X connect 7 0 8 0; +#X connect 8 0 6 0; +#X connect 8 1 9 0; +#X connect 10 0 24 0; +#X connect 11 0 21 0; +#X connect 12 0 18 0; +#X connect 14 0 2 1; +#X connect 15 0 2 0; +#X connect 15 1 4 1; +#X connect 15 2 11 0; +#X connect 18 0 6 0; +#X connect 18 1 13 0; +#X connect 19 0 10 0; +#X connect 19 1 20 0; +#X connect 19 2 5 0; +#X connect 19 2 6 1; +#X connect 20 0 12 0; +#X connect 21 0 20 1; +#X connect 23 0 7 0; +#X connect 24 0 23 0; +#X connect 24 1 23 1; +#X connect 24 2 25 0; +#X connect 24 3 25 1; +#X connect 25 0 7 0; +#X restore 312 461 pd \$0-right-loop; +#X obj 405 348 tabread \$0-table; +#X obj 312 431 f; +#X obj 64 424 f; +#N canvas 159 384 697 546 \$0-left-loop 0; +#X obj 165 52 inlet; +#X obj 245 275 inlet; +#X obj 112 133 until; +#X obj 169 168 f; +#X obj 193 477 f; +#X obj 38 357 sel 1; +#X obj 38 379 t b b; +#X obj 38 270 tabread \$0-table; +#X obj 289 276 sel 1; +#X obj 165 96 t b f b; +#X obj 193 498 outlet; +#X obj 139 18 r \$0-stop-left-loop; +#X obj 316 329 s \$0-stop-left-loop; +#X obj 65 402 s \$0-stop-left-loop; +#X obj 226 168 + 1; +#X obj 289 303 t b b; +#X obj 169 196 t f f f; +#X obj 304 188 v \$0-right; +#X obj 304 212 - 1; +#X obj 289 253 >=; +#X text 338 256 <== insulate against a runaway "pointer."; +#X text 289 22 This increments a "pointer" from the left side until +it finds a value that is greater than the pivot.; +#X obj 38 315 >; +#N canvas 547 408 584 529 >oror=; +#X obj 64 483 t f f; +#X obj 327 331 t f f; +#X obj 64 591 sel 0; +#X obj 114 407 + 1; +#X obj 64 158 t b b; +#X obj 64 236 until; +#X obj 64 260 t b b; +#X obj 91 206 r \$0-stop-partition-loop; +#X obj 109 175 s \$0-partition-loop-init; +#X obj 327 243 r \$0-partition-loop-init; +#X obj 405 372 s \$0-pivot-value; +#X obj 405 435 r \$0-pivot-value; +#X obj 151 435 r \$0-pivot-value; +#X obj 312 484 s \$0-right-pointer; +#X obj 79 548 r \$0-right-pointer; +#X obj 91 508 s \$0-left-pointer; +#X obj 114 382 r \$0-left-pointer; +#X text 123 33 This partitions a portion of the table (from the "left" +to the "right" indices given) based on the pivot \, which will be the +right index value. If we're sorting in ascending order \, all values +less than the pivot will be moved to the left and the values greater +than the pivot will be moved to the right. The two loops find indices +to swap values that are on the wrong side. At the end of the loop \, +the right value will be swapped to the middle \; it is now in its proper +location in the table. New partition boundaries based on this location +are sent to the schedule queue.; +#X text 371 551 <== if the pointers have not met \, then we've found +values to swap. If they have met or passed each other \, then all values +are in place \, and we should break the loop.; +#X text 430 461 <== Run the two loops to find values to swap.; +#X obj 354 394 s \$0-right-index; +#N canvas 86 406 953 398 \$0-tail 0; +#X obj 63 69 inlet; +#X obj 398 80 inlet; +#X obj 437 137 s \$0-stop-partition-loop; +#X obj 63 277 pack 0 0; +#X obj 63 254 f; +#X obj 235 290 pack 0 0; +#X obj 328 138 f; +#X obj 63 307 s \$0-swap; +#N canvas 308 492 677 393 \$0-schedule-next 0; +#X obj 85 93 inlet; +#X obj 91 216 - 1; +#X obj 46 233 moses; +#X obj 46 178 v \$0-left; +#X obj 155 240 moses; +#X obj 129 188 v \$0-right; +#X obj 203 223 + 2; +#X obj 182 296 pack 0 0; +#X obj 182 271 swap; +#X obj 203 93 inlet; +#X obj 46 313 list append; +#X obj 46 259 pack 0 0; +#X obj 203 246 - 1; +#X obj 73 286 t b; +#X obj 46 336 s \$0-schedule; +#X obj 85 115 t b b b; +#X text 28 24 This schedules the next partitions to be sorted. After +the pivot is replaced to its proper location \, the new partitions +should be [left \, pivotindex-1] and [pivotindex+1 \, right].; +#X text 277 230 <== If the values within a pair are the same \, they +point to one element of the table which is in its proper location. +So we don't schedule it. Note the spooky arithmetic \, necessary because +[moses] is >= at the right outlet.; +#X connect 0 0 15 0; +#X connect 1 0 2 1; +#X connect 1 0 11 1; +#X connect 2 0 11 0; +#X connect 2 1 13 0; +#X connect 3 0 2 0; +#X connect 4 1 8 0; +#X connect 5 0 4 0; +#X connect 6 0 4 1; +#X connect 6 0 12 0; +#X connect 7 0 10 1; +#X connect 8 0 7 0; +#X connect 8 1 7 1; +#X connect 9 0 6 0; +#X connect 9 0 1 0; +#X connect 10 0 14 0; +#X connect 11 0 10 0; +#X connect 12 0 8 1; +#X connect 13 0 10 0; +#X connect 15 0 3 0; +#X connect 15 1 5 0; +#X connect 15 2 10 1; +#X restore 398 350 pd \$0-schedule-next; +#X obj 398 106 t b b b; +#X obj 78 227 r \$0-left-pointer; +#X obj 343 53 r \$0-left-pointer; +#X obj 108 250 r \$0-right-pointer; +#X obj 437 158 r \$0-right-index; +#X obj 328 182 t f f f; +#N canvas 0 22 363 368 \$0-adjacent? 0; +#X obj 63 73 inlet; +#X obj 123 134 inlet; +#X obj 115 220 f; +#X obj 63 151 ==; +#X obj 63 180 sel 1; +#X obj 63 95 + 1; +#X obj 63 122 t f f; +#X obj 115 243 outlet; +#X connect 0 0 5 0; +#X connect 1 0 3 1; +#X connect 2 0 7 0; +#X connect 3 0 4 0; +#X connect 4 0 2 0; +#X connect 5 0 6 0; +#X connect 6 0 3 0; +#X connect 6 1 2 1; +#X restore 427 311 pd \$0-adjacent?; +#N canvas 2 76 450 338 \$0-pivot-order? 0; +#X obj 86 44 inlet; +#X obj 96 272 outlet; +#X obj 105 192 sel 0; +#X obj 112 104 r \$0-pivot-value; +#X obj 105 79 tabread \$0-table; +#N canvas 547 408 584 529 >oror; +#X obj 144 207 r \$0-left-pointer; +#X obj 114 243 f; +#X connect 0 0 4 0; +#X connect 2 0 9 0; +#X connect 3 0 5 1; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 5 1 6 1; +#X connect 5 2 7 0; +#X connect 5 3 7 1; +#X connect 6 0 2 0; +#X connect 7 0 2 0; +#X connect 8 0 9 1; +#X connect 9 0 1 0; +#X restore 235 231 pd \$0-pivot-order?; +#X obj 280 264 r \$0-right-index; +#X text 502 225 <== Don't swap if the last left pointer points to a +value that is already in order with the pivot.; +#X text 539 310 <== When the last left pointer is adjacent to the pivot +(on the right) \, schedule the left pointer for the next partition. +; +#X connect 0 0 4 0; +#X connect 1 0 9 0; +#X connect 3 0 7 0; +#X connect 4 0 3 0; +#X connect 5 0 7 0; +#X connect 6 0 14 0; +#X connect 9 0 8 0; +#X connect 9 1 6 0; +#X connect 9 2 2 0; +#X connect 10 0 4 1; +#X connect 11 0 6 1; +#X connect 12 0 3 1; +#X connect 13 0 15 1; +#X connect 14 0 16 0; +#X connect 14 1 15 0; +#X connect 14 2 8 1; +#X connect 15 0 8 1; +#X connect 16 0 5 0; +#X connect 17 0 5 1; +#X restore 64 630 pd \$0-tail; +#X text 143 632 <== put the rest here to save space; +#X connect 0 0 10 0; +#X connect 1 0 6 1; +#X connect 2 0 13 0; +#X connect 3 0 5 1; +#X connect 3 0 22 0; +#X connect 4 0 19 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 7 0 9 0; +#X connect 8 0 11 0; +#X connect 9 0 8 0; +#X connect 9 1 24 0; +#X connect 10 0 5 1; +#X connect 10 1 4 0; +#X connect 10 1 29 0; +#X connect 11 0 30 0; +#X connect 11 1 30 1; +#X connect 12 0 6 1; +#X connect 13 0 14 0; +#X connect 13 1 17 0; +#X connect 14 0 15 0; +#X connect 15 0 6 0; +#X connect 15 1 5 0; +#X connect 16 0 14 1; +#X connect 18 0 1 0; +#X connect 18 0 0 0; +#X connect 20 0 3 1; +#X connect 21 0 7 1; +#X connect 23 0 8 1; +#X connect 25 0 12 0; +#X restore 109 435 pd \$0-partition-loop; +#X obj 401 412 r \$0-swap; +#N canvas 670 232 607 336 \$0-manual-sort 0; +#X obj 27 58 inlet; +#N canvas 207 434 411 426 \$0-sort-2 0; +#X obj 49 78 inlet; +#X obj 49 100 t b b; +#X obj 49 128 v \$0-left; +#X obj 296 117 v \$0-right; +#X obj 49 184 tabread \$0-table; +#X obj 167 184 tabread \$0-table; +#X obj 197 327 tabwrite \$0-table; +#X obj 49 327 tabwrite \$0-table; +#N canvas 399 288 584 529 swap? 0; +#X obj 40 52 inlet; +#X obj 153 52 inlet; +#X obj 40 272 spigot 1; +#X obj 256 272 spigot; +#X obj 361 224 unpack 0 0; +#X msg 361 178 1 0; +#X msg 412 196 0 1; +#X obj 463 93 select 0; +#X obj 361 71 select asc desc; +#X obj 40 437 outlet; +#X obj 153 437 outlet; +#X obj 256 300 swap; +#X obj 153 271 spigot 1; +#X obj 317 273 spigot; +#X obj 361 45 r \$0-direction; +#X connect 0 0 2 0; +#X connect 0 0 3 0; +#X connect 1 0 12 0; +#X connect 1 0 13 0; +#X connect 2 0 9 0; +#X connect 3 0 11 0; +#X connect 4 0 2 1; +#X connect 4 0 12 1; +#X connect 4 1 3 1; +#X connect 4 1 13 1; +#X connect 5 0 4 0; +#X connect 6 0 4 0; +#X connect 7 0 5 0; +#X connect 7 1 6 0; +#X connect 8 0 5 0; +#X connect 8 1 6 0; +#X connect 8 2 7 0; +#X connect 11 0 9 0; +#X connect 11 1 10 0; +#X connect 12 0 10 0; +#X connect 13 0 11 1; +#X connect 14 0 8 0; +#X restore 152 296 pd swap?; +#X obj 152 273 min; +#X obj 197 273 max; +#X obj 49 205 t f f; +#X obj 49 155 t f f; +#X text 46 47 This one is easy. =o); +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 1 3 0; +#X connect 2 0 12 0; +#X connect 3 0 6 1; +#X connect 3 0 5 0; +#X connect 4 0 11 0; +#X connect 5 0 9 1; +#X connect 5 0 10 1; +#X connect 8 0 7 0; +#X connect 8 1 6 0; +#X connect 9 0 8 0; +#X connect 10 0 8 1; +#X connect 11 0 9 0; +#X connect 11 1 10 0; +#X connect 12 0 4 0; +#X connect 12 1 7 1; +#X restore 27 146 pd \$0-sort-2; +#N canvas 335 408 791 492 \$0-sort-3 0; +#X obj 39 23 inlet; +#X obj 39 45 t b b; +#X obj 39 73 v \$0-left; +#X obj 462 62 v \$0-right; +#X obj 306 130 - 1; +#X obj 207 415 tabwrite \$0-table; +#X obj 45 429 tabwrite \$0-table; +#X obj 363 333 tabwrite \$0-table; +#N canvas 399 288 584 529 swap? 0; +#X obj 40 52 inlet; +#X obj 153 52 inlet; +#X obj 40 272 spigot 1; +#X obj 256 272 spigot; +#X obj 361 224 unpack 0 0; +#X msg 361 178 1 0; +#X msg 412 196 0 1; +#X obj 463 93 select 0; +#X obj 361 71 select asc desc; +#X obj 40 437 outlet; +#X obj 153 437 outlet; +#X obj 256 300 swap; +#X obj 153 271 spigot 1; +#X obj 317 273 spigot; +#X obj 361 45 r \$0-direction; +#X connect 0 0 2 0; +#X connect 0 0 3 0; +#X connect 1 0 12 0; +#X connect 1 0 13 0; +#X connect 2 0 9 0; +#X connect 3 0 11 0; +#X connect 4 0 2 1; +#X connect 4 0 12 1; +#X connect 4 1 3 1; +#X connect 4 1 13 1; +#X connect 5 0 4 0; +#X connect 6 0 4 0; +#X connect 7 0 5 0; +#X connect 7 1 6 0; +#X connect 8 0 5 0; +#X connect 8 1 6 0; +#X connect 8 2 7 0; +#X connect 11 0 9 0; +#X connect 11 1 10 0; +#X connect 12 0 10 0; +#X connect 13 0 11 1; +#X connect 14 0 8 0; +#X restore 188 316 pd swap?; +#X obj 188 293 min; +#X obj 233 293 max; +#N canvas 399 288 584 529 swap? 0; +#X obj 40 52 inlet; +#X obj 153 52 inlet; +#X obj 40 272 spigot 1; +#X obj 256 272 spigot; +#X obj 361 224 unpack 0 0; +#X msg 361 178 1 0; +#X msg 412 196 0 1; +#X obj 463 93 select 0; +#X obj 361 71 select asc desc; +#X obj 40 437 outlet; +#X obj 153 437 outlet; +#X obj 256 300 swap; +#X obj 153 271 spigot 1; +#X obj 317 273 spigot; +#X obj 361 45 r \$0-direction; +#X connect 0 0 2 0; +#X connect 0 0 3 0; +#X connect 1 0 12 0; +#X connect 1 0 13 0; +#X connect 2 0 9 0; +#X connect 3 0 11 0; +#X connect 4 0 2 1; +#X connect 4 0 12 1; +#X connect 4 1 3 1; +#X connect 4 1 13 1; +#X connect 5 0 4 0; +#X connect 6 0 4 0; +#X connect 7 0 5 0; +#X connect 7 1 6 0; +#X connect 8 0 5 0; +#X connect 8 1 6 0; +#X connect 8 2 7 0; +#X connect 11 0 9 0; +#X connect 11 1 10 0; +#X connect 12 0 10 0; +#X connect 13 0 11 1; +#X connect 14 0 8 0; +#X restore 45 398 pd swap?; +#X obj 45 375 min; +#X obj 90 375 max; +#N canvas 399 288 584 529 swap? 0; +#X obj 40 52 inlet; +#X obj 153 52 inlet; +#X obj 40 272 spigot 1; +#X obj 256 272 spigot; +#X obj 361 224 unpack 0 0; +#X msg 361 178 1 0; +#X msg 412 196 0 1; +#X obj 463 93 select 0; +#X obj 361 71 select asc desc; +#X obj 40 437 outlet; +#X obj 153 437 outlet; +#X obj 256 300 swap; +#X obj 153 271 spigot 1; +#X obj 317 273 spigot; +#X obj 361 45 r \$0-direction; +#X connect 0 0 2 0; +#X connect 0 0 3 0; +#X connect 1 0 12 0; +#X connect 1 0 13 0; +#X connect 2 0 9 0; +#X connect 3 0 11 0; +#X connect 4 0 2 1; +#X connect 4 0 12 1; +#X connect 4 1 3 1; +#X connect 4 1 13 1; +#X connect 5 0 4 0; +#X connect 6 0 4 0; +#X connect 7 0 5 0; +#X connect 7 1 6 0; +#X connect 8 0 5 0; +#X connect 8 1 6 0; +#X connect 8 2 7 0; +#X connect 11 0 9 0; +#X connect 11 1 10 0; +#X connect 12 0 10 0; +#X connect 13 0 11 1; +#X connect 14 0 8 0; +#X restore 185 231 pd swap?; +#X obj 185 208 min; +#X obj 230 208 max; +#X obj 351 79 t f f; +#X obj 39 126 tabread \$0-table; +#X obj 185 147 tabread \$0-table; +#X obj 343 130 tabread \$0-table; +#X obj 185 172 t f f; +#X obj 39 97 t f f; +#X obj 39 150 t f f; +#X obj 45 333 t f f; +#X text 478 216 <== Sort right and center.; +#X text 478 296 <== Sort left and right -- right is now ready.; +#X text 478 378 <== Sort left and center -- both are ready.; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 1 1 3 0; +#X connect 2 0 22 0; +#X connect 3 0 20 0; +#X connect 3 0 7 1; +#X connect 3 0 17 0; +#X connect 4 0 5 1; +#X connect 4 0 19 0; +#X connect 8 0 24 0; +#X connect 8 1 7 0; +#X connect 9 0 8 0; +#X connect 10 0 8 1; +#X connect 11 0 6 0; +#X connect 11 1 5 0; +#X connect 12 0 11 0; +#X connect 13 0 11 1; +#X connect 14 0 13 1; +#X connect 14 0 12 1; +#X connect 14 1 10 1; +#X connect 14 1 9 1; +#X connect 15 0 14 0; +#X connect 16 0 14 1; +#X connect 17 0 4 0; +#X connect 17 1 20 0; +#X connect 18 0 23 0; +#X connect 19 0 21 0; +#X connect 20 0 16 1; +#X connect 20 0 15 1; +#X connect 21 0 15 0; +#X connect 21 1 16 0; +#X connect 22 0 18 0; +#X connect 22 1 6 1; +#X connect 23 0 9 0; +#X connect 23 1 10 0; +#X connect 24 0 12 0; +#X connect 24 1 13 0; +#X restore 66 120 pd \$0-sort-3; +#X obj 27 92 moses 2; +#X text 24 19 Here we manually sort partitions of size 2 or 3 This +should be more efficient than scheduling extra partitioning.; +#X connect 0 0 3 0; +#X connect 3 0 1 0; +#X connect 3 1 2 0; +#X restore 97 466 pd \$0-manual-sort; +#X obj 70 291 -; +#X obj 70 323 moses 3; +#X obj 109 349 moses 4; +#X obj 148 380 t b b; +#X obj 109 380 t b; +#X text 501 460 <== swapping engine; +#X text 172 346 <== no need to find pivot for partitions of size 4 +\, since both partitions of the next round will be sorted manually. +; +#X msg 89 63 0 \$1; +#X obj 401 437 unpack 0 0; +#X obj 203 34 r \$0-schedule; +#X obj 70 37 t b f b; +#X obj 70 140 until; +#X obj 70 349 t b f; +#X obj 70 498 s \$0-schedule; +#X obj 70 170 t b b; +#X obj 70 263 swap; +#X text 131 317 <== more efficient to manually sort partitions of size +3 or smaller (especially for larger lists).; +#N canvas 464 376 995 572 \$0-queue 0; +#X obj 47 109 inlet; +#X obj 47 510 outlet; +#X obj 238 479 outlet; +#X obj 47 188 list-len; +#X obj 248 175 s \$0-queue-table; +#X obj 74 158 list prepend 0; +#X obj 47 131 t a a; +#X obj 477 33 table \$0-queue-table 200; +#X obj 248 110 inlet; +#X msg 248 142 const 0; +#X obj 238 430 == 0; +#X obj 238 453 sel 1; +#X obj 211 382 tabread \$0-queue-table; +#X obj 47 382 tabread \$0-queue-table; +#X obj 74 335 + 1; +#X obj 211 407 t f f; +#X obj 177 280 f; +#X obj 47 282 f; +#X obj 250 280 +; +#X obj 76 282 + 2; +#X msg 192 127 0; +#X obj 47 212 t b b f; +#X obj 495 121 list split 2; +#X obj 495 99 list prepend; +#X text 493 68 [inlet]; +#X text 496 80 |; +#X text 557 68 [inlet]; +#X text 560 80 |; +#X text 493 217 |; +#X text 491 231 [outlet]; +#X text 583 156 |; +#X text 581 170 [outlet]; +#X obj 584 138 t b; +#X text 624 93 <== this is an equivalent construction using a [list] +sequence.; +#X text 370 378 <== after the index for the current partition is passed +\, grab the two adjacent values and pass them out.; +#X obj 211 510 outlet; +#X obj 495 200 unpack 0 0; +#X text 550 216 |; +#X text 548 230 [outlet]; +#X text 292 276 <== Two counters \, one to supply partition boundary +locations for writing (right) \, and one for reading (left).; +#X text 111 312 <== (no trigger needed as both sides lead to cold inlets) +; +#X text 308 429 <== as long as there is a partition \, the right value +should never == 0... if it does \, the table is sorted \, so we stop +the main loop and send out the list.; +#X text 49 11 This is the schedule queue for partitions. It would take +much less code to do this with a [list] sequence instead of a table +\, but the table is faster. The [list] sequence is also easier to understand +at first. The size of the table needs to be \, in the worst case \, +2(n-1) where n is the size of the list to be sorted. In this case we +simply use 2n \, as we need some zeroes at the end. This could probably +be done better.; +#X connect 0 0 6 0; +#X connect 3 0 21 0; +#X connect 5 0 4 0; +#X connect 6 0 3 0; +#X connect 6 1 5 0; +#X connect 8 0 9 0; +#X connect 8 0 20 0; +#X connect 9 0 4 0; +#X connect 10 0 11 0; +#X connect 11 0 2 0; +#X connect 12 0 15 0; +#X connect 13 0 1 0; +#X connect 14 0 12 0; +#X connect 15 0 35 0; +#X connect 15 1 10 0; +#X connect 16 0 18 0; +#X connect 17 0 19 0; +#X connect 17 0 14 0; +#X connect 17 0 13 0; +#X connect 18 0 16 1; +#X connect 18 0 5 1; +#X connect 19 0 17 1; +#X connect 20 0 17 1; +#X connect 20 0 16 1; +#X connect 20 0 5 1; +#X connect 21 0 17 0; +#X connect 21 1 16 0; +#X connect 21 2 18 1; +#X connect 22 0 36 0; +#X connect 22 1 23 1; +#X connect 22 2 32 0; +#X connect 23 0 22 0; +#X restore 203 80 pd \$0-queue; +#X text 216 229 <== values used in each partition and every loop -- +easier to store a value than to send it.; +#X text 166 500 <== send a bang to the scheduler if we've just manually +sorted something. A bang will not add a partition to the queue \, but +will increment the index to grab the next partition.; +#X text 284 80 <== the "queue" for scheduling partitions.; +#X connect 0 0 18 0; +#X connect 1 0 23 0; +#X connect 2 0 23 1; +#X connect 6 0 16 0; +#X connect 8 0 9 0; +#X connect 9 0 20 0; +#X connect 9 1 10 0; +#X connect 10 0 12 0; +#X connect 10 1 11 0; +#X connect 11 0 5 0; +#X connect 11 1 4 0; +#X connect 12 0 5 0; +#X connect 15 0 25 0; +#X connect 16 0 3 0; +#X connect 16 1 3 1; +#X connect 17 0 25 0; +#X connect 18 0 19 0; +#X connect 18 1 15 0; +#X connect 18 2 25 1; +#X connect 19 0 22 0; +#X connect 20 0 21 0; +#X connect 20 1 7 0; +#X connect 22 0 1 0; +#X connect 22 1 2 0; +#X connect 23 0 8 0; +#X connect 23 1 8 1; +#X connect 25 0 1 0; +#X connect 25 1 2 0; +#X connect 25 2 19 1; +#X restore 232 235 pd \$0-main-loop; +#X text 51 25 Sort a list of numbers using a quicksort.; +#X obj 205 138 t f f; +#X msg 72 144 1; +#X connect 0 0 12 0; +#X connect 2 0 4 0; +#X connect 3 0 5 0; +#X connect 4 0 6 0; +#X connect 5 0 4 0; +#X connect 5 1 4 1; +#X connect 7 0 1 0; +#X connect 7 1 18 0; +#X connect 7 2 17 0; +#X connect 8 0 1 0; +#X connect 9 0 10 0; +#X connect 10 0 8 0; +#X connect 12 0 7 0; +#X connect 14 0 15 0; +#X connect 17 0 9 0; +#X connect 17 1 14 0; +#X connect 18 0 9 0; diff --git a/list-abs/list-random-help.pd b/list-abs/list-random-help.pd new file mode 100755 index 0000000..d06266f --- /dev/null +++ b/list-abs/list-random-help.pd @@ -0,0 +1,69 @@ +#N canvas 0 31 634 420 10; +#N canvas 435 477 293 176 show 0; +#X obj 77 36 inlet; +#X obj 77 109 outlet; +#X obj 77 60 list prepend set; +#X obj 77 85 list trim; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X restore 105 331 pd show; +#X msg 105 194 bang; +#X msg 150 194 seed 123; +#X floatatom 148 243 5 0 0 2 range - -; +#X floatatom 191 243 5 0 0 2 length - -; +#X text 63 26 [list-random]; +#X obj 105 265 list-random 5; +#X text 101 119 A seed-message is used to seed the random number generator. +; +#X obj 172 140 random; +#X text 103 141 Also see:; +#X text 103 55 generates a list of pseudorandom integers from 0 to +N-1 \, where N is the first creation argument. The second creation +argument specifies the length of the list (minimum and default length +is 1).; +#N canvas 435 477 293 176 show 0; +#X obj 77 36 inlet; +#X obj 77 109 outlet; +#X obj 77 60 list prepend set; +#X obj 77 85 list trim; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X restore 289 331 pd show; +#X msg 289 351; +#X msg 289 194 bang; +#X msg 334 194 seed 123; +#X floatatom 346 243 5 0 0 2 range - -; +#X floatatom 403 243 5 0 0 2 length - -; +#X obj 289 265 list-random 10 20; +#X msg 114 307 bang; +#X msg 297 308 bang; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 AUTHOR Frank Barknecht; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION generates a list of pseudorandom integers +from 0 to N-1 \, where N is the first creation argument; +#X text 12 5 KEYWORDS control list_op random; +#X text 12 75 INLET_0 bang seed; +#X text 12 95 INLET_1 float; +#X text 12 115 INLET_2 float; +#X text 12 135 OUTLET_0 list float; +#X restore 567 386 pd META; +#X msg 105 351; +#X connect 0 0 21 0; +#X connect 1 0 6 0; +#X connect 2 0 6 0; +#X connect 3 0 6 1; +#X connect 4 0 6 2; +#X connect 6 0 0 0; +#X connect 11 0 12 0; +#X connect 13 0 17 0; +#X connect 14 0 17 0; +#X connect 15 0 17 1; +#X connect 16 0 17 2; +#X connect 17 0 11 0; +#X connect 18 0 0 0; +#X connect 19 0 11 0; diff --git a/list-abs/list-random.pd b/list-abs/list-random.pd new file mode 100755 index 0000000..d2cb9cf --- /dev/null +++ b/list-abs/list-random.pd @@ -0,0 +1,39 @@ +#N canvas 253 175 513 548 10; +#X obj 73 55 inlet; +#X msg 73 111 seed \$1; +#X obj 161 290 random \$1; +#X obj 161 352 list prepend; +#X obj 254 353 t a; +#X obj 161 256 until; +#X obj 138 109 t b b b; +#X obj 138 373 list; +#X obj 219 53 inlet; +#X obj 292 54 inlet; +#X obj 292 133 f \$2; +#X obj 303 105 loadbang; +#X obj 73 86 route seed; +#X obj 138 406 outlet; +#X text 73 29 seed/bang; +#X text 220 31 range; +#X text 293 30 length; +#X obj 161 235 f 1; +#X obj 292 153 max 1; +#X connect 0 0 12 0; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 0 7 1; +#X connect 4 0 3 1; +#X connect 5 0 2 0; +#X connect 6 0 7 0; +#X connect 6 1 17 0; +#X connect 6 2 3 1; +#X connect 7 0 13 0; +#X connect 8 0 2 1; +#X connect 9 0 10 0; +#X connect 10 0 18 0; +#X connect 11 0 10 0; +#X connect 12 0 1 0; +#X connect 12 1 6 0; +#X connect 17 0 5 0; +#X connect 18 0 17 1; diff --git a/list-abs/list-rdrip-help.pd b/list-abs/list-rdrip-help.pd new file mode 100755 index 0000000..88fb832 --- /dev/null +++ b/list-abs/list-rdrip-help.pd @@ -0,0 +1,22 @@ +#N canvas 0 31 565 316 10; +#X msg 100 79 1 2 3 a b c; +#X obj 100 137 print; +#X obj 181 133 bng 15 250 50 0 empty empty end 0 -6 0 8 -262144 -1 +-1; +#X text 70 18 list-rdrip: drips or serializes a list in reverse.; +#X obj 100 106 list-rdrip; +#X text 141 44 Last element will be first to output.; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 65 INLET_0 anything; +#X text 12 45 DESCRIPTION drips or serializes a list in reverse; +#X text 12 105 OUTLET_1 bang; +#X text 12 85 OUTLET_0 float symbol pointer; +#X text 12 5 KEYWORDS control list_op conversion; +#X text 12 125 AUTHOR Frank Barknecht \, Mathieu Bouchard; +#X restore 455 266 pd META; +#X connect 0 0 4 0; +#X connect 4 0 1 0; +#X connect 4 1 2 0; diff --git a/list-abs/list-rdrip.pd b/list-abs/list-rdrip.pd new file mode 100755 index 0000000..94ddfb3 --- /dev/null +++ b/list-abs/list-rdrip.pd @@ -0,0 +1,39 @@ +#N canvas 218 94 842 634 10; +#X obj 123 97 t a a; +#X obj 123 254 spigot; +#X obj 162 162 bang; +#X obj 162 181 1; +#X obj 283 162 route bang; +#X obj 243 163 bang; +#X obj 243 182 0; +#X obj 162 127 list split 2; +#X obj 48 387 list split; +#X obj 115 339 list length; +#X obj 115 364 >> 1; +#X obj 91 32 inlet; +#X obj 350 188 outlet; +#X obj 91 66 t b a; +#X obj 459 150 outlet; +#X text 514 152 signal end of list; +#X obj 123 273 t a a; +#X text 155 29 Copyright 2009 by Mathieu Bouchard/Frank Barknecht; +#X connect 0 0 1 0; +#X connect 0 1 7 0; +#X connect 1 0 16 0; +#X connect 2 0 3 0; +#X connect 3 0 1 1; +#X connect 4 1 12 0; +#X connect 5 0 6 0; +#X connect 6 0 1 1; +#X connect 7 0 2 0; +#X connect 7 2 4 0; +#X connect 7 2 5 0; +#X connect 8 0 0 0; +#X connect 8 1 0 0; +#X connect 9 0 10 0; +#X connect 10 0 8 1; +#X connect 11 0 13 0; +#X connect 13 0 14 0; +#X connect 13 1 0 0; +#X connect 16 0 8 0; +#X connect 16 1 9 0; diff --git a/list-abs/list-reduce-help.pd b/list-abs/list-reduce-help.pd new file mode 100755 index 0000000..f308a8e --- /dev/null +++ b/list-abs/list-reduce-help.pd @@ -0,0 +1,180 @@ +#N canvas 0 31 619 643 10; +#X floatatom 128 286 5 0 0 0 - - -; +#X msg 137 126 bang; +#X obj 179 281 print TWO_ITEMS; +#X obj 107 311 print RESULT; +#X msg 144 150 1; +#X msg 152 196 1 2 3; +#X msg 149 172 1 2; +#X msg 155 219 1 2 3 4; +#X text 182 127 redo last list; +#X text 73 12 [list-reduce]; +#X text 188 151 list with only one item will pass unchanged.; +#X symbolatom 101 416 15 0 0 0 - - -; +#X msg 196 385 \$2-\$1; +#X obj 102 584 list-reduce; +#X msg 102 557 1 2 3 4 5 6 7 8; +#X msg 197 583 \$2 \$1; +#N canvas 209 220 605 355 more-info 0; +#X msg 84 101 bang; +#X obj 126 236 print TWO_ITEMS; +#X obj 54 266 print RESULT; +#X msg 91 125 1; +#X msg 99 171 1 2 3; +#X msg 96 147 1 2; +#X text 36 42 If nothing is connected to the right inlet \, [list-reduce] +will act like the left and right outlets of [list split 2] reversed. +; +#X obj 54 203 list-reduce; +#X msg 342 100 bang; +#X obj 385 244 print TWO_ITEMS; +#X obj 312 265 print RESULT; +#X msg 349 124 1; +#X msg 357 170 1 2 3; +#X msg 354 146 1 2; +#X obj 312 202 list split 2; +#X text 178 202 equal to this:; +#X connect 0 0 7 0; +#X connect 3 0 7 0; +#X connect 4 0 7 0; +#X connect 5 0 7 0; +#X connect 7 0 2 0; +#X connect 7 1 1 0; +#X connect 8 0 14 0; +#X connect 11 0 14 0; +#X connect 12 0 14 0; +#X connect 13 0 14 0; +#X connect 14 0 9 0; +#X connect 14 2 10 0; +#X restore 101 457 pd more-info; +#X obj 102 612 print REVERSE?; +#X obj 101 386 list-reduce; +#X text 93 39 [list-reduce] returns a single value constructed by calling +the user-defined objects connected to the right outlet on the first +two items of the sequence \, then on the result (if it comes in through +the right inlet) and the next item of the original list \, and so on. +; +#X obj 107 248 list-reduce; +#X text 99 487 It's important \, that there will be only one element +coming back in through the right inlet. Lists with more than one item +will be shortened automatically to avoid stack overflows.; +#X text 251 582 <-- two items == bad idea; +#X msg 101 359 a b c d e; +#X obj 329 250 list-reduce; +#X obj 416 250 min; +#N canvas 0 0 450 300 randlist 0; +#X obj 254 138 random 100; +#X obj 254 116 until; +#X msg 366 138 set; +#X msg 232 61 10; +#X msg 254 160 add2 \$1; +#X obj 232 88 t b f b; +#X obj 255 236 outlet; +#X obj 232 38 inlet; +#X connect 0 0 4 0; +#X connect 1 0 0 0; +#X connect 2 0 6 0; +#X connect 3 0 5 0; +#X connect 4 0 6 0; +#X connect 5 0 6 0; +#X connect 5 1 1 0; +#X connect 5 2 2 0; +#X connect 7 0 3 0; +#X restore 329 197 pd randlist; +#X msg 329 223 27 92 42 82 48 52 74 33 52 71; +#X msg 329 177 bang; +#X obj 382 276 list-reduce; +#X floatatom 382 300 5 0 0 3 max - -; +#X obj 469 276 max; +#X floatatom 329 301 5 0 0 3 min - -; +#X obj 196 248 +; +#X obj 328 422 list-reduce; +#X floatatom 328 445 5 0 0 0 - - -; +#X msg 328 392 22 31 47 86; +#N canvas 0 0 701 458 compare-two 0; +#X obj 99 12 inlet; +#X obj 99 318 outlet; +#X obj 164 162 abs; +#X obj 99 161 abs; +#X obj 99 41 unpack f f; +#X obj 99 90 t a a; +#X obj 99 272 f; +#X obj 164 90 t a a; +#X obj 131 272 f; +#X obj 99 247 select 1 0; +#X text 178 276 send number with smaller distance back to reduce; +#X text 215 151 calculate distances; +#X obj 99 192 <; +#X obj 217 91 inlet; +#X obj 164 139 -; +#X obj 99 138 -; +#X connect 0 0 4 0; +#X connect 2 0 12 1; +#X connect 3 0 12 0; +#X connect 4 0 5 0; +#X connect 4 1 7 0; +#X connect 5 0 15 0; +#X connect 5 1 6 1; +#X connect 6 0 1 0; +#X connect 7 0 14 0; +#X connect 7 1 8 1; +#X connect 8 0 1 0; +#X connect 9 0 6 0; +#X connect 9 1 8 0; +#X connect 12 0 9 0; +#X connect 13 0 14 1; +#X connect 13 0 15 1; +#X connect 14 0 2 0; +#X connect 15 0 3 0; +#X restore 414 422 pd compare-two; +#X floatatom 507 403 5 0 0 0 - - -; +#X msg 507 380 45; +#X obj 507 357 loadbang; +#X text 325 355 Find closest element:; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 145 AUTHOR Frank Barknecht; +#X text 12 165 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION; +#X text 12 5 KEYWORDS control list_op; +#X text 12 65 INLET_0 bang float list; +#X text 12 105 OUTLET_0 float; +#X text 12 125 OUTLET_1 list; +#X text 12 85 INLET_1 float; +#X restore 557 611 pd META; +#X connect 1 0 20 0; +#X connect 4 0 20 0; +#X connect 5 0 20 0; +#X connect 6 0 20 0; +#X connect 7 0 20 0; +#X connect 12 0 18 1; +#X connect 13 0 17 0; +#X connect 13 1 15 0; +#X connect 14 0 13 0; +#X connect 15 0 13 1; +#X connect 18 0 11 0; +#X connect 18 1 12 0; +#X connect 20 0 0 0; +#X connect 20 0 3 0; +#X connect 20 1 2 0; +#X connect 20 1 33 0; +#X connect 23 0 18 0; +#X connect 24 0 32 0; +#X connect 24 1 25 0; +#X connect 25 0 24 1; +#X connect 26 0 27 0; +#X connect 27 0 24 0; +#X connect 27 0 29 0; +#X connect 28 0 26 0; +#X connect 29 0 30 0; +#X connect 29 1 31 0; +#X connect 31 0 29 1; +#X connect 33 0 20 1; +#X connect 34 0 35 0; +#X connect 34 1 37 0; +#X connect 36 0 34 0; +#X connect 37 0 34 1; +#X connect 38 0 37 1; +#X connect 39 0 38 0; +#X connect 40 0 39 0; diff --git a/list-abs/list-reduce.pd b/list-abs/list-reduce.pd new file mode 100755 index 0000000..689ccdf --- /dev/null +++ b/list-abs/list-reduce.pd @@ -0,0 +1,33 @@ +#N canvas 238 102 593 526 10; +#X obj 86 33 inlet; +#X obj 275 52 inlet; +#X obj 151 352 outlet; +#X obj 205 353 outlet; +#X obj 86 58 route bang; +#X obj 86 83 b; +#X obj 151 84 t b a; +#X obj 151 124 list; +#X obj 151 233 list split 2; +#X obj 151 155 t a b; +#X obj 275 189 list append; +#X text 53 386 [list-reduce]; +#X text 55 423 [list-reduce] returns a single value constructed by +calling the user-defined objects connected to the right outlet on the +first two items of the sequence \, then on the result (if it comes +in through the right inlet) and the next item \, and so on.; +#X obj 275 124 list split 1; +#X connect 0 0 4 0; +#X connect 1 0 13 0; +#X connect 4 0 5 0; +#X connect 4 1 6 0; +#X connect 5 0 7 0; +#X connect 6 0 7 0; +#X connect 6 1 7 1; +#X connect 7 0 9 0; +#X connect 8 0 3 0; +#X connect 8 1 10 1; +#X connect 8 2 2 0; +#X connect 9 0 8 0; +#X connect 9 1 10 1; +#X connect 10 0 8 0; +#X connect 13 0 10 0; diff --git a/list-abs/list-replace-help.pd b/list-abs/list-replace-help.pd new file mode 100755 index 0000000..755767e --- /dev/null +++ b/list-abs/list-replace-help.pd @@ -0,0 +1,37 @@ +#N canvas 0 31 583 391 10; +#X msg 287 266 0 1 2 3 4 5; +#X obj 194 343 print RESULT; +#X obj 240 244 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1 +-1 0; +#X floatatom 240 265 5 0 0 0 - - -; +#X obj 194 298 list-replace 2; +#X text 50 32 list-replace: Replace the list starting at position POS +with a new list \, overwriting the old elements.; +#X text 49 92 POS is zerobased and can be negative \, in which case +it is taken from the end of the orig. list.; +#X text 49 67 Argument: default POS; +#X text 49 129 If POS exceeds the length of the original list in whatever +direction \, is is prepended resp. appended to the orig. list.; +#X msg 194 190 list aa bb; +#X msg 194 216 list aa bb cc dd ee ff gg; +#X msg 194 167 aa; +#N canvas 472 161 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 AUTHOR Frank Barknecht; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 75 INLET_0 anything; +#X text 12 95 INLET_1 float; +#X text 12 115 INLET_2 list; +#X text 12 135 OUTLET_0 list; +#X text 12 45 DESCRIPTION replace the list starting at position POS +with a new list \, overwriting the old elements; +#X restore 523 358 pd META; +#X connect 0 0 4 2; +#X connect 2 0 3 0; +#X connect 3 0 4 1; +#X connect 4 0 1 0; +#X connect 9 0 4 0; +#X connect 10 0 4 0; +#X connect 11 0 4 0; diff --git a/list-abs/list-replace.pd b/list-abs/list-replace.pd new file mode 100755 index 0000000..0c07013 --- /dev/null +++ b/list-abs/list-replace.pd @@ -0,0 +1,62 @@ +#N canvas 281 128 614 631 10; +#X obj 164 224 list; +#X obj 327 98 inlet; +#X obj 250 98 inlet; +#X text 331 72 orig; +#X text 256 74 pos; +#X text 77 70 list to insert; +#X obj 85 94 inlet; +#X obj 164 254 list-splat \$1; +#X obj 272 231 list-len; +#X obj 207 281 list split; +#X obj 85 526 list; +#X obj 85 598 outlet; +#X obj 85 317 list prepend; +#X obj 85 120 t a b a b; +#X obj 85 430 list prepend 0; +#X obj 250 125 t f f; +#X obj 207 524 list prepend; +#X obj 85 469 route 0 1; +#X obj 316 347 f; +#X obj 286 282 t a b; +#X obj 316 377 > 0; +#X obj 122 358 r \$0-init; +#X obj 122 377 0; +#X obj 300 524 r \$0-init; +#X obj 176 317 r \$0-init; +#X obj 118 527 r \$0-init; +#X obj 159 131 s \$0-init; +#X text 47 25 list-replace: Replace the list starting at position POS +with a new list \, overwriting the old elements.; +#X connect 0 0 7 0; +#X connect 1 0 0 1; +#X connect 2 0 15 0; +#X connect 6 0 13 0; +#X connect 7 0 12 1; +#X connect 7 1 9 0; +#X connect 7 2 19 0; +#X connect 8 0 9 1; +#X connect 9 1 10 1; +#X connect 9 1 16 1; +#X connect 10 0 11 0; +#X connect 12 0 14 0; +#X connect 13 0 12 0; +#X connect 13 1 0 0; +#X connect 13 2 8 0; +#X connect 13 3 26 0; +#X connect 14 0 17 0; +#X connect 15 0 7 1; +#X connect 15 1 18 1; +#X connect 16 0 11 0; +#X connect 17 0 10 0; +#X connect 17 1 16 0; +#X connect 18 0 20 0; +#X connect 19 0 16 1; +#X connect 19 0 10 1; +#X connect 19 1 18 0; +#X connect 20 0 14 1; +#X connect 21 0 22 0; +#X connect 22 0 14 1; +#X connect 23 0 16 1; +#X connect 24 0 12 1; +#X connect 25 0 10 1; diff --git a/list-abs/list-rev-help.pd b/list-abs/list-rev-help.pd new file mode 100755 index 0000000..1d234bf --- /dev/null +++ b/list-abs/list-rev-help.pd @@ -0,0 +1,23 @@ +#N canvas 0 31 464 309 10; +#X msg 156 76 1 2 3 4; +#X obj 184 109 print Original; +#X obj 156 199 list-rev; +#X obj 184 164 print Reversed; +#X obj 183 230 print Rev_again; +#X text 127 35 list-rev: reverse a list's order.; +#X obj 156 131 list-rev; +#N canvas 472 161 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 65 INLET_0 anything; +#X text 12 85 OUTLET_0 list; +#X text 12 45 DESCRIPTION reverse a list's order; +#X restore 393 268 pd META; +#X connect 0 0 1 0; +#X connect 0 0 6 0; +#X connect 2 0 4 0; +#X connect 6 0 2 0; +#X connect 6 0 3 0; diff --git a/list-abs/list-rev.pd b/list-abs/list-rev.pd new file mode 100755 index 0000000..d2ea242 --- /dev/null +++ b/list-abs/list-rev.pd @@ -0,0 +1,21 @@ +#N canvas 575 449 566 351 10; +#X obj 92 29 inlet; +#X obj 148 141 t l; +#X obj 92 141 list; +#X obj 152 210 list; +#X obj 152 262 outlet; +#X text 174 95 drip list; +#X text 190 213 intermediate store \, bang'd on list end.; +#X text 178 140 repack in reverse order; +#X obj 92 54 t a b b; +#X obj 92 94 list-drip; +#X connect 0 0 8 0; +#X connect 1 0 2 1; +#X connect 2 0 1 0; +#X connect 2 0 3 1; +#X connect 3 0 4 0; +#X connect 8 0 9 0; +#X connect 8 1 2 1; +#X connect 8 2 3 1; +#X connect 9 0 2 0; +#X connect 9 1 3 0; diff --git a/list-abs/list-rot-help.pd b/list-abs/list-rot-help.pd new file mode 100755 index 0000000..13869f8 --- /dev/null +++ b/list-abs/list-rot-help.pd @@ -0,0 +1,24 @@ +#N canvas 0 31 479 301 10; +#X msg 136 118 0 1 2 3 4 5 6 7; +#X floatatom 201 151 5 0 0 0 ROT# - -; +#X obj 136 230 print; +#X obj 136 183 list-rot 3; +#X text 124 33 list-rot; +#X text 64 61 Rotate a list (move ROT# elements from front to back) +; +#X text 63 81 Negative ROT# will rotate elements from back to front. +; +#N canvas 472 161 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 65 INLET_0 anything; +#X text 12 45 DESCRIPTION rotate the elements of a list; +#X text 12 105 OUTLET_0 list; +#X text 12 85 INLET_1 float; +#X restore 413 268 pd META; +#X connect 0 0 3 0; +#X connect 1 0 3 1; +#X connect 3 0 2 0; diff --git a/list-abs/list-rot.pd b/list-abs/list-rot.pd new file mode 100755 index 0000000..978a9d8 --- /dev/null +++ b/list-abs/list-rot.pd @@ -0,0 +1,28 @@ +#N canvas 336 258 575 357 10; +#X obj 170 253 list prepend; +#X obj 151 44 inlet; +#X obj 256 47 inlet; +#X text 257 25 how often to rotate; +#X obj 151 280 list; +#X text 146 24 list to rotate; +#X obj 151 310 outlet; +#X text 278 232 move right part of list to left.; +#X obj 256 174 mod \$1; +#X obj 256 152 f \$1; +#X obj 170 212 list split \$1; +#X obj 151 70 t b a b b a; +#X obj 293 153 list-len; +#X connect 0 0 4 1; +#X connect 1 0 11 0; +#X connect 2 0 9 0; +#X connect 4 0 6 0; +#X connect 8 0 10 1; +#X connect 9 0 8 0; +#X connect 10 0 0 0; +#X connect 10 1 0 1; +#X connect 11 0 4 0; +#X connect 11 1 10 0; +#X connect 11 2 0 1; +#X connect 11 3 9 0; +#X connect 11 4 12 0; +#X connect 12 0 8 1; diff --git a/list-abs/list-round-help.pd b/list-abs/list-round-help.pd new file mode 100755 index 0000000..55bb1b0 --- /dev/null +++ b/list-abs/list-round-help.pd @@ -0,0 +1,71 @@ +#N canvas 0 31 625 414 10; +#N canvas 448 238 450 300 show 0; +#X obj 41 39 inlet; +#X obj 186 36 inlet; +#X obj 41 124 outlet; +#X msg 186 76 set; +#X obj 41 59 list prepend set; +#X obj 41 83 list trim; +#X connect 0 0 4 0; +#X connect 1 0 3 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 2 0; +#X restore 368 293 pd show; +#X msg 368 318; +#X obj 412 274 bng 15 250 50 1 empty empty clear 0 -6 0 8 -262144 -1 +-1; +#X msg 394 170 1.2 3 4.5 6.7 eight 9; +#X msg 368 144 1.2 3 4.5 6.7 8.9; +#N canvas 448 238 450 300 show 0; +#X obj 41 39 inlet; +#X obj 186 36 inlet; +#X obj 41 124 outlet; +#X msg 186 76 set; +#X obj 41 59 list prepend set; +#X obj 41 83 list trim; +#X connect 0 0 4 0; +#X connect 1 0 3 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 2 0; +#X restore 65 289 pd show; +#X msg 65 314; +#X obj 109 270 bng 15 250 50 1 empty empty clear 0 -6 0 8 -262144 -1 +-1; +#X msg 91 166 1.2 3 4.5 6.7 eight 9; +#X msg 62 136 1.2 3 4.5 6.7 8.9; +#X text 56 34 round all numbers in a list to nearest multiple of first +argument or number in second inlet. Using 0 as argument (or no argumement) +will round to 1 (integer round).; +#X text 44 15 list-round; +#X obj 65 225 list-round; +#X text 62 113 simple integer round; +#X obj 368 229 list-round 3; +#X floatatom 130 200 5 0 0 2 round-to? - -; +#X floatatom 447 205 5 0 0 2 round-to? - -; +#X text 154 224 == [list-round 1]; +#N canvas 472 161 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 135 AUTHOR Frank Barknecht; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 115 OUTLET_0 list; +#X text 12 45 DESCRIPTION round all numbers in a list to nearest multiple +of first argument or number in second inlet; +#X text 12 75 INLET_0 list; +#X text 12 95 INLET_1 float; +#X restore 563 378 pd META; +#X connect 0 0 1 0; +#X connect 2 0 0 1; +#X connect 3 0 14 0; +#X connect 4 0 14 0; +#X connect 5 0 6 0; +#X connect 7 0 5 1; +#X connect 8 0 12 0; +#X connect 9 0 12 0; +#X connect 12 0 5 0; +#X connect 14 0 0 0; +#X connect 15 0 12 1; +#X connect 16 0 14 1; diff --git a/list-abs/list-round.pd b/list-abs/list-round.pd new file mode 100755 index 0000000..64acc41 --- /dev/null +++ b/list-abs/list-round.pd @@ -0,0 +1,37 @@ +#N canvas 402 152 538 563 10; +#X obj 74 453 list; +#X obj 97 409 list prepend; +#X obj 74 104 t b a b; +#X text 172 135 "Drip" (serialize) the list; +#X text 121 450 Final result is built here; +#X obj 74 35 inlet; +#X obj 74 484 outlet; +#X text 255 413 Repack the list; +#X obj 193 410 t a; +#X obj 97 134 list-drip; +#X obj 97 230 route float; +#X text 298 308 round it; +#X obj 281 166 inlet; +#X obj 281 232 f \$1; +#X obj 294 201 loadbang; +#X obj 281 254 select 0; +#X msg 281 274 1; +#X obj 97 306 expr int(0.5 + $f1/$f2)*$f2; +#X connect 0 0 6 0; +#X connect 1 0 0 1; +#X connect 1 0 8 0; +#X connect 2 0 0 0; +#X connect 2 1 9 0; +#X connect 2 2 1 1; +#X connect 5 0 2 0; +#X connect 8 0 1 1; +#X connect 9 0 10 0; +#X connect 10 0 17 0; +#X connect 10 1 1 0; +#X connect 12 0 13 0; +#X connect 13 0 15 0; +#X connect 14 0 13 0; +#X connect 15 0 16 0; +#X connect 15 1 17 1; +#X connect 16 0 17 1; +#X connect 17 0 1 0; diff --git a/list-abs/list-sect-help.pd b/list-abs/list-sect-help.pd new file mode 100755 index 0000000..876c619 --- /dev/null +++ b/list-abs/list-sect-help.pd @@ -0,0 +1,61 @@ +#N canvas 0 31 576 432 10; +#X text 78 26 list-sect; +#N canvas 269 263 450 300 sbow 0; +#X obj 120 85 list prepend set; +#X obj 120 109 list trim; +#X obj 120 63 inlet; +#X obj 120 131 outlet; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 0 0; +#X restore 114 236 pd sbow; +#X obj 114 120 t b b; +#X obj 114 101 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 114 196 list-sect; +#X obj 123 218 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X msg 172 167 5 4 foo 3 2; +#X msg 114 144 1 2 3 4 foo bar 2; +#X obj 114 318 list-unique; +#N canvas 269 263 450 300 sbow 0; +#X obj 120 85 list prepend set; +#X obj 120 109 list trim; +#X obj 120 63 inlet; +#X obj 120 131 outlet; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 0 0; +#X restore 114 361 pd sbow; +#X obj 123 343 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X msg 114 382; +#X text 113 49 outputs the elements that are common to both input lists. +Left inlet determines order and number of items in result. Duplicates +are kept!; +#X text 127 292 To remove duplicates use [list-unique]; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 135 AUTHOR Frank Barknecht; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION outputs the elements that are common to both +input lists; +#X text 12 5 KEYWORDS control list_op; +#X text 12 75 INLET_0 anything; +#X text 12 95 INLET_1 anything; +#X text 12 115 OUTLET_0 list float bang symbol pointer; +#X restore 514 400 pd META; +#X msg 114 261; +#X connect 1 0 15 0; +#X connect 2 0 7 0; +#X connect 2 1 6 0; +#X connect 3 0 2 0; +#X connect 4 0 1 0; +#X connect 5 0 1 0; +#X connect 6 0 4 1; +#X connect 7 0 4 0; +#X connect 8 0 9 0; +#X connect 9 0 11 0; +#X connect 10 0 9 0; +#X connect 15 0 8 0; diff --git a/list-abs/list-sect.pd b/list-abs/list-sect.pd new file mode 100755 index 0000000..bbccd7a --- /dev/null +++ b/list-abs/list-sect.pd @@ -0,0 +1,34 @@ +#N canvas 384 285 600 467 10; +#X obj 126 173 list-find; +#X obj 184 194 > 0; +#X obj 184 215 select 1; +#X obj 126 117 list-drip; +#X obj 126 142 t a a; +#X obj 204 58 inlet; +#X obj 184 242 list; +#X obj 107 58 inlet; +#X obj 183 265 list prepend; +#X obj 278 265 t a; +#X obj 107 327 list; +#X obj 107 83 t b a b b; +#X obj 107 353 outlet; +#X text 97 18 list-sect; +#X text 134 34 outputs the elements that are common to both input lists: +; +#X connect 0 1 1 0; +#X connect 1 0 2 0; +#X connect 2 0 6 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 4 1 6 1; +#X connect 5 0 0 1; +#X connect 6 0 8 0; +#X connect 7 0 11 0; +#X connect 8 0 9 0; +#X connect 8 0 10 1; +#X connect 9 0 8 1; +#X connect 10 0 12 0; +#X connect 11 0 10 0; +#X connect 11 1 3 0; +#X connect 11 2 10 1; +#X connect 11 3 8 1; diff --git a/list-abs/list-seek-help.pd b/list-abs/list-seek-help.pd new file mode 100755 index 0000000..ca6389b --- /dev/null +++ b/list-abs/list-seek-help.pd @@ -0,0 +1,128 @@ +#N canvas 0 31 666 505 10; +#X msg 139 267 list one two three four; +#X obj 139 365 bng 15 250 50 0 empty empty empty 0 -6 0 10 -262144 +-1 -1; +#X text 160 366 bang when done or index out of range; +#X floatatom 98 151 5 0 0 0 - - -; +#X msg 81 104 bang; +#N canvas 0 0 450 300 show 0; +#X obj 47 38 inlet; +#X obj 47 115 outlet; +#X obj 47 62 list prepend set; +#X obj 47 85 list trim; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X restore 81 403 pd show; +#X msg 89 381 bang; +#X msg 165 312 0 1 2 3 4 5 6 7 8 9; +#X msg 151 290 twenty three 23; +#X text 322 267 Set list to seek (will also do a rewind); +#X text 75 45 walk through a list element by element - similar to [textfile] +and [qlist].; +#X text 142 149 output item by index number (zero-based \, only positive) +; +#X text 63 461 2007 Hans-Christoph Steiner \, Frank Barknecht; +#X msg 129 221 set; +#X msg 121 200 set \$1; +#X floatatom 121 180 5 0 0 0 - - -; +#X text 175 223 just "set" is "set 0" (rewind); +#X text 173 200 set start position without output; +#X obj 81 334 list-seek; +#X text 130 103 output one item and move to the next (takes off \, +where the last float \, set or bang message was); +#X text 63 19 [list-seek]; +#N canvas 324 88 739 396 example 0; +#X msg 203 170 0; +#X obj 145 140 list-seek; +#X obj 63 152 delay; +#X obj 78 184 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 203 196 spigot; +#X obj 240 26 tgl 32 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 145 71 select 1; +#X obj 145 92 t b b; +#X obj 63 333 dac~; +#X obj 64 309 *~ 0; +#X obj 101 309 dbtorms; +#X obj 104 286 hsl 128 15 0 100 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 0 1; +#X text 261 171 Caution: may generate stack overflows when [list-seek] +is uninitialized!; +#X obj 219 141 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X floatatom 93 105 5 0 0 0 - - -; +#N canvas 0 0 397 287 plong~ 0; +#X obj 112 142 vline~; +#X obj 112 221 *~; +#X obj 112 245 outlet~; +#X obj 112 54 inlet; +#X obj 127 200 osc~ 220; +#X obj 113 168 *~; +#X msg 112 113 1 3 \, 0 100 20; +#X obj 112 78 t b a; +#X obj 215 112 mtof; +#X connect 0 0 5 0; +#X connect 0 0 5 1; +#X connect 1 0 2 0; +#X connect 3 0 7 0; +#X connect 4 0 1 1; +#X connect 5 0 1 0; +#X connect 6 0 0 0; +#X connect 7 0 6 0; +#X connect 7 1 8 0; +#X connect 8 0 4 0; +#X restore 63 263 pd plong~; +#X obj 63 130 * 120; +#X msg 63 240 60; +#X msg 203 115 0 2 2 1 2 2 2 1; +#X connect 0 0 4 0; +#X connect 1 0 16 0; +#X connect 1 1 0 0; +#X connect 1 1 13 0; +#X connect 2 0 3 0; +#X connect 2 0 1 0; +#X connect 2 0 17 0; +#X connect 4 0 1 0; +#X connect 5 0 4 1; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 7 0 1 0; +#X connect 7 1 18 0; +#X connect 9 0 8 0; +#X connect 9 0 8 1; +#X connect 10 0 9 1; +#X connect 11 0 10 0; +#X connect 14 0 16 1; +#X connect 15 0 9 0; +#X connect 16 0 2 0; +#X connect 17 0 15 0; +#X connect 18 0 1 1; +#X restore 265 407 pd example; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION walk through a list element by element - +similar to [textfile] and [qlist]; +#X text 12 5 KEYWORDS control list_op storage; +#X text 12 75 INLET_0 bang float set; +#X text 12 95 INLET_1 anything; +#X text 12 115 OUTLET_0 symbol float pointer; +#X text 12 135 OUTLET_1 bang; +#X text 12 155 AUTHOR Frank Barknecht \, Hans-Christoph Steiner; +#X restore 602 471 pd META; +#X msg 81 424; +#X connect 0 0 18 1; +#X connect 3 0 18 0; +#X connect 4 0 18 0; +#X connect 5 0 23 0; +#X connect 6 0 5 0; +#X connect 7 0 18 1; +#X connect 8 0 18 1; +#X connect 13 0 18 0; +#X connect 14 0 18 0; +#X connect 15 0 14 0; +#X connect 18 0 5 0; +#X connect 18 1 1 0; diff --git a/list-abs/list-seek.pd b/list-abs/list-seek.pd new file mode 100755 index 0000000..5da1b93 --- /dev/null +++ b/list-abs/list-seek.pd @@ -0,0 +1,46 @@ +#N canvas 443 126 634 604 10; +#X obj 105 76 inlet; +#X obj 300 74 inlet; +#X obj 135 501 outlet; +#X obj 300 500 outlet; +#X text 349 72 list to manipulate; +#X text 298 523 bang when done or index out of range; +#X text 134 522 output value; +#X obj 135 416 list; +#X obj 300 438 bang; +#X obj 135 317 moses; +#X obj 127 239 + 1; +#X msg 105 191 0; +#X obj 165 294 list-len; +#X obj 135 440 list-idx; +#X obj 135 391 t b a; +#X obj 89 239 f; +#X obj 89 317 moses; +#X obj 300 103 t b a a; +#X obj 105 109 route set; +#X obj 105 139 route bang; +#X text 31 23 bang for next item \, float for index or set for no-output. +; +#X connect 0 0 18 0; +#X connect 1 0 17 0; +#X connect 7 0 13 0; +#X connect 8 0 3 0; +#X connect 9 0 14 0; +#X connect 9 1 8 0; +#X connect 10 0 15 1; +#X connect 11 0 15 1; +#X connect 12 0 9 1; +#X connect 13 0 2 0; +#X connect 14 0 7 0; +#X connect 14 1 13 1; +#X connect 15 0 10 0; +#X connect 15 0 16 0; +#X connect 16 0 8 0; +#X connect 16 1 9 0; +#X connect 17 0 11 0; +#X connect 17 1 12 0; +#X connect 17 2 7 1; +#X connect 18 0 19 0; +#X connect 18 1 15 0; +#X connect 19 0 11 0; +#X connect 19 1 15 1; diff --git a/list-abs/list-shellsort-help.pd b/list-abs/list-shellsort-help.pd new file mode 100755 index 0000000..2e68dde --- /dev/null +++ b/list-abs/list-shellsort-help.pd @@ -0,0 +1,52 @@ +#N canvas 0 31 681 593 10; +#X text 59 525 2008 Matt Barber; +#X obj 188 357 hradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144 +-1 -1 0; +#X msg 232 357 asc; +#X msg 270 357 desc; +#X obj 93 205 list-random 100 10; +#X obj 125 256 prepent set; +#X msg 93 179 bang; +#X obj 93 230 t b a; +#X msg 93 291 72 65 75 88 61 50 93 18 88 80; +#X text 279 324 non-floats are removed with a warning.; +#X msg 135 324 100 2 wrong type 3; +#X obj 93 441 prepent set; +#X text 66 80 Inlets: 1) list to sort; +#X text 66 134 Argument:; +#X text 137 134 +; +#X text 65 40 Sort a list of floats into ascending order using a Shell +sort. Non-numbers are dropped.; +#X obj 355 541 list-sort; +#X text 299 510 Alternative implementation available in:; +#X text 121 98 2) direction: 0 or asc for ascending \, 1 or desc for +descending (default asc); +#X obj 35 11 list-shellsort; +#X obj 93 396 list-shellsort; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION sort a list of floats into ascending order +using a Shell sort. Non-numbers are dropped; +#X text 12 5 KEYWORDS control list_op; +#X text 12 75 INLET_0 list; +#X text 12 95 INLET_1 float asc desc; +#X text 12 135 AUTHOR Matt Barber; +#X text 12 115 OUTLET_0 list; +#X restore 611 564 pd META; +#X msg 93 470; +#X obj 430 541 list-quicksort; +#X connect 1 0 20 1; +#X connect 2 0 20 1; +#X connect 3 0 20 1; +#X connect 4 0 7 0; +#X connect 5 0 8 0; +#X connect 6 0 4 0; +#X connect 7 0 8 0; +#X connect 7 1 5 0; +#X connect 8 0 20 0; +#X connect 10 0 20 0; +#X connect 11 0 22 0; +#X connect 20 0 11 0; diff --git a/list-abs/list-shellsort.pd b/list-abs/list-shellsort.pd new file mode 100755 index 0000000..6e8d5ba --- /dev/null +++ b/list-abs/list-shellsort.pd @@ -0,0 +1,238 @@ +#N canvas 631 361 591 470 10; +#X obj 26 -25 inlet; +#X obj 26 296 outlet; +#N canvas 658 194 260 268 \$0-gap-loop 0; +#X obj 96 66 / 2; +#X obj 96 89 int; +#X obj 34 122 until; +#X obj 34 49 t b f; +#X obj 148 105 sel 0; +#X obj 96 142 t f f; +#X obj 59 159 f; +#X obj 34 26 inlet; +#X obj 59 183 outlet; +#X connect 0 0 1 0; +#X connect 1 0 5 0; +#X connect 2 0 6 0; +#X connect 3 0 2 0; +#X connect 3 1 0 0; +#X connect 4 0 2 1; +#X connect 5 0 6 1; +#X connect 5 1 4 0; +#X connect 6 0 0 0; +#X connect 6 0 8 0; +#X connect 7 0 3 0; +#X restore 95 150 pd \$0-gap-loop; +#X obj 49 65 list-len; +#N canvas 584 66 450 300 \$0-increment-loop 0; +#X obj 40 26 inlet; +#X obj 163 27 inlet; +#X obj 40 83 until; +#X obj 40 53 t b f; +#X obj 99 100 f; +#X obj 130 101 + 1; +#X obj 136 157 moses; +#X obj 214 175 t b; +#X obj 136 193 outlet; +#X connect 0 0 3 0; +#X connect 1 0 6 1; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X connect 3 1 4 1; +#X connect 4 0 5 0; +#X connect 4 0 6 0; +#X connect 5 0 4 1; +#X connect 6 0 8 0; +#X connect 6 1 7 0; +#X connect 7 0 2 1; +#X restore 95 195 pd \$0-increment-loop; +#X obj 95 125 t f f; +#X obj 95 173 t f f; +#N canvas 147 172 708 735 \$0-test-swap-loop 0; +#X obj 102 40 inlet; +#X obj 319 46 inlet; +#X obj 102 63 -; +#X obj 101 444 list-idx; +#X obj 162 444 list-idx; +#X obj 304 124 +; +#X obj 101 494 >; +#X obj 101 518 sel 0 1; +#X obj 332 564 f; +#X obj 365 564 f; +#X obj 297 593 list-swap; +#X obj 297 563 list; +#X obj 427 646 list; +#X obj 102 159 until; +#X obj 164 222 moses 0; +#X obj 164 197 f; +#X obj 197 197 -; +#X obj 102 84 t b f; +#X obj 164 265 t b b; +#X obj 191 287 s \$0-stop-loop; +#X obj 165 126 r \$0-stop-loop; +#X obj 164 307 s \$0-bang-list; +#X obj 101 582 t b b; +#X obj 128 604 s \$0-stop-loop; +#X obj 101 625 s \$0-bang-list; +#X obj 427 576 r \$0-bang-list; +#X obj 427 669 outlet; +#X obj 277 499 t b b; +#X obj 102 180 t b b; +#X obj 102 381 list; +#X obj 102 400 t a a; +#X obj 448 599 r \$0-list-init; +#X obj 318 474 r \$0-list-init; +#X obj 123 331 r \$0-list-init; +#X text 316 25 gap; +#X obj 203 244 s \$0-idx; +#X obj 331 85 r \$0-idx; +#X obj 347 498 r \$0-idx; +#X obj 146 382 r \$0-idx; +#X obj 304 145 s \$0-idx+gap; +#X obj 380 531 r \$0-idx+gap; +#X obj 207 407 r \$0-idx+gap; +#X obj 466 620 r \$0-list-swap; +#X obj 297 621 s \$0-list-swap; +#X obj 137 355 r \$0-list-swap; +#N canvas 468 185 584 529 swap? 0; +#X obj 40 52 inlet; +#X obj 153 52 inlet; +#X obj 361 50 inlet; +#X obj 40 272 spigot 1; +#X obj 256 272 spigot; +#X obj 361 224 unpack 0 0; +#X msg 361 178 1 0; +#X msg 412 196 0 1; +#X obj 463 93 select 0; +#X obj 361 71 select asc desc; +#X obj 40 437 outlet; +#X obj 153 437 outlet; +#X obj 256 300 swap; +#X obj 153 271 spigot 1; +#X obj 317 273 spigot; +#X connect 0 0 3 0; +#X connect 0 0 4 0; +#X connect 1 0 13 0; +#X connect 1 0 14 0; +#X connect 2 0 9 0; +#X connect 3 0 10 0; +#X connect 4 0 12 0; +#X connect 5 0 3 1; +#X connect 5 0 13 1; +#X connect 5 1 4 1; +#X connect 5 1 14 1; +#X connect 6 0 5 0; +#X connect 7 0 5 0; +#X connect 8 0 6 0; +#X connect 8 1 7 0; +#X connect 9 0 6 0; +#X connect 9 1 7 0; +#X connect 9 2 8 0; +#X connect 12 0 10 0; +#X connect 12 1 11 0; +#X connect 13 0 11 0; +#X connect 14 0 12 1; +#X restore 101 471 pd swap?; +#X obj 164 470 r \$0-direction; +#X connect 0 0 2 0; +#X connect 1 0 2 1; +#X connect 1 0 5 1; +#X connect 1 0 16 1; +#X connect 2 0 17 0; +#X connect 3 0 45 0; +#X connect 4 0 45 1; +#X connect 5 0 39 0; +#X connect 6 0 7 0; +#X connect 7 0 22 0; +#X connect 7 1 27 0; +#X connect 7 2 22 0; +#X connect 8 0 10 1; +#X connect 9 0 10 2; +#X connect 10 0 11 1; +#X connect 10 0 43 0; +#X connect 11 0 10 0; +#X connect 12 0 26 0; +#X connect 13 0 28 0; +#X connect 14 0 18 0; +#X connect 14 1 35 0; +#X connect 15 0 16 0; +#X connect 15 0 14 0; +#X connect 16 0 15 1; +#X connect 17 0 13 0; +#X connect 17 1 15 1; +#X connect 18 0 21 0; +#X connect 18 1 19 0; +#X connect 20 0 13 1; +#X connect 22 0 24 0; +#X connect 22 1 23 0; +#X connect 25 0 12 0; +#X connect 27 0 11 0; +#X connect 27 1 9 0; +#X connect 27 1 8 0; +#X connect 28 0 29 0; +#X connect 28 1 15 0; +#X connect 29 0 30 0; +#X connect 30 0 3 0; +#X connect 30 1 4 0; +#X connect 31 0 12 1; +#X connect 32 0 11 1; +#X connect 33 0 29 1; +#X connect 36 0 5 0; +#X connect 37 0 8 1; +#X connect 38 0 3 1; +#X connect 40 0 9 1; +#X connect 41 0 4 1; +#X connect 42 0 12 1; +#X connect 44 0 29 1; +#X connect 45 0 6 0; +#X connect 45 1 6 1; +#X connect 46 0 45 2; +#X restore 95 221 pd \$0-test-swap-loop; +#X obj 26 274 list; +#X obj 49 103 sel 0 1; +#X obj 72 43 s \$0-list-init; +#X obj 99 242 r \$0-list-init; +#X obj 26 22 t b a a; +#X obj 26 -1 list-filter; +#N canvas 0 0 677 293 \$0-checknum 0; +#X obj 131 95 route float; +#X msg 131 116 1; +#X obj 205 149 print; +#X msg 205 119 list-sort: Warning: dropped a non-number from list; +#X obj 131 70 inlet; +#X obj 131 149 outlet; +#X connect 0 0 1 0; +#X connect 0 1 3 0; +#X connect 1 0 5 0; +#X connect 3 0 2 0; +#X connect 4 0 0 0; +#X restore 115 -1 pd \$0-checknum; +#X text 46 343 2008 Matt Barber; +#X obj 452 140 loadbang; +#X obj 387 52 inlet; +#X obj 387 201 list append \$1; +#X obj 387 171 t b a; +#X obj 387 229 s \$0-direction; +#X connect 0 0 13 0; +#X connect 2 0 6 0; +#X connect 3 0 9 0; +#X connect 4 0 7 0; +#X connect 5 0 2 0; +#X connect 5 1 4 1; +#X connect 6 0 4 0; +#X connect 6 1 7 1; +#X connect 7 0 8 1; +#X connect 8 0 1 0; +#X connect 9 2 5 0; +#X connect 11 0 8 1; +#X connect 12 0 8 0; +#X connect 12 1 3 0; +#X connect 12 2 10 0; +#X connect 13 0 12 0; +#X connect 13 1 14 0; +#X connect 14 0 13 1; +#X connect 16 0 18 0; +#X connect 17 0 19 0; +#X connect 18 0 20 0; +#X connect 19 0 18 0; +#X connect 19 1 18 1; diff --git a/list-abs/list-sieve-help.pd b/list-abs/list-sieve-help.pd new file mode 100755 index 0000000..ae0ebdc --- /dev/null +++ b/list-abs/list-sieve-help.pd @@ -0,0 +1,103 @@ +#N canvas 0 31 566 348 10; +#X floatatom 132 121 5 0 10 0 - - -; +#X obj 132 174 list-sieve; +#X obj 199 209 print MISS; +#X obj 132 233 print FOUND; +#X text 61 30 list-sieve; +#X text 73 55 Look up occurence of incoming floats in a list. If found +\, pass them along \, if not \, signal the miss in second outlet.; +#X obj 306 157 tgl 15 0 empty empty try_me! 0 -6 0 8 -262144 -1 -1 +0 1; +#N canvas 500 266 524 502 gameboy-player 0; +#X obj 173 50 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 +; +#X obj 173 105 random 12; +#X obj 173 144 list-sieve; +#X obj 269 61 loadbang; +#X obj 173 176 + 48; +#X obj 260 143 t b; +#N canvas 0 0 597 521 gameboy 0; +#X obj 136 165 mtof; +#X obj 137 291 *~; +#X obj 224 255 vline~; +#X obj 275 130 / 127; +#X obj 136 84 inlet; +#X obj 224 53 inlet; +#X obj 135 326 dac~; +#X obj 224 96 select 0; +#X obj 274 152 t f f; +#X obj 274 180 pack 0 0; +#X obj 225 285 *~; +#X obj 224 312 *~; +#X obj 325 156 * 0.8; +#X obj 136 223 phasor~; +#X obj 137 257 lop~ 18000; +#X msg 224 118 0 80; +#X msg 274 202 \$1 30 \, \$2 100 30; +#X connect 0 0 13 0; +#X connect 1 0 6 0; +#X connect 1 0 6 1; +#X connect 2 0 10 0; +#X connect 2 0 10 1; +#X connect 3 0 8 0; +#X connect 4 0 0 0; +#X connect 5 0 7 0; +#X connect 7 0 15 0; +#X connect 7 1 3 0; +#X connect 8 0 9 0; +#X connect 8 1 12 0; +#X connect 9 0 16 0; +#X connect 10 0 11 0; +#X connect 10 0 11 1; +#X connect 11 0 1 1; +#X connect 12 0 9 1; +#X connect 13 0 14 0; +#X connect 14 0 1 0; +#X connect 15 0 2 0; +#X connect 16 0 2 0; +#X restore 173 274 pd gameboy; +#X obj 75 104 select 1; +#X msg 75 134 \; pd dsp 1; +#X msg 269 84 0 2 4 5 7 9 11; +#X msg 269 105 0 2 3 5 7 9 10; +#X obj 173 27 inlet; +#X obj 173 72 metro 200; +#X obj 173 210 makenote 100 100; +#X text 296 144 careful with stack overflows!!; +#X connect 0 0 7 0; +#X connect 0 0 12 0; +#X connect 1 0 2 0; +#X connect 2 0 4 0; +#X connect 2 1 5 0; +#X connect 3 0 9 0; +#X connect 4 0 13 0; +#X connect 5 0 1 0; +#X connect 7 0 8 0; +#X connect 9 0 2 1; +#X connect 10 0 2 1; +#X connect 11 0 0 0; +#X connect 12 0 1 0; +#X connect 13 0 6 0; +#X connect 13 1 6 1; +#X restore 306 178 pd gameboy-player; +#X obj 199 119 loadbang; +#X msg 199 143 0 2 3 5 7 10; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 165 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION look up occurence of incoming floats in a +list; +#X text 12 65 INLET_0 float; +#X text 12 85 INLET_1 list; +#X text 12 105 OUTLET_0 float; +#X text 12 125 OUTLET_1 float; +#X text 12 145 AUTHOR Frank Barknecht; +#X restore 495 312 pd META; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 1 1 2 0; +#X connect 6 0 7 0; +#X connect 8 0 9 0; +#X connect 9 0 1 1; diff --git a/list-abs/list-sieve.pd b/list-abs/list-sieve.pd new file mode 100755 index 0000000..a50d6dc --- /dev/null +++ b/list-abs/list-sieve.pd @@ -0,0 +1,46 @@ +#N canvas 421 357 511 459 10; +#X obj 100 19 inlet; +#X obj 190 115 list; +#X obj 190 137 list-drip; +#X obj 35 297 select; +#X obj 35 355 f; +#X obj 213 67 inlet; +#X obj 35 239 f; +#X obj 35 379 outlet; +#X obj 100 46 t b a b; +#X obj 248 351 spigot 1; +#X obj 35 326 t b b; +#X obj 248 374 outlet; +#X obj 159 67 s \$0-s; +#X obj 299 326 r \$0-s; +#X obj 81 349 s \$0-s; +#X msg 159 42 1; +#X msg 81 325 0; +#X obj 51 161 route float; +#X obj 190 177 route float; +#X obj 248 324 f; +#X obj 35 211 t b f f f; +#X connect 0 0 8 0; +#X connect 1 0 2 0; +#X connect 2 0 18 0; +#X connect 2 1 19 0; +#X connect 3 0 10 0; +#X connect 4 0 7 0; +#X connect 5 0 1 1; +#X connect 6 0 3 0; +#X connect 8 0 1 0; +#X connect 8 1 17 0; +#X connect 8 2 15 0; +#X connect 9 0 11 0; +#X connect 10 0 4 0; +#X connect 10 1 16 0; +#X connect 13 0 9 1; +#X connect 15 0 12 0; +#X connect 16 0 14 0; +#X connect 17 0 6 1; +#X connect 17 0 19 1; +#X connect 18 0 20 0; +#X connect 19 0 9 0; +#X connect 20 0 6 0; +#X connect 20 1 3 1; +#X connect 20 2 4 1; diff --git a/list-abs/list-sort-help.pd b/list-abs/list-sort-help.pd new file mode 100755 index 0000000..9da4521 --- /dev/null +++ b/list-abs/list-sort-help.pd @@ -0,0 +1,55 @@ +#N canvas 0 31 672 619 10; +#X obj 188 357 hradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144 +-1 -1 0; +#X msg 232 357 asc; +#X msg 270 357 desc; +#X obj 93 205 list-random 100 10; +#X obj 125 256 prepent set; +#X msg 93 179 bang; +#X obj 93 230 t b a; +#X msg 93 291 91 35 78 70 85 46 64 10 93 83; +#X text 279 324 non-floats are removed with a warning.; +#X msg 135 324 100 2 wrong type 3; +#X obj 93 441 prepent set; +#X obj 93 396 list-sort desc; +#X text 66 80 Inlets: 1) list to sort; +#X text 66 134 Argument:; +#X text 121 98 2) direction: 0 or asc for ascending \, 1 or desc for +descending; +#X text 137 134 +; +#X text 65 40 Sort an incoming list of values in ascending or descending +order. Non-numbers are dropped.; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION sort an incoming list of values in ascending +or descending order; +#X text 12 75 INLET_0 list; +#X text 12 95 INLET_1 float asc desc; +#X text 12 115 OUTLET_0 list; +#X text 12 165 HELP_PATCH_AUTHORS Michal Seta (orig. version) \, Frank +Barknecht. "pd meta" information added by Jonathan Wilkes for Pd version +0.42.; +#X text 12 135 AUTHOR Frank Barknecht (DS version) \, Michal Seta (orig. +version); +#X restore 571 544 pd META; +#X msg 93 470; +#X text 311 452 Alternative implementations available in:; +#X obj 435 482 list-shellsort; +#X obj 321 482 list-quicksort; +#X text 75 529 2011 Frank Barknecht; +#X obj 35 11 list-sort; +#X text 298 510 [list-sort] currently is the fastest version.; +#X connect 0 0 11 1; +#X connect 1 0 11 1; +#X connect 2 0 11 1; +#X connect 3 0 6 0; +#X connect 4 0 7 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; +#X connect 6 1 4 0; +#X connect 7 0 11 0; +#X connect 9 0 11 0; +#X connect 10 0 18 0; +#X connect 11 0 10 0; diff --git a/list-abs/list-sort.pd b/list-abs/list-sort.pd new file mode 100755 index 0000000..22719f2 --- /dev/null +++ b/list-abs/list-sort.pd @@ -0,0 +1,133 @@ +#N struct 1009-f float x; +#N canvas 327 79 766 758 10; +#N canvas 0 0 450 300 \$0-f 0; +#X obj 59 51 struct \$0-f float x; +#X restore 453 61 pd \$0-f; +#N canvas 0 0 450 300 \$0-sort 0; +#X scalar 1009-f 161 \;; +#X scalar 1009-f 481 \;; +#X scalar 1009-f 509 \;; +#X scalar 1009-f 645 \;; +#X scalar 1009-f 695 \;; +#X scalar 1009-f 760 \;; +#X scalar 1009-f 770 \;; +#X scalar 1009-f 907 \;; +#X scalar 1009-f 994 \;; +#X scalar 1009-f 1212 \;; +#X restore 453 91 pd \$0-sort; +#X obj 211 238 pointer; +#X msg 211 214 traverse \$1 \, bang; +#X obj 123 263 append \$0-f x; +#X msg 365 180 clear; +#X obj 365 205 s pd-\$0-sort; +#X obj 318 384 s pd-\$0-sort; +#X msg 318 364 sort; +#X obj 103 53 inlet; +#X obj 211 190 symbol pd-\$0-sort; +#X obj 128 443 pointer; +#X obj 176 364 symbol pd-\$0-sort; +#X obj 128 566 list prepend; +#X obj 223 566 t a; +#X obj 128 494 get \$0-f x; +#X obj 103 650 list; +#X msg 128 408 next; +#X obj 103 675 outlet; +#X text 460 673 2011 Frank Barknecht; +#X obj 357 566 t a; +#X obj 655 107 loadbang; +#X obj 593 59 inlet; +#X obj 593 168 list append \$1; +#X obj 593 138 t b a; +#X obj 593 196 s \$0-direction; +#X obj 262 566 list append; +#N canvas 0 0 552 424 direction 0; +#X obj 40 52 inlet; +#X obj 255 49 inlet; +#X obj 40 266 spigot 1; +#X obj 153 266 spigot; +#X obj 255 223 unpack 0 0; +#X msg 255 177 1 0; +#X msg 306 195 0 1; +#X obj 357 92 select 0; +#X obj 255 70 select asc desc; +#X obj 40 317 outlet; +#X obj 153 322 outlet; +#X connect 0 0 2 0; +#X connect 0 0 3 0; +#X connect 1 0 8 0; +#X connect 2 0 9 0; +#X connect 3 0 10 0; +#X connect 4 0 2 1; +#X connect 4 1 3 1; +#X connect 5 0 4 0; +#X connect 6 0 4 0; +#X connect 7 0 5 0; +#X connect 7 1 6 0; +#X connect 8 0 5 0; +#X connect 8 1 6 0; +#X connect 8 2 7 0; +#X restore 128 530 pd direction; +#X obj 209 508 r \$0-direction; +#X obj 123 189 list-rdrip; +#N canvas 0 0 626 259 filter-f 0; +#X obj 171 142 print; +#X obj 171 86 b; +#X obj 97 35 inlet; +#X obj 97 57 route float; +#X msg 171 112 list-sort: Warning: dropped a non-number from list; +#X obj 97 87 outlet; +#X connect 1 0 4 0; +#X connect 2 0 3 0; +#X connect 3 0 5 0; +#X connect 3 1 1 0; +#X connect 4 0 0 0; +#X restore 123 214 pd filter-f; +#X text 306 630 This list-sorting algorithm uses a data structure subpatch +to sort the list.; +#X obj 103 294 list length; +#X obj 103 138 t a a b b; +#X obj 128 365 until; +#X msg 176 388 traverse \$1; +#X obj 103 328 t b f b b b b b b; +#X connect 2 0 4 1; +#X connect 3 0 2 0; +#X connect 5 0 6 0; +#X connect 8 0 7 0; +#X connect 9 0 33 0; +#X connect 10 0 3 0; +#X connect 11 0 15 0; +#X connect 11 1 34 1; +#X connect 12 0 35 0; +#X connect 13 0 14 0; +#X connect 13 0 16 1; +#X connect 14 0 13 1; +#X connect 15 0 27 0; +#X connect 16 0 18 0; +#X connect 17 0 11 0; +#X connect 20 0 26 1; +#X connect 21 0 23 0; +#X connect 22 0 24 0; +#X connect 23 0 25 0; +#X connect 24 0 23 0; +#X connect 24 1 23 1; +#X connect 26 0 20 0; +#X connect 26 0 16 1; +#X connect 27 0 13 0; +#X connect 27 1 26 0; +#X connect 28 0 27 1; +#X connect 29 0 30 0; +#X connect 30 0 4 0; +#X connect 32 0 36 0; +#X connect 33 0 32 0; +#X connect 33 1 29 0; +#X connect 33 2 10 0; +#X connect 33 3 5 0; +#X connect 33 3 16 1; +#X connect 34 0 17 0; +#X connect 35 0 11 0; +#X connect 36 0 16 0; +#X connect 36 1 34 0; +#X connect 36 2 12 0; +#X connect 36 5 13 1; +#X connect 36 6 26 1; +#X connect 36 7 8 0; diff --git a/list-abs/list-splat-help.pd b/list-abs/list-splat-help.pd new file mode 100755 index 0000000..a7a25aa --- /dev/null +++ b/list-abs/list-splat-help.pd @@ -0,0 +1,55 @@ +#N canvas 0 31 583 340 10; +#X floatatom 197 104 5 0 0 0 - - -; +#X msg 118 105 0 1 2 3 4; +#X obj 197 163 print shorter; +#N canvas 130 18 600 416 rot 0; +#X obj 173 193 list prepend; +#X obj 151 44 inlet; +#X obj 252 115 inlet; +#X text 304 115 how often to rotate; +#X obj 151 220 list; +#X text 198 43 list to rotate; +#X obj 151 250 outlet; +#X obj 151 70 t b l b; +#X text 267 194 move right part of list to left.; +#X obj 173 152 list-splat 1; +#X connect 0 0 4 1; +#X connect 1 0 7 0; +#X connect 2 0 9 1; +#X connect 4 0 6 0; +#X connect 7 0 4 0; +#X connect 7 1 9 0; +#X connect 7 2 0 1; +#X connect 9 0 0 0; +#X connect 9 1 0 1; +#X restore 374 156 pd rot; +#X msg 374 126 0 1 2 3 4; +#X floatatom 456 127 5 0 0 0 - - -; +#X obj 374 184 print; +#X obj 118 138 list-splat 2; +#X text 72 37 list-splat: an advanced [list split] which also accepts +negative indices to split of elements from the back of a list.; +#X obj 118 219 print head; +#X obj 157 192 print tail; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 195 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION an advanced [list split] which also accepts +negative indices to split elements from the back of a list; +#X text 12 75 INLET_0 anything; +#X text 12 95 INLET_1 float; +#X text 12 115 OUTLET_0 list float symbol pointer; +#X text 12 135 OUTLET_1 list float symbol pointer; +#X text 12 155 OUTLET_2 list float symbol pointer; +#X text 12 175 AUTHOR Frank Barknecht; +#X restore 521 311 pd META; +#X connect 0 0 7 1; +#X connect 1 0 7 0; +#X connect 3 0 6 0; +#X connect 4 0 3 0; +#X connect 5 0 3 1; +#X connect 7 0 9 0; +#X connect 7 1 10 0; +#X connect 7 2 2 0; diff --git a/list-abs/list-splat.pd b/list-abs/list-splat.pd new file mode 100755 index 0000000..22e3827 --- /dev/null +++ b/list-abs/list-splat.pd @@ -0,0 +1,73 @@ +#N canvas 628 149 479 392 10; +#X obj 84 29 inlet; +#X obj 162 29 inlet; +#X obj 84 226 outlet; +#X obj 171 227 outlet; +#X obj 267 228 outlet; +#N canvas 309 114 692 535 negatives 0; +#X obj 213 50 inlet; +#X obj 289 121 inlet; +#X obj 213 447 outlet; +#X obj 245 407 outlet; +#X obj 278 376 outlet; +#X obj 213 325 list split; +#X obj 243 95 list-len; +#X text 80 20 This will only get called \, if the index is negative. +; +#X obj 213 74 t a a; +#X obj 273 148 +; +#X obj 273 171 moses; +#X obj 243 121 t f f; +#X msg 273 193 1; +#X obj 227 257 +; +#X text 66 258 this is a hack: ==>; +#X connect 0 0 8 0; +#X connect 1 0 9 1; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 5 2 4 0; +#X connect 6 0 11 0; +#X connect 8 0 5 0; +#X connect 8 1 6 0; +#X connect 9 0 10 0; +#X connect 10 0 12 0; +#X connect 10 1 5 1; +#X connect 11 0 13 1; +#X connect 11 1 9 0; +#X connect 12 0 13 0; +#X connect 13 0 5 1; +#X restore 188 169 pd negatives; +#X obj 135 113 < 0; +#N canvas 235 272 450 300 route 0; +#X obj 76 76 inlet; +#X obj 155 74 inlet; +#X obj 76 123 list prepend; +#X obj 76 158 route 0 1; +#X obj 76 231 outlet; +#X obj 105 192 outlet; +#X connect 0 0 2 0; +#X connect 1 0 2 1; +#X connect 2 0 3 0; +#X connect 3 0 4 0; +#X connect 3 1 5 0; +#X restore 84 137 pd route; +#X obj 162 63 f \$1; +#X obj 210 29 loadbang; +#X obj 162 85 t f f f; +#X obj 84 168 list split; +#X connect 0 0 7 0; +#X connect 1 0 8 0; +#X connect 5 0 2 0; +#X connect 5 1 3 0; +#X connect 5 2 4 0; +#X connect 6 0 7 1; +#X connect 7 0 11 0; +#X connect 7 1 5 0; +#X connect 8 0 10 0; +#X connect 9 0 8 0; +#X connect 10 0 6 0; +#X connect 10 1 11 1; +#X connect 10 2 5 1; +#X connect 11 0 2 0; +#X connect 11 1 3 0; +#X connect 11 2 4 0; diff --git a/list-abs/list-stddev-help.pd b/list-abs/list-stddev-help.pd new file mode 100755 index 0000000..fc35a83 --- /dev/null +++ b/list-abs/list-stddev-help.pd @@ -0,0 +1,26 @@ +#N canvas 0 0 565 344 10; +#X obj 110 105 list-random 100 10; +#X msg 215 155 11 17 21 9 43 28 2 50 72 12; +#N canvas 0 0 450 300 show 0; +#X obj 41 39 inlet; +#X obj 186 36 inlet; +#X obj 41 124 outlet; +#X msg 186 76 set; +#X obj 41 59 list prepend set; +#X obj 41 83 list trim; +#X connect 0 0 4 0; +#X connect 1 0 3 0; +#X connect 3 0 2 0; +#X connect 4 0 5 0; +#X connect 5 0 2 0; +#X restore 215 135 pd show; +#X msg 110 84 bang; +#X obj 110 135 list-stddev; +#X floatatom 110 158 5 0 0 3 std_deviation - -; +#X text 66 41 list-stddev - calculate the standard deviation of a float +list; +#X connect 0 0 2 0; +#X connect 0 0 4 0; +#X connect 2 0 1 0; +#X connect 3 0 0 0; +#X connect 4 0 5 0; diff --git a/list-abs/list-stddev.pd b/list-abs/list-stddev.pd new file mode 100755 index 0000000..1182ce2 --- /dev/null +++ b/list-abs/list-stddev.pd @@ -0,0 +1,36 @@ +#N canvas 259 173 646 615 10; +#X obj 168 29 inlet; +#X obj 168 379 sqrt; +#X obj 168 400 outlet; +#X obj 361 160 list length; +#X obj 168 358 /; +#X obj 186 185 -; +#X obj 186 230 t f f; +#X obj 186 252 *; +#X obj 186 159 list-drip; +#X obj 186 279 +; +#X obj 217 280 f; +#X msg 242 256 0; +#X obj 168 318 f; +#X obj 168 57 t b a a a b; +#X obj 283 160 list-mean; +#X connect 0 0 13 0; +#X connect 1 0 2 0; +#X connect 3 0 4 1; +#X connect 4 0 1 0; +#X connect 5 0 6 0; +#X connect 6 0 7 0; +#X connect 6 1 7 1; +#X connect 7 0 9 0; +#X connect 8 0 5 0; +#X connect 9 0 10 0; +#X connect 9 0 12 1; +#X connect 10 0 9 1; +#X connect 11 0 9 1; +#X connect 12 0 4 0; +#X connect 13 0 12 0; +#X connect 13 1 8 0; +#X connect 13 2 14 0; +#X connect 13 3 3 0; +#X connect 13 4 11 0; +#X connect 14 0 5 1; diff --git a/list-abs/list-sub-help.pd b/list-abs/list-sub-help.pd new file mode 100755 index 0000000..49133ef --- /dev/null +++ b/list-abs/list-sub-help.pd @@ -0,0 +1,20 @@ +#N canvas 0 31 450 300 10; +#X obj 145 177 list-sub; +#X msg 145 116 5 5 5 NOPE 5; +#X obj 145 217 print; +#X msg 196 141 1 2 3 0 -1; +#X text 108 67 Substract two lists element by element; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION substract two lists element by element; +#X text 12 65 INLET_0 list; +#X text 12 85 INLET_1 list; +#X text 12 105 OUTLET_0 list; +#X text 12 125 AUTHOR Frank Barknecht; +#X restore 389 266 pd META; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 3 0 0 1; diff --git a/list-abs/list-sub.pd b/list-abs/list-sub.pd new file mode 100755 index 0000000..9cd944f --- /dev/null +++ b/list-abs/list-sub.pd @@ -0,0 +1,8 @@ +#N canvas 256 135 500 518 10; +#X obj 59 31 inlet; +#X obj 138 34 inlet; +#X obj 59 117 outlet; +#X obj 59 85 list-emath -; +#X connect 0 0 3 0; +#X connect 1 0 3 1; +#X connect 3 0 2 0; diff --git a/list-abs/list-swap-help.pd b/list-abs/list-swap-help.pd new file mode 100755 index 0000000..733a304 --- /dev/null +++ b/list-abs/list-swap-help.pd @@ -0,0 +1,30 @@ +#N canvas 0 31 574 354 10; +#X msg 57 84 0 1 2 3 4 5 6 7 8 9 10 11; +#X floatatom 145 148 5 0 0 0 - - -; +#X floatatom 101 146 5 0 0 0 - - -; +#X obj 57 190 list-swap 2 5; +#X text 49 19 [list-swap] - swap two elements of a list at given indices. +Index values can be negative. If an index value is out of range \, +the list is passed with no change.; +#X msg 75 114 list a b c d e f g h i j k; +#X obj 57 216 prepent set; +#X msg 57 241 a c b; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 165 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 65 INLET_0 anything; +#X text 12 145 AUTHOR Frank Barknecht; +#X text 12 45 DESCRIPTION swap two elements of a list at given indices +; +#X text 12 85 INLET_1 float; +#X text 12 105 INLET_2 flaot; +#X text 12 125 OUTLET_0 list; +#X restore 512 322 pd META; +#X connect 0 0 3 0; +#X connect 1 0 3 2; +#X connect 2 0 3 1; +#X connect 3 0 6 0; +#X connect 5 0 3 0; +#X connect 6 0 7 0; diff --git a/list-abs/list-swap.pd b/list-abs/list-swap.pd new file mode 100755 index 0000000..0facb5f --- /dev/null +++ b/list-abs/list-swap.pd @@ -0,0 +1,82 @@ +#N canvas 401 249 706 675 10; +#X obj 32 27 inlet; +#X obj 98 546 outlet; +#X obj 217 48 inlet; +#X obj 355 59 inlet; +#X obj 260 429 list-replace; +#X obj 113 400 list-idx; +#X obj 260 385 list-idx; +#X obj 196 101 f \$1; +#X obj 334 105 f \$2; +#X obj 113 446 list-replace; +#X obj 224 126 s \$0-idx-1; +#X obj 358 165 s \$0-idx-2; +#X obj 275 323 r \$0-idx-1; +#X obj 158 333 r \$0-idx-2; +#N canvas 229 564 450 300 \$0-test-range 0; +#X obj 46 38 inlet; +#X obj 181 48 inlet; +#X obj 307 44 inlet; +#X obj 46 69 list-len; +#X obj 185 119 abs; +#X obj 323 121 abs; +#X obj 185 95 moses 0; +#X obj 323 96 moses 0; +#X obj 224 119 + 1; +#X obj 362 121 + 1; +#X obj 76 118 t f f; +#X obj 231 217 &&; +#X obj 326 171 >=; +#X obj 183 175 >=; +#X obj 235 252 outlet; +#X connect 0 0 3 0; +#X connect 1 0 6 0; +#X connect 2 0 7 0; +#X connect 3 0 10 0; +#X connect 4 0 13 1; +#X connect 5 0 12 1; +#X connect 6 0 4 0; +#X connect 6 1 8 0; +#X connect 7 0 5 0; +#X connect 7 1 9 0; +#X connect 8 0 13 1; +#X connect 9 0 12 1; +#X connect 10 0 13 0; +#X connect 10 1 12 0; +#X connect 11 0 14 0; +#X connect 12 0 11 1; +#X connect 13 0 11 0; +#X restore 150 170 pd \$0-test-range; +#X obj 85 228 == 0; +#X obj 52 253 spigot; +#X obj 159 227 spigot; +#X obj 32 49 t a a b; +#X obj 162 250 t a a a; +#X connect 0 0 18 0; +#X connect 2 0 7 1; +#X connect 3 0 8 1; +#X connect 4 0 9 2; +#X connect 5 0 9 0; +#X connect 6 0 4 0; +#X connect 7 0 14 1; +#X connect 7 0 10 0; +#X connect 8 0 14 2; +#X connect 8 0 11 0; +#X connect 9 0 1 0; +#X connect 12 0 6 1; +#X connect 12 0 9 1; +#X connect 13 0 5 1; +#X connect 13 0 4 1; +#X connect 14 0 15 0; +#X connect 14 0 17 1; +#X connect 15 0 16 1; +#X connect 16 0 1 0; +#X connect 17 0 19 0; +#X connect 18 0 17 0; +#X connect 18 0 16 0; +#X connect 18 1 14 0; +#X connect 18 2 8 0; +#X connect 18 2 7 0; +#X connect 19 0 5 0; +#X connect 19 1 6 0; +#X connect 19 2 4 2; diff --git a/list-abs/list-tabdump-help.pd b/list-abs/list-tabdump-help.pd new file mode 100755 index 0000000..b922ff3 --- /dev/null +++ b/list-abs/list-tabdump-help.pd @@ -0,0 +1,64 @@ +#N canvas 0 31 881 635 10; +#X msg 618 57 0 1 2 3 4 5 6 7 8 9 10; +#X obj 618 34 loadbang; +#X msg 39 126 bang; +#X obj 39 384 print dump; +#X obj 619 142 loadbang; +#X msg 619 165 0 10 20 30 40 50 60 70 80 90 100; +#X obj 619 187 s y-dump; +#X obj 619 213 table y-dump 10; +#X obj 618 104 table x-dump 10; +#X obj 618 79 s x-dump; +#X floatatom 46 188 5 0 0 0 - - -; +#X msg 55 279 list x-dump 3 4; +#X msg 55 223 list x-dump 3; +#X msg 56 307 list y-dump 1 3; +#X obj 89 497 expr size("$s1"); +#X floatatom 104 523 5 0 0 0 - - -; +#X obj 36 465 t a a; +#X obj 36 545 pack s 0; +#X msg 36 443 symbol y-dump; +#X text 213 495 gets size of array; +#X text 21 23 list-tabdump: get a table's content as a list.; +#X text 172 187 float : set to and do a dump; +#X text 33 58 Arguments: ; +#X text 174 223 list : set and +and do a dump.; +#X text 174 291 list : set \, + and position and do a dump.; +#X text 171 124 bang: dump contents of table as specified by
+\, and .
\, and can be set by +arguments or with the following messages.; +#X obj 39 349 list-tabdump x-dump; +#X text 33 91 Inlet methods:; +#X obj 36 603 print dump; +#X obj 36 568 list-tabdump y-dump; +#X text 34 412 Hint: You can use [expr] to get the size of a table +if you want to dump everything:; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 105 AUTHOR Frank Barknecht; +#X text 12 125 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION get a table's content as a list; +#X text 12 65 INLET_0 bang float list; +#X text 12 85 OUTLET_0 list; +#X restore 817 602 pd META; +#X connect 0 0 9 0; +#X connect 1 0 0 0; +#X connect 2 0 26 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 10 0 26 0; +#X connect 11 0 26 0; +#X connect 12 0 26 0; +#X connect 13 0 26 0; +#X connect 14 0 15 0; +#X connect 14 0 17 1; +#X connect 16 0 17 0; +#X connect 16 1 14 0; +#X connect 17 0 29 0; +#X connect 18 0 16 0; +#X connect 26 0 3 0; +#X connect 29 0 28 0; diff --git a/list-abs/list-tabdump.pd b/list-abs/list-tabdump.pd new file mode 100755 index 0000000..00472b1 --- /dev/null +++ b/list-abs/list-tabdump.pd @@ -0,0 +1,83 @@ +#N canvas 288 81 555 678 10; +#X obj 68 19 inlet; +#X obj 68 602 outlet; +#X obj 88 285 f \$2; +#X obj 146 406 until; +#X obj 185 446 + 1; +#X obj 146 497 tabread \$1; +#X obj 215 444 symbol \$1; +#X msg 215 465 set \$1; +#X obj 106 256 unpack 0 0 s; +#X obj 153 49 s \$0-reset; +#X obj 225 496 r \$0-reset; +#X obj 194 406 f \$3; +#X obj 146 446 f; +#X obj 194 359 r \$0-reset; +#X obj 88 326 moses; +#X obj 88 118 list prepend; +#X obj 88 146 route 0 1 2 3; +#X obj 131 180 list append 0; +#X obj 68 51 t b a a b; +#N canvas 0 0 450 300 rot1 0; +#X obj 173 193 list prepend; +#X obj 151 44 inlet; +#X obj 259 115 inlet; +#X text 311 115 how often to rotate; +#X obj 151 220 list; +#X text 198 43 list to rotate; +#X obj 151 250 outlet; +#X text 267 194 move right part of list to left.; +#X obj 151 70 t b a b; +#X obj 174 152 list split 1; +#X connect 0 0 4 1; +#X connect 1 0 8 0; +#X connect 2 0 9 1; +#X connect 4 0 6 0; +#X connect 8 0 4 0; +#X connect 8 1 9 0; +#X connect 8 2 0 1; +#X connect 9 0 0 0; +#X connect 9 1 0 1; +#X restore 131 225 pd rot1; +#X msg 146 517 add2 \$1; +#X msg 225 518 set; +#N canvas 0 0 575 324 msgbox 0; +#X obj 94 113 inlet; +#X msg 166 148; +#X obj 88 193 outlet; +#X text 163 108 hidden msgbox to not clutter the main patch; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X restore 68 568 pd msgbox; +#X obj 168 91 list length; +#X connect 0 0 18 0; +#X connect 2 0 14 0; +#X connect 3 0 12 0; +#X connect 4 0 12 1; +#X connect 5 0 20 0; +#X connect 6 0 7 0; +#X connect 7 0 5 0; +#X connect 8 0 2 0; +#X connect 8 1 11 0; +#X connect 8 2 6 0; +#X connect 10 0 21 0; +#X connect 11 0 12 1; +#X connect 12 0 4 0; +#X connect 12 0 5 0; +#X connect 13 0 11 0; +#X connect 14 1 3 0; +#X connect 15 0 16 0; +#X connect 16 0 2 0; +#X connect 16 1 2 0; +#X connect 16 2 17 0; +#X connect 16 3 19 0; +#X connect 17 0 19 0; +#X connect 18 0 22 0; +#X connect 18 1 15 0; +#X connect 18 2 23 0; +#X connect 18 3 9 0; +#X connect 19 0 8 0; +#X connect 20 0 22 0; +#X connect 21 0 22 0; +#X connect 22 0 1 0; +#X connect 23 0 15 1; diff --git a/list-abs/list-unique-help.pd b/list-abs/list-unique-help.pd new file mode 100755 index 0000000..b13b2cc --- /dev/null +++ b/list-abs/list-unique-help.pd @@ -0,0 +1,47 @@ +#N canvas 0 31 543 489 10; +#X msg 93 366; +#N canvas 0 0 450 300 show 0; +#X obj 41 39 inlet; +#X obj 41 124 outlet; +#X obj 41 59 list prepend set; +#X obj 41 83 list trim; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X restore 93 336 pd show; +#X msg 105 307 bang; +#X text 90 415 2007 Frank Barknecht; +#X text 208 246 number of allowed repetitions (default 1); +#X obj 93 270 list-unique; +#X floatatom 165 246 5 0 0 0 - - -; +#X msg 112 100 1 1 1 1 1 1 1 1; +#X msg 93 78 1 2 3 2 1; +#X text 56 27 [list-unique] - remove duplicates from a list; +#X text 90 57 list to uniquify; +#X obj 120 144 hradio 15 1 0 3 empty empty empty 0 -8 0 10 -262144 +-1 -1 0; +#X obj 150 212 + 1; +#X obj 120 162 t b a; +#X msg 120 183 list H e l l o - W o r l d; +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION remove duplicates from a list; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 float; +#X text 12 105 OUTLET_0 list; +#X text 12 5 KEYWORDS control list_op filter; +#X restore 474 450 pd META; +#X connect 1 0 0 0; +#X connect 2 0 1 0; +#X connect 5 0 1 0; +#X connect 6 0 5 1; +#X connect 7 0 5 0; +#X connect 8 0 5 0; +#X connect 11 0 13 0; +#X connect 12 0 6 0; +#X connect 13 0 14 0; +#X connect 13 1 12 0; +#X connect 14 0 5 0; diff --git a/list-abs/list-unique.pd b/list-abs/list-unique.pd new file mode 100755 index 0000000..42c371d --- /dev/null +++ b/list-abs/list-unique.pd @@ -0,0 +1,41 @@ +#N canvas 197 380 791 465 10; +#X obj 131 240 list-find; +#X obj 309 270 t a; +#X obj 217 269 list prepend; +#X obj 131 187 t a a; +#X obj 217 240 list; +#X obj 131 162 list-drip; +#X obj 109 315 list; +#X obj 109 105 t b a b; +#X text 156 314 result list; +#X text 108 412 2007 Frank Barknecht; +#X obj 217 196 < 1; +#X obj 217 217 select 1; +#X obj 233 76 inlet; +#X obj 109 72 inlet; +#X obj 109 343 outlet; +#X text 235 53 number of allowed repetitions (default 1); +#X text 84 51 list to uniquify; +#X text 355 232 If current item is found less often than the allowed +number of repetitions (default 1) \, then store it in [list-find] and +in result list. Else discard it.; +#X obj 254 240 t b b; +#X connect 0 1 10 0; +#X connect 1 0 2 1; +#X connect 2 0 1 0; +#X connect 2 0 0 1; +#X connect 2 0 6 1; +#X connect 3 0 0 0; +#X connect 3 1 4 1; +#X connect 4 0 2 0; +#X connect 5 0 3 0; +#X connect 6 0 14 0; +#X connect 7 0 6 0; +#X connect 7 1 5 0; +#X connect 7 2 18 0; +#X connect 10 0 11 0; +#X connect 11 0 4 0; +#X connect 12 0 10 1; +#X connect 13 0 7 0; +#X connect 18 0 2 0; +#X connect 18 1 2 1; diff --git a/list-abs/list-unitvec-help.pd b/list-abs/list-unitvec-help.pd new file mode 100755 index 0000000..6bdeaca --- /dev/null +++ b/list-abs/list-unitvec-help.pd @@ -0,0 +1,26 @@ +#N canvas 0 0 450 300 10; +#X obj 141 197 list-unitvec; +#X obj 141 229 print; +#X msg 158 163 1 1 0; +#X msg 153 140 1 0 0; +#X msg 149 108 0 2 2; +#X msg 141 84 0 2 a 0; +#X text 34 28 list-unitvec; +#X text 52 48 make a unit vector out of any list \, ignoring non-float +elements (i.e. normalize a list geometrically); +#N canvas 506 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 115 AUTHOR Frank Barknecht; +#X text 12 135 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 95 OUTLET_0 list; +#X text 12 45 DESCRIPTION make a unit vector out of any list \, ignoring +non-float elements (i.e. normalize a list geometrically); +#X text 12 75 INLET_0 list; +#X restore 385 265 pd META; +#X connect 0 0 1 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 0 0; diff --git a/list-abs/list-unitvec.pd b/list-abs/list-unitvec.pd new file mode 100755 index 0000000..f822cd4 --- /dev/null +++ b/list-abs/list-unitvec.pd @@ -0,0 +1,19 @@ +#N canvas 344 49 431 402 10; +#X obj 221 167 s \$0-reset; +#X obj 213 296 expr 1/sqrt($f1); +#X obj 141 366 outlet; +#X obj 141 145 inlet; +#X obj 141 334 list-math *; +#X obj 213 261 list-dotprod; +#X obj 141 168 t a a a b; +#X text 20 58 list-unitvec; +#X text 38 78 make a unit vector out of any list \, ignoring non-float +elements (i.e. normalize a list geometrically); +#X connect 1 0 4 1; +#X connect 3 0 6 0; +#X connect 4 0 2 0; +#X connect 5 0 1 0; +#X connect 6 0 4 0; +#X connect 6 1 5 0; +#X connect 6 2 5 1; +#X connect 6 3 0 0; diff --git a/list-abs/list-wrandom-help.pd b/list-abs/list-wrandom-help.pd new file mode 100755 index 0000000..5c7ab2a --- /dev/null +++ b/list-abs/list-wrandom-help.pd @@ -0,0 +1,145 @@ +#N canvas 0 31 682 622 10; +#X msg 167 312 bang; +#X floatatom 133 407 5 0 0 0 - - -; +#X obj 125 478 tabread \$0-rand; +#X obj 125 456 t a a; +#X obj 125 311 until; +#X obj 125 503 + 0.001; +#X obj 125 527 tabwrite \$0-rand; +#X msg 251 247 bang; +#X obj 251 273 list-random 10 10; +#X msg 125 285 1000; +#X msg 168 336 seed 12123; +#X floatatom 204 406 5 0 0 1 length - -; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-rand 10 float 0; +#X coords 0 1 9 0 200 140 1; +#X restore 310 409 graph; +#N canvas 0 0 450 300 (subpatch) 0; +#X array \$0-dist 10 float 0; +#X coords 0 1 9 0 200 140 1; +#X restore 310 409 graph; +#X obj 251 336 t a a; +#X msg 317 304 3 8 0 2 3 5 1 4 7 2; +#X msg 259 304 1 0 0 1; +#N canvas 0 0 450 300 write-to-tables 0; +#X obj 227 103 list-len; +#X obj 308 180 s \$0-rand; +#X obj 115 103 list prepend 0; +#X obj 115 128 s \$0-dist; +#X obj 93 256 s \$0-dist; +#X msg 308 158 resize \$1 \, const 0; +#X msg 93 155 normalize 1; +#X msg 227 159 resize \$1; +#X obj 93 55 t b a a; +#X obj 93 33 inlet; +#X connect 0 0 7 0; +#X connect 0 0 5 0; +#X connect 2 0 3 0; +#X connect 5 0 1 0; +#X connect 6 0 4 0; +#X connect 7 0 4 0; +#X connect 8 0 6 0; +#X connect 8 1 2 0; +#X connect 8 2 0 0; +#X connect 9 0 8 0; +#X restore 281 363 pd write-to-tables; +#X text 79 20 [list-wrandom]; +#X msg 464 304 10 20 70; +#X msg 164 286 100; +#X text 113 44 Use a list as a probability table for weighted random +numbers.; +#X obj 125 379 list-wrandom; +#X text 112 87 Inlets; +#X text 132 142 1: list of random weights. The weigths are used as +probabilities for their positions (zero-based); +#X text 111 179 Outlets:; +#X text 127 199 0: random number; +#X text 127 214 1: size of probability table (for convenience); +#X text 131 109 0: connected to [random] internally. "bang" to make +random choice \, "seed X" to seed; +#N canvas 262 240 530 406 markov-example 0; +#X text 32 19 Simple markov chain; +#X obj 77 208 list-wrandom; +#X obj 170 208 list-wrandom; +#X obj 263 208 list-wrandom; +#X obj 77 172 select 0 1 2; +#X obj 77 150 f; +#X obj 93 127 r \$0-state; +#X obj 77 279 s \$0-state; +#X obj 170 279 s \$0-state; +#X obj 263 277 s \$0-state; +#X obj 163 328 hradio 32 1 0 3 empty \$0-state state 0 -8 1 10 -262144 +-1 -1 0; +#X obj 239 98 loadbang; +#X obj 77 97 bng 24 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X floatatom 91 242 5 0 0 0 - - -; +#X obj 91 259 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X floatatom 185 240 5 0 0 0 - - -; +#X obj 185 257 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X floatatom 277 239 5 0 0 0 - - -; +#X obj 277 256 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 37 74 metro 200; +#X obj 37 55 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X msg 239 125 s0 10 20 70 \, s1 80 10 10 \, s2 50 25 25; +#X obj 239 159 route s0 s1 s2; +#X connect 1 0 7 0; +#X connect 1 0 13 0; +#X connect 2 0 8 0; +#X connect 2 0 15 0; +#X connect 3 0 9 0; +#X connect 3 0 17 0; +#X connect 4 0 1 0; +#X connect 4 1 2 0; +#X connect 4 2 3 0; +#X connect 5 0 4 0; +#X connect 6 0 5 1; +#X connect 11 0 21 0; +#X connect 12 0 5 0; +#X connect 13 0 14 0; +#X connect 15 0 16 0; +#X connect 17 0 18 0; +#X connect 19 0 5 0; +#X connect 20 0 19 0; +#X connect 21 0 22 0; +#X connect 22 0 1 1; +#X connect 22 1 2 1; +#X connect 22 2 3 1; +#X restore 125 563 pd markov-example; +#N canvas 520 99 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 AUTHOR Frank Barknecht; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 45 DESCRIPTION use a list as a probability table for weighted +random numbers; +#X text 12 75 INLET_0 bang seed; +#X text 12 95 INLET_1 list; +#X text 12 115 OUTLET_0 float; +#X text 12 135 OUTLET_1 float; +#X restore 622 568 pd META; +#X connect 0 0 22 0; +#X connect 2 0 5 0; +#X connect 3 0 2 0; +#X connect 3 1 6 1; +#X connect 4 0 22 0; +#X connect 5 0 6 0; +#X connect 7 0 8 0; +#X connect 8 0 14 0; +#X connect 9 0 4 0; +#X connect 10 0 22 0; +#X connect 14 0 22 1; +#X connect 14 1 17 0; +#X connect 15 0 14 0; +#X connect 16 0 14 0; +#X connect 19 0 14 0; +#X connect 20 0 4 0; +#X connect 22 0 1 0; +#X connect 22 0 3 0; +#X connect 22 1 11 0; diff --git a/list-abs/list-wrandom.pd b/list-abs/list-wrandom.pd new file mode 100755 index 0000000..bedea28 --- /dev/null +++ b/list-abs/list-wrandom.pd @@ -0,0 +1,79 @@ +#N canvas 417 418 656 550 10; +#X obj 102 44 inlet; +#X obj 472 418 table \$0-weights; +#X obj 202 229 s \$0-weights; +#X obj 202 176 change -1; +#X msg 202 201 resize \$1; +#X obj 124 226 f; +#X obj 124 251 until; +#X obj 102 373 f; +#X obj 124 316 f 0; +#X obj 150 316 + 1; +#X obj 175 347 tabread \$0-weights; +#X msg 140 290 0; +#X obj 102 166 t b b b a; +#X obj 102 442 outlet; +#X obj 172 201 + 1; +#X obj 175 377 <=; +#X obj 155 407 select 0; +#X obj 202 151 r \$0-len; +#X obj 102 112 random 10000; +#X obj 102 136 * 0.0001; +#X obj 319 44 inlet; +#X msg 451 112 0; +#X obj 319 69 t a b a; +#X obj 319 219 f 0; +#X obj 347 219 + 1; +#X obj 319 306 s \$0-weights; +#X msg 452 219 normalize 1; +#X obj 544 131 s \$0-len; +#X obj 535 158 outlet; +#X obj 535 105 list length; +#X obj 379 219 +; +#X obj 410 219 f; +#X obj 319 251 pack 0 0; +#X obj 319 171 t b a; +#X obj 319 146 list-drip; +#X connect 0 0 18 0; +#X connect 3 0 4 0; +#X connect 3 0 14 0; +#X connect 4 0 2 0; +#X connect 5 0 6 0; +#X connect 6 0 8 0; +#X connect 7 0 13 0; +#X connect 8 0 10 0; +#X connect 8 0 7 1; +#X connect 8 0 9 0; +#X connect 9 0 8 1; +#X connect 10 0 15 0; +#X connect 11 0 8 1; +#X connect 12 0 7 0; +#X connect 12 1 5 0; +#X connect 12 2 11 0; +#X connect 12 3 15 1; +#X connect 14 0 5 1; +#X connect 15 0 16 0; +#X connect 16 0 6 1; +#X connect 17 0 3 0; +#X connect 18 0 19 0; +#X connect 19 0 12 0; +#X connect 20 0 22 0; +#X connect 21 0 23 1; +#X connect 21 0 30 1; +#X connect 22 0 34 0; +#X connect 22 1 21 0; +#X connect 22 2 29 0; +#X connect 23 0 24 0; +#X connect 23 0 32 0; +#X connect 24 0 23 1; +#X connect 26 0 25 0; +#X connect 29 0 27 0; +#X connect 29 0 28 0; +#X connect 30 0 31 0; +#X connect 30 0 32 1; +#X connect 31 0 30 1; +#X connect 32 0 25 0; +#X connect 33 0 23 0; +#X connect 33 1 30 0; +#X connect 34 0 33 0; +#X connect 34 1 26 0; diff --git a/list-abs/prepent-help.pd b/list-abs/prepent-help.pd new file mode 100755 index 0000000..5d3d1a2 --- /dev/null +++ b/list-abs/prepent-help.pd @@ -0,0 +1,56 @@ +#N canvas 0 31 639 361 10; +#X obj 429 170 prepent set; +#X msg 429 225; +#X floatatom 429 92 5 0 0 0 - - -; +#X msg 501 142 set; +#X msg 531 142 add2; +#X msg 439 204 set; +#X floatatom 49 67 5 0 0 0 - - -; +#X obj 49 127 prepent x; +#X obj 233 131 list prepend x; +#X obj 233 240 print prepend_x; +#X obj 49 241 print prepent_x; +#X text 43 15 [prepent] is a shortcut for [list prepend]--[list trim] +; +#X obj 233 267 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 49 267 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X text 231 105 Without trim:; +#X obj 233 167 route x list; +#X obj 272 196 print prepend_list; +#X obj 49 168 route x list; +#X obj 88 198 print prepent_list; +#X obj 272 216 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 88 218 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#N canvas 465 89 494 396 META 0; +#X text 12 5 KEYWORDS control list_op; +#X text 12 25 LICENSE SIBSD; +#X text 12 125 AUTHOR Frank Barknecht; +#X text 12 145 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 65 INLET_0 anything; +#X text 12 105 OUTLET_0 anything; +#X text 12 45 DESCRIPTION a shortcut for [list prepend]--[list trim] +; +#X text 12 85 INLET_1 anything; +#X restore 552 320 pd META; +#X connect 0 0 1 0; +#X connect 2 0 0 0; +#X connect 3 0 0 1; +#X connect 4 0 0 1; +#X connect 5 0 1 0; +#X connect 6 0 7 0; +#X connect 6 0 8 0; +#X connect 7 0 17 0; +#X connect 8 0 15 0; +#X connect 15 0 9 0; +#X connect 15 0 12 0; +#X connect 15 1 16 0; +#X connect 15 1 19 0; +#X connect 17 0 10 0; +#X connect 17 0 13 0; +#X connect 17 1 18 0; +#X connect 17 1 20 0; diff --git a/list-abs/prepent.pd b/list-abs/prepent.pd new file mode 100755 index 0000000..a093d53 --- /dev/null +++ b/list-abs/prepent.pd @@ -0,0 +1,10 @@ +#N canvas 0 0 450 300 10; +#X obj 90 88 inlet; +#X obj 90 205 outlet; +#X obj 90 132 list prepend \$1; +#X obj 90 157 list trim; +#X obj 190 87 inlet; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 3 0 1 0; +#X connect 4 0 2 1; diff --git a/list-abs/sroute-help.pd b/list-abs/sroute-help.pd new file mode 100755 index 0000000..fb59249 --- /dev/null +++ b/list-abs/sroute-help.pd @@ -0,0 +1,43 @@ +#N canvas 0 0 658 332 10; +#X obj 127 156 sroute 1; +#X obj 178 124 hradio 15 1 0 3 empty empty empty 0 -6 0 8 -262144 -1 +-1 0; +#X msg 127 72 1 1 1; +#X msg 78 72 0 0 0; +#X msg 176 72 2 2 2; +#X text 84 29 sroute: settable route; +#X obj 444 126 hradio 15 1 0 3 empty empty bad 0 -6 0 8 -262144 -1 +-1 0; +#X symbolatom 414 96 10 0 0 2 good - -; +#X obj 127 235 print SR1; +#X obj 335 235 print SR2; +#X msg 351 99 b b b; +#X msg 335 72 a a a; +#X text 401 61 type "a" or "b"; +#X obj 335 156 sroute a; +#X obj 178 207 print SR1-miss; +#X obj 386 203 print SR2-miss; +#N canvas 520 226 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 145 AUTHOR Frank Barknecht; +#X text 12 165 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION settable route; +#X text 12 65 INLET_0 anything; +#X text 12 85 INLET_1 float symbol; +#X text 12 105 OUTLET_0 anything; +#X text 12 125 OUTLET_1 anything; +#X restore 595 300 pd META; +#X connect 0 0 8 0; +#X connect 0 1 14 0; +#X connect 1 0 0 1; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 6 0 13 1; +#X connect 7 0 13 1; +#X connect 10 0 13 0; +#X connect 11 0 13 0; +#X connect 13 0 9 0; +#X connect 13 1 15 0; diff --git a/list-abs/sroute.pd b/list-abs/sroute.pd new file mode 100755 index 0000000..edfa63d --- /dev/null +++ b/list-abs/sroute.pd @@ -0,0 +1,18 @@ +#N canvas 0 0 450 300 10; +#X obj 148 99 inlet; +#X obj 90 54 list split 1; +#X obj 90 31 inlet; +#X obj 90 188 outlet; +#X obj 90 124 select \$1; +#X obj 90 154 list; +#X obj 148 188 outlet; +#X obj 148 156 list; +#X connect 0 0 4 1; +#X connect 1 0 4 0; +#X connect 1 1 5 1; +#X connect 1 1 7 1; +#X connect 2 0 1 0; +#X connect 4 0 5 0; +#X connect 4 1 7 0; +#X connect 5 0 3 0; +#X connect 7 0 6 0; diff --git a/list-abs/take-two-help.pd b/list-abs/take-two-help.pd new file mode 100755 index 0000000..0aa6f7e --- /dev/null +++ b/list-abs/take-two-help.pd @@ -0,0 +1,21 @@ +#N canvas 0 31 578 344 10; +#X obj 68 133 take-two; +#X obj 68 176 print; +#X msg 68 77 1 2 3 4; +#X msg 130 76 list a b c d e f g h; +#X text 146 126 take a list as input and print all combinations of +length two without repetition.; +#N canvas 520 226 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 115 AUTHOR Frank Barknecht; +#X text 12 135 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 45 DESCRIPTION take a list as input and print all combinations +of length two without repetition; +#X text 12 75 INLET_0 list; +#X text 12 95 OUTLET_0 list; +#X restore 494 302 pd META; +#X connect 0 0 1 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; diff --git a/list-abs/take-two.pd b/list-abs/take-two.pd new file mode 100755 index 0000000..c5281ff --- /dev/null +++ b/list-abs/take-two.pd @@ -0,0 +1,27 @@ +#N canvas 444 190 497 465 10; +#X obj 206 267 list split 1; +#X obj 206 330 list; +#X obj 206 389 list; +#X obj 206 300 t b a; +#X obj 206 233 list; +#X obj 206 200 until; +#X obj 256 174 b; +#X obj 206 85 inlet; +#X obj 206 415 outlet; +#X obj 206 152 t b a; +#X obj 206 355 list-drip; +#X connect 0 0 3 0; +#X connect 0 1 1 1; +#X connect 0 1 4 1; +#X connect 0 2 6 0; +#X connect 1 0 10 0; +#X connect 2 0 8 0; +#X connect 3 0 1 0; +#X connect 3 1 2 1; +#X connect 4 0 0 0; +#X connect 5 0 4 0; +#X connect 6 0 5 1; +#X connect 7 0 9 0; +#X connect 9 0 5 0; +#X connect 9 1 4 1; +#X connect 10 0 2 0; diff --git a/list-abs/triple-scale-help.pd b/list-abs/triple-scale-help.pd new file mode 100755 index 0000000..6765131 --- /dev/null +++ b/list-abs/triple-scale-help.pd @@ -0,0 +1,41 @@ +#N canvas 0 33 515 437 10; +#X obj 112 74 hsl 128 15 0 1 0 0 empty empty factor_(0-1) -2 -6 0 10 +-262144 -1 -1 0 0; +#X obj 109 187 triple-scale; +#X text 61 29 interpolate linearily between two points (x \, y \, z) +; +#X obj 109 216 unpack 0 0 0; +#X obj 109 264 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 148 264 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X obj 188 264 vsl 15 128 0 10 0 0 empty empty empty 0 -8 0 8 -262144 +-1 -1 0 1; +#X floatatom 109 238 5 0 0 0 - - -; +#X floatatom 148 238 5 0 0 0 - - -; +#X floatatom 188 238 5 0 0 0 - - -; +#X msg 148 132 5 1 9; +#X msg 188 160 8 2 1; +#N canvas 362 181 494 396 META 0; +#X text 12 25 LICENSE SIBSD; +#X text 12 155 AUTHOR Frank Barknecht; +#X text 12 175 HELP_PATCH_AUTHORS Frank Barknecht. "pd meta" information +added by Jonathan Wilkes for Pd version 0.42.; +#X text 12 5 KEYWORDS control list_op; +#X text 12 135 OUTLET_0 list; +#X text 12 45 DESCRIPTION interpolate linearily between two points +(x \, y \, z); +#X text 12 75 INLET_0 float; +#X text 12 95 INLET_1 list; +#X text 12 115 INLET_2 list; +#X restore 458 408 pd META; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 3 0 7 0; +#X connect 3 1 8 0; +#X connect 3 2 9 0; +#X connect 7 0 4 0; +#X connect 8 0 5 0; +#X connect 9 0 6 0; +#X connect 10 0 1 1; +#X connect 11 0 1 2; diff --git a/list-abs/triple-scale.pd b/list-abs/triple-scale.pd new file mode 100755 index 0000000..cfe24ef --- /dev/null +++ b/list-abs/triple-scale.pd @@ -0,0 +1,33 @@ +#N canvas 146 135 849 526 10; +#X obj 224 150 unpack 0 0 0; +#X obj 224 117 inlet; +#X obj 189 312 pack 0 0 0; +#X obj 189 333 outlet; +#X obj 382 150 unpack 0 0 0; +#X obj 382 117 inlet; +#X obj 134 118 inlet; +#X obj 134 146 t f f f; +#X obj 133 207 expr $f1*($f3-$f2) + $f2; +#X obj 221 234 expr $f1*($f3-$f2) + $f2; +#X obj 311 255 expr $f1*($f3-$f2) + $f2; +#X text 178 41 interpolate linearily between to points (x \, y \, z) +; +#X text 455 118 point 2; +#X text 280 117 point 1; +#X text 142 99 0-1; +#X connect 0 0 8 1; +#X connect 0 1 9 1; +#X connect 0 2 10 1; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 4 0 8 2; +#X connect 4 1 9 2; +#X connect 4 2 10 2; +#X connect 5 0 4 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 7 1 9 0; +#X connect 7 2 10 0; +#X connect 8 0 2 0; +#X connect 9 0 2 1; +#X connect 10 0 2 2; diff --git a/masheen.pd b/masheen.pd new file mode 100644 index 0000000..9361b48 --- /dev/null +++ b/masheen.pd @@ -0,0 +1,146 @@ +#N canvas 0 23 1680 1005 12; +#X obj 74 53 bartoa; +#X obj 74 83 deegaj; +#X obj 74 143 johnsz2; +#X obj 74 173 martse; +#X obj 74 203 mucelj; +#X obj 74 263 nik; +#X obj 74 293 novaa; +#X obj 74 323 ortegm3; +#X obj 74 353 persow; +#X obj 74 383 plancs; +#X obj 74 413 quarlm; +#X obj 74 443 rothgj; +#X obj 74 473 schans2; +#X obj 74 503 sheny13; +#X obj 74 533 smithd32; +#X obj 74 563 takakh; +#X obj 74 593 villan2; +#X obj 74 623 zhaox10; +#X obj 74 653 zhuy16; +#X text 24 21 [ARTS 2020] SUMMER 2020 "MASHEEN"; +#X obj 74 683 hamilr4; +#N canvas 585 56 479 747 tempo_sender 0; +#X obj 89 687 s hamilr4_tempo; +#X obj 89 13 inlet; +#X obj 113 657 s houchl_tempo; +#X obj 123 627 s zhuy16_tempo; +#X obj 133 597 s zhaox10_tempo; +#X obj 143 567 s villan2_tempo; +#X obj 153 537 s takakh_tempo; +#X obj 163 507 s smithd32_tempo; +#X obj 173 477 s sheny13_tempo; +#X obj 183 447 s schans2_tempo; +#X obj 193 417 s rothgj_tempo; +#X obj 203 387 s quarlm_tempo; +#X obj 213 357 s plancs_tempo; +#X obj 223 327 s persow_tempo; +#X obj 233 297 s ortegm3_tempo; +#X obj 243 267 s novaa_tempo; +#X obj 253 237 s nik_tempo; +#X obj 263 207 s mucelj_tempo; +#X obj 273 177 s martse_tempo; +#X obj 283 147 s johnsz2_tempo; +#X obj 293 117 s deegaj_tempo; +#X obj 303 87 s bartoa_tempo; +#X connect 1 0 0 0; +#X connect 1 0 2 0; +#X connect 1 0 3 0; +#X connect 1 0 4 0; +#X connect 1 0 5 0; +#X connect 1 0 6 0; +#X connect 1 0 7 0; +#X connect 1 0 8 0; +#X connect 1 0 9 0; +#X connect 1 0 10 0; +#X connect 1 0 11 0; +#X connect 1 0 12 0; +#X connect 1 0 13 0; +#X connect 1 0 14 0; +#X connect 1 0 15 0; +#X connect 1 0 16 0; +#X connect 1 0 17 0; +#X connect 1 0 18 0; +#X connect 1 0 19 0; +#X connect 1 0 20 0; +#X connect 1 0 21 0; +#X restore 358 169 pd tempo_sender; +#X obj 358 110 metro 500; +#X obj 358 140 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 358 85 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 608 82 send hamilr4_control; +#X msg 607 25 1 2 3 4 5; +#X obj 4 721 mixer; +#X obj 74 233 nelsoc5; +#X obj 74 113 houchl; +#X obj 1751 3 master_outs_stereo; +#N canvas 0 23 553 467 masheen_assignment_1 0; +#X text 40 52 1 Create a subpatch saved with the filename as your RCS +id; +#X text 40 92 2 In your patch create two inlets and two outlets; +#X text 95 169 e.g.; +#X text 95 239 e.g.; +#X text 40 132 3 Add a "Receive" object named with your RCS ID_tempo +; +#X obj 149 169 receive hamilr4_tempo; +#X obj 149 239 receive hamilr4_control; +#X text 40 202 4 Add a "Receive" object named with your RCS ID_control +; +#X text 40 282 5 Make your patch _do something_ with a metro beat (coming +in from the _tempo receive) and spit out audio from your left outlet. +DO NOT INCLUDE A [DAC~] OBJECT IN YOUR PATCH \, just pass audio out +the outlet for now.; +#X text 40 362 6 Send Rob your patch on Sunday.; +#X restore 1580 5 pd masheen_assignment_1; +#X obj 1580 24 utilities; +#X obj 418 52 bpmtoms; +#X floatatom 418 23 5 0 0 0 - - -; +#N canvas 0 23 450 300 init 0; +#X obj 41 99 s init; +#X obj 41 59 loadbang; +#X text 27 24 Initialize values; +#X obj 120 111 v global_solo_count; +#X msg 120 88 0; +#X connect 1 0 0 0; +#X connect 1 0 4 0; +#X connect 4 0 3 0; +#X restore 1580 43 pd init; +#N canvas 913 66 450 300 solo 0; +#X floatatom 87 93 5 0 0 0 - - -; +#X obj 87 69 r solo_mode; +#X obj 87 194 +; +#X obj 120 194 i; +#X floatatom 120 218 5 0 0 0 - - -; +#X obj 120 257 v global_solo_count; +#X obj 186 25 r init; +#X msg 186 95 0; +#X obj 239 23 r solo_all; +#X obj 239 47 select 0; +#X obj 186 125 t f f f f; +#X connect 0 0 2 0; +#X connect 1 0 0 0; +#X connect 2 0 3 0; +#X connect 3 0 2 1; +#X connect 3 0 4 0; +#X connect 4 0 5 0; +#X connect 6 0 7 0; +#X connect 7 0 10 0; +#X connect 8 0 9 0; +#X connect 9 0 7 0; +#X connect 10 0 2 0; +#X connect 10 1 5 0; +#X connect 10 2 2 1; +#X connect 10 3 3 1; +#X restore 1636 43 pd solo; +#X obj 1751 645 recorder_controls; +#X msg 1139 18 \; pd dsp 0; +#X msg 1208 18 \; pd dsp 1; +#X text 1283 25 <-- Turn DSP on by clicking here; +#X connect 22 0 23 0; +#X connect 23 0 21 0; +#X connect 24 0 22 0; +#X connect 26 0 25 0; +#X connect 33 0 22 1; +#X connect 34 0 33 0; diff --git a/masheen.zip b/masheen.zip new file mode 100644 index 0000000000000000000000000000000000000000..f501b7a9223d778949f85c718be223fea5734bd8 GIT binary patch literal 128780 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

RO$d5rFUq-+N98G;`LQioE#=f&qhn%u7 zpao2$W+4X#!fh-3B^{&E?+|z)1Q@VTjDB?po9y;>O*~WH(+z6idk&U}e3fA9N;-_Z zfY_**H45jJoGQ~>;S4b@DxgA5@ti{KReTyHe3Co7j+DNYtI&tKx_red zc#>jOAt8ZbOi-|I7P$rzWuNd7&7W|CthJo z$kSS-DcUPnfLn6bDdZqUndUaTL7=coXR;s}w+krz9#Oni8j!vN%T13xs>IcyC>>^6 z;-OE2bLPCTYVMp^1}k6Gd2*)$7xL<%*OjWF$G07N8t(9Kp@q?^BL` z+DoQvt#iX#;ec*?R$70Yz_TmQkx&KQ-Mp#vYn5c#9#h~7 zrI%33M=LBzv#XV~i{RsLD)3J?5CuLQI{d6W;!n=}rxo~@|M;gL#7@c%Fu(;}au14o z`h!x~C%)5M_M}^_O-hOomT3m=oZD;mQqhi$Zbvci&%;7s@NI(RqbFPHqxHu5t4_O? zs1?3{X;ZAl9m3?ssIBV#xjVC6OKNU}G!%?af6I|9S+es|Wb7Qt>0LX_N-`WQI#kJL zknwh~e<(*1K0-vifnEyAx-JMz%_#xmv)=Gw=tSaXMHxJ0H;>xo_~R9_utmim;eAs~ zH?G>jn2oQB4~|llk0FWsiwZ;fEKV8(E@rPFhBPvrC$zb ztOdpnplcnk|Le;Bx6Nu)qbz9l*;0Hz!$bJb2fyhH^I0LeyAcBj(#)y4|(KuW&1Dj5rJ`Sero}#N2*0E2H93H#M<_hc?8vj4-_~x(d2xmy)SgK z)+=!P`a5!h_y#iwp=j}lAzMUPGRG~`ts4c?x1Fe&+0`o){WA!VxBBSd^P_wjWpCC; z36mW*3}0Vo$EXG)ju@peX7P#aF-70qnltY6d(H2m@!rX7^Ku3`peE164^$5!t5Ha; zxMM`3?x7JR9Xj`s$4NFLL52b}q6$V}_X8L6UC`2YXMHtfkNXj^Nu8_b5&%W@b19L6 z720XQX?%Na42#o_6s-H~@?@|y9D0eZ0~603ZA}RO*GB$;xb*#SVE;2igOET#ME^ER zpJt1L?H?$sjQ-KvoyXKO5~f`9OJDs9n;$^el-7+9T4$I5%(HAn=On&*elaHDb3YCF z4Bg#;dSAEYPaZ09QNw|hDZ`jR<5T@cW7}V^l}TWXAv6dH)L?S(5@cN2`d2g5^!t4o zFpt}Nf!YmW-fT=+qDf8QDM(DDDb?ZImF9iHPMW9XsSqUt*lm4mt(XT_=L18|q4FvC z3H#ndjG+lZxhdd+N#_rd2n{#fH&p2s4=oYyA_0D_H&y# zVP4ro5s<4ufDPDq)?I!?dm?-7;<{qP8%h>?B?eAH~WA3{A^Wm*u zsiC12t9?t^#Wvd07@v#q=wSILhEPyD#KR^~6CS*2%j@$oJqk;*>ke1U4Saj`+b{o; z`X!zYO<$7OwhMC@c(wgu1#-M4!4N7X^z3TP;eG>p@#FpvD7H>wE=qiPeFOBm0M2eIwH7#}g( z8y{gVPu?T>Y6qwfP^5<2r(>QDkd95N`w=0=D75xP&WcoX$LaVjOa+6{RH!phs0AT$ zb6E3<*-s_~qeXHe859yRz>N|4!6+g5uWC|Nqtyg5x)(@}%AxY{?2`O4)L`(^s^6VM ze)*H5BR~)a0ex-yF^l*~yn|;9#8zF>V2I#os zjwyOhtXpqgv6j^FSLC~we<+b8s2vN_PnDH{_{sJE4<+(PaH+}IVzVQ5o~cRCMQZZ{ z|0?juOKAK817?TF$qy?8c|k{7x0isOK)w2W@6Al&YI58TskO10E;hBCxjXrCk9hZ8 zM~piE`0|E}x1+d*u{!0~P5C&!y=KtJ6h+!~~uZTak3WSsp-@ z8s%L5JcnyV!bP=3RK|t6%b?&RHWM9LRav~=4ckSqJI#qc~ywiH9ap>ZLT7|A>wIAVY-&c{BS^~%E zS1;ADahR!_{h+o+RBMs}Vz4I^K=b7I##Nx1a}{o;$g1GO8UBn1uCQM?ZJ$#>DYcRg zf6!3boL;2~msOUNczt^^Pw=nU-mJ91_VT^ho+=@9tAiRxs~Kh+ZoBZ10Tz81wf~js zo2mD~h#|siOkEsmwf7OPgXqjKmLVt4jez3YZJ50+V#fxz8--9!IzWpi>BztinXo+6<%OJ^7#dfFg`UL zgTPu1_gUDYl0RK+4JVy6M5bGBqIjj9$6=IKc{2qDf(|&5ie*x7?(?tYEBjI$@%Ky) zhjDm0GpKph7Ce?ER8^a-_j7-1p}2gdceut$#=Y0R8EnzHA|}^=XO(#LYEf1ypFwlP z6%o#(u-HCBm2N*}4ZFJ)%mEVzJKEDROdl;d_|OgBYOf()yxaz7%C@_}&hAoge$u89 z)pio6(NeYj(A-um5Fpg6dMek*S1gnzb2zrs1W&LH9PZU9nms9O`lh6HUsU${Iko#b0 z*EKpIZ2tD}l|6NWDB-=szIShGzZFnFvgWxbB2)fb7YG>S7_cAjjDeNlE=8l@7w zNILRhRvtDT^5S3SeF5fq=(5<=a0J#Ssa^)OlS_nzkM zT!}1%w*{J`(A%Sv`rOJ#NDCx}R6Uh}=cI!ko_J630$2tfk7$kb&FIjrw59ikka8P4CrDKoFW{)1ON5uyqR_pfl7>knrsbWYk6cHqr4r7QeE-<5X8=mB*fa4N_&U%%;UvATL~hhhj4Ld zq#sA}>(E>2jd}B1ev)W##M+^EepOjp5>qBf%6gd=_4-BCi8$%)DN%yZX!(Mndwf_b z^BRZy7?X9+8b=W&8zu*-gM8iN_J)^snhyeInmR(c%Jb1YR^zdP+^t47mRh;qoLsl| z2jXC~qZ`q+?PzN?U`}+IF>OVy!?)Od)Q!67V$b@R76;}U$1L;Xp=E_`9`Zrd3I$l8 z>;+xVZi4CL02j|LD)d2|agnZmDV%*gd)qqf$YZw@?03_qv1xOqH&dkeoBO`_8+g|n z%LZ|dj|lIG*b{4Ag*w!P4e<&^M(`fLn9#0If@&8`QwF@&}O@Fp0`cKXM@AWpo#L3`O$f?B5T7By6q3t(n-YfS* z%Vfg6@0LR_4Kc;op3$r}vl&hjIIp*<3yc&Sk9LpkuPyEN;i5lncjFYJpf{7|3|ZdI z64eJ-C}6F}PjTYA`^WL|hnWP^ZNF+B{?1-$2hKveS$?rl+nt5+9+F&XNSQ3bciKeB ziDaeb1f^H?V)k?F3%Pby=~x)74&pajQ)Scr`o%G5HCJ%Yjs+bfPsJ4wtoBl{Jxp49 zu&knSGJ}hkl4N}A?~ZjhM1_}4DdCBp(OGwMNxhlJ=fU^_{`b*f?4UFp|BS}PXEgBs zb<;L7at8d-v@Qf}VJqEr z1+O37Dxw})oC;Ct3I1T;ijIijJIe4(m}Gl=qP2@I^Sxn-w1|4-Y+xL_PhMqm1Z<$# zuKwc%2?NfLGnda0w0uhZf1_RggyF9-%v-Tn@zdMuxJCPBmm)FO*yJHtDum{rXEK9= zvJR5WX0Y~iWE)!(?X-9F;KpUU%RBR~I4t-#A{ta0=moO+0to4k>@DVnGwjm-Nz#!9 zNxg6mA9_pkMC!a?RS}^p?iJBJr)t@fBh!qFFJ-&-9Cv+#UxX9*58RE41jz_3H|~Dh4B`%}*Y?P?A9A|g6abHCBs1;5eojG? z=mm&%32n;mRrRW&=+UcbU_!oFFHnK)b_*bsb&Tqw|7GmOd43vu^z&{dT8&oN4JItt z1+35Z9(e|2QE#JOJov)>*KP5zAE)=TJR}r~v~8yQ(NwT`%%tDQqF8#*kPswcI#G}- zXtqnx;J|Oe@GUgH;)&-r_*hjN5vQ@`1aY70ko};|TE~3ewL_XH&}Vz2zc)*=C{jt! zDAi$D?yyxP*EJ&3Zt$=E__Rp^$20CrhB7`D%CB?RF#aCBWE$#XfKSvme*XR&Yr)v~ z6T3QNbufMWh(WtsC79xrpYJ0UQMP;69=PG72HJ_RbGMm;;}|yCeO-kj4pGSOTtF7} zi5MW{tJ^PPUfg==A-qOAzl<+;Ah10V z@I-gGMGta2D3pZpPM-rqf#qshs~om-afXFQz=26nAn)Z zh(A}! zS^v5BW|F`s*Z*n9xbhC7nE2%-oDVz`s}79x4D{?3hFUVXB(skGYec5I74s3h}-)%c?kU6Qdp)~N1u|t&XpjPXW#qI5+jdxRx&-rq%|@X3 zIJH3T26kAIy`vd@nkDUh->YyTq=YgfLe0!n70p_S#u~5aG$K}TBh<*ePYW}#@GHb) z13YLn+1k!@2nWsMj6>%xc!@ZEM+t9n%{G4)V|rQMk| z1KYS2LbhWlRquphe0hVkcYyET*R?;xcgnj@(;g1y-_r4)4E$9xO{zM!>ujjrk2Njk z3f3Z4Y9#mRc?dRpL|cl(VLFZdY?x6Z>zX7ADCuPHkL`ul8cDbHp}_tiS)Oi}hr7E) zdei!o<1Cs-?dk}ltyg8}T8}i*`H8HVVhH#(XP}M(k+FD7y~|u}=MXYAe><)L_2MF;I%^&YRz%7Y2qOt9U(gzpL0D;| zwBTEdO08#Yp2(}_A8{of%E7Q{M0?iV&3?}ugG@lw{~%087MFzl@-h7w2l$>KY4X^L z**nd=Digpctq41UnsifpCm&G(oL@YYK@BXIzSS$bM3CdIa9GOViod`n#s<4yREl)I<1OJuLt#G~ z1@kWof1SyBX%NQZ`yNOIWsgfQ9?X!Za0786$(dUrCQPDLnP43}TbW_w@bH1EQJAtI zto&fD0$giUp@aUGEnY1Ac2UDPc@(0ht)cfPq-Z;HzoP)Bnu&S%3Vtg{$ABTi)lr5` zsRB`+if6{SALLkcb&uxTy9)RphG|~-zUkZ2=onSV{-J%Z2ABG9V}1LS^$&K|aGia2 zfkV`VlPE91N8ujsaAPyyp6J5}q-9;i382Jd0sPa>Li5~Q^!j-9A|@daV@lVWfg3nv zvz-pdDc`W#*}M&Ca5h)9jHhtZtR#?KDe?JSXsn!__RnzXfAp!0n4oIf;7F9B@LoJx zg!=TZhA%vrTwSAz`#s2cogL689zN+`1q#geb<6mCxOloYF*FD*GyNDt+zp|T9&n)rlqd4$q zzd0Ex%LHS{PS2ST**MctwaIpKit?l%zV4|eiyUu1@#5^ve!HaCp~m2R5ZUaq%xfGF zKxXs;yXMW)K3W0%y5hnqPC3>e$fp}ZH1IZDp>eG(B}8T?c1J4uydy%;jC%HH3_)}I zT3Qz3S{OR?#S$O{CIloeKi znf5#;54EXr4?b1cJM7<+#xY+0=C@DEKKk^a2>+#&H8T0*&szLZ1Wiff37HItB9FId z?5x=9WeeZgIg<58xU{Ut=@cPwNKB7z=Rwv9dWkZV*sBYCwl0qD$zx1zb-Avj`;2Eq z1#UrTUf*wCV9$5iG1=pSrjcf0R2-Xl10rbr=R}>1o zlqDQY^KOx03|JQh9Wrqyh>E?d6+9k62_-%bGPVhQ3@^4jFCI#2?Us@5W?0e(Ph3bM zhhckLR_Aoe`Z3&cS&g!pK)Z>bBiCjnO@|I1BYdRr)2yTGwXvmg;3o|T$f&l?H zk0PSW%7{p+F{o3B~uja%gCpt;Aac>qx@FwR9x~lF}Chi%FYcHRt zEHGu3D=jrvAMTR^fY-8W2}NX~;}ypa!ubI5C*u`D&BMev zRH0p*tB#8+^Qoz&>R7#qS-f9kQTKnryhuwUvF+xb3#PO=*+k;IiqwMAo@o_Mds&xF z7+BME7BLXFG8G(dVBQ3kC8wVyd*?+GqOYg#q>~jF>EL+sdI1?8*D^$r$JMQ3@ffT~ zH9(AVUn2k-MEqtrw6yunv%`~487~6r2~8w9RY9OEV~XSxV8A~9=5Ed(eK#6avP%B> zVn7@X2#D-IBJZz`wWz-Cupx}-y>DM?0IizKvYtVI7_ZBoesiO zwo4gvG9*&fw|&D`a*17olCWk@9KlP@gX?-@-_pzVOQy0I4R7~}{R67W#57@k;P7NS zb6Rgo?NsmT!2{!t%s@xZH`OCWs(hNNQ(iVvEpk`ZU9!1?ZL&2!2{@J4Lg0qvEr|{1>vXDHui1u8NBGBAz-bzkjfa^>?e1p`e{? zR#WVw=9NX36eRB5ge{)SD3T2UB1Se8A`Z@w$Ezg^?QkCblu?LTzbHV7k!Y3KR|Q4l zaQayfyD9G4yn0LoaRl}<@+B7F!cus+Q*_tgU^ z-9xzU&l{9{J0%2BX>Nl1N*&o;XBV)BbfVDw@;N|?wdfLF&+Z&$ShmT60$0q58&Ix& z>vlKmFTfaf(PB@-631MX^-YqElC_Bz5@ zCBSJYyIv#O8Zluw@AH!52y)w^$y9LhZI0?9(y<$xVKXuz%7EFDC$CQGi(TS{6WiU_ z@b$X-fnX2k{%XB*UfrRAupuhU)tVLMJa3+#irSmo_<#kYuQq6@;ii5k zF|j!#@WM*DJNzv=MVOmH-=Q$0*4AI*rK;hgK6K6+L1LUOqGj}dHk_oakg>GComYqD zTmzi?<%>{%NO$9xFTJr0_A+Vana+>$^BwjR^yvd*dg?X|rn%Ev?ut&;;Vb-9f~E|K z!!Bg_TH&=i8I4lXzp^rA$z(j=vhX96sJ)xcAxb!^;@iei%syj(ceH^-zx0yGq=>>U z-fS>{JN-Uh;G_!q%xj5%JdxM~fv%exB}$tmPPGlWUq{@zjE|g@>XcBoAi=IIYiD(( zEUx_Zt$9RLgJnX@3MyZrG};-c8I>~Dp|QQ3eHJ+@+jLZ5yVY3hQylz zE^BnX(BT*!44!1Fj%17WGws#4^zmLj3ZV!7 zIuqB}(Wk{NxPsf< z%p=^)9W$}{i$7au?YcvABP|qxIdx>#(afzk4nv*3KSE85lwgf=+qm}QSn7wQ3qYCF zz%542BNm{nzQHy3;WsVHVm*IxFy*fe{9xcHmPmzVawY8D0;&Bi(i5f;fOZ-kCJitr z<|09+3f~Jx_g@$;AY-0upDpCPmt3|=3KPe7Yrr__nf0^n3HX{w9>sX5P8VO&CBVi^ z(vUV~tJKIu<-nZIlfi#F+ty1wts4r*1K-SU{lijhv{AzZYo~ZSMvGpa-N0=0%0)_UEKG&8I_t~YwRZR97&yWjx3EQeHcBY9w`q*=vkPo0xudjw$zO1&UaII1Lha*srK1(ORR&p+h&&^YKAP37s${X%gA zNAbWwVfS6}hp66=egMCeo8HRO*5*Pl%M*HYf8EVj$VfN$Fr2LzWRP*vTrN-}Kc?T# z?P}-n9w)T*MR*C#4OHFF4P5)NPjZcS>VKRu;Miw+*HlM`VSMUu2pIo82tsFyt4RZ( zNpV4!^4*TgPHfv%7O)hVsJk`g|vhYa*?RMom_RQ%7pc%e7mJM>Ug~Lp!?W^Uw~h zn+z^Q4SC0VOl{3|kb+L;N;BnqwsU9KASwGg+ohr8uLJsg@J%BhnX}b+sY%8#3u7gk z@QF@vl(3aa9E6p^sDoiD4P6yYvtc4RO4U*IXd(hhyH_~$1=3NZ%VRWw`C3rvB89El zN}T>4UlAZU~zwD8fye|J@I+?NHg6dvJ=`=lbgC!O8lc*)rT6)lSRe%Ex7RGszOJNn#I|k z6ky$Zloud1em!_lFbgFNTYoiKrwbvpg4Y!uzjxsoHH`$Y(|6)<3@uU)*Ujv~6tUoY zqqZqKklb{PT;GJ}e)^ag$Z{sm6j+&qT*ICU?4poNN7mdcRvps?PR-%V8d;Ur-!Xt6 z#(G3LEH~%r0`t7*8h-IrE+>Ks`kZ=GZqw*tM5{UjlVA06;~zD%5s#;HOpLCPNp&lp z)zu6@rY%!Krr9#Ou)qAnouFn`E)V!mgy(#YG6erRssFuy`3LCA;|T?y3q8|nrIyvq zD&jtVR+c^n(~c{!5?M4_1IE3p!`n4*B$xuE7#YnA3GME05W`%*t0Co^LCSF`)cmMm zdiM4Y?_t~eBuc5iV6mJ;*#BqA$$dkH`h`iA{hiVkza9P&ce0AM^sX(y* zTt_JaO7?I5y7yXUYa_J&HmZlbdVJ0GTPxd00LhYrW{mbRX{>7309+Ic7-_hN*{}dE+>~q?kS6^#g@cR{#qY?N ze1Yrw>k8VI0S;X(1Y>OCD6WCU<=A#4Qu0N4BqPLB;pI9S`x&OSk3zpZ_(H=mpYO2xm-m#y?C zIk{q;#%sb+^)5G~_E)UVch4SN2>mM*|Galx5Xlb%^A zlh{W{{F5x)icut`azb17a4Tc8?yDLEmx1MR1>vwv!RW>r?nKl*NyxnM$3K|Qc0>O3 z0-spo`rQ2_{ZCl>izB?1bZplcP`xi}I4t!bBchGO9~l%f%B8?jl@_9YVyR7ieOLEHgxxV1ZPqpR#2C9U;iM_<#zdV=}I zxm=qzR4i@|ZS9uI)Dvn_#ww|asF$5F&xqUv+E|Hn<6?jkktE+Lqhm#p581SiD4ptk zYD2wZeldizPy){ArrFA8c)!A|I7=3fR7|nCobgcdx#v^O?jZkE+`;mvI#_#e>8vBJ#hPO<9@2iA>td;y)9c!Z>H>D z2TmJGZ4qzF{S|=`3x4mKX2{x&vHeb5)cV8JhqZNRSTJ2oyL4~%XM6T}pmb16gxLIG zBOkst?P=Jmy*PGBCK?l9krLT47bCr1!bWz%vPjKlF4v*pS0Gc1%$%4`07+W)Rb^y? z6VzJ3kGBqiu+d2`)M*TXPAoiHA-G}IvWX>Ll6HKX>Bk3dtD~~=aW}RWywB@#qi)@h zwl)@MdOzomNKo?%&o2VXU2e-bu)taSRjH|6QPzzXf5i&uUj7Jm#$uSY(_itMWp5Kp zdmZ*1HdRNP@T#SRwUXRFE$#pK2R7QnTyT;}Ayy~0U3rqKp-q~JXuT{Vp>Nz<(Ex*{>G^*d-B)dZL1SLf! zVcz+5VfpCi<_4^WlO-7`_e_?Jo_Xyy={qiHNdbY6o=QD&!Hh!7%Q3j{G;-`uk)OFW?MDpfzV8I$d69Sz)IXar;J2v^N3TF0XFrU@ll}ck%!&K|WSJp9jx6 zjh>CE*!m8KuXgPUJa;oAjyNXfMJICzf_pYuxX3DFIw{6YHrEi!W=#JMqBdqWolTnG zHEQ`{Nlta?6qPbmRxBO6yRK#Q3r&CHWHFQo-wt z!H!m#fkCSqkHO*a2E_W8_U>b5GEq0uT0V>Qm+T5f9W>0WR7 zQ7tWes~aSLz@vwXc2Ke@wWesg$omFfw9>Ey4T-9xPbnL;(w3Q6;Dj4yK|CaOQiUXY zWFF_QaPGMY;{A{-W6oB(;UKTU6n^et1y#Y-p5p!9ffl6oO;}1eg2drs($LQ z?z6w|&Y}SbJi}1jj}*;t*1$QAvkQ>Um^cm9CZ8a?X*Wwpo+&tw;}0L-Ed< z1p6c#V3e^XDLIB43#>c4)K9UTm;YPhE_DwJ1PKpv#B>gw>!9nK`%1&<;{%;ozG^5K zrPL8poIk1A%mhz3{_;GQC|-?plrG4*yw=0Yb5}K)Y6qK1^1;s-M8$2$_}L?Rf9@b57ECxtl4|8ajn@;syv9+gN(+3Q4a zSHgj4@k;{gi;5FXoY7C;@#`GXo_n}#*AAob&+|%8bx7rM;1Hk;M^)Y5aiv?GFL|S~0gFcq~x*eSCir9^t?j0luh5pZ&eE_Xn+eWply4`RxX-;NBt=E-MC%F5ef>zHf7b-)eb6=K*GX-Up;bc7shv z-|mwNR(##!&i9N&_69>mU3PS^dRkuAR(KJrI5g)ggvdh)Pimvu{!U64Aq*QQjUmvX zUdLK>n7rSvPGt}@67DT*gd+-6HZjPUN(b^LWk(}~Vu%%=+u`H|n`1!HtKKH~x`e8P zu43b3N85L-=Zyz#K=G@LAQxNFPBWY> zas17dinbGcQoV;9y|BkqB~rR)n8n|Jf^!%QS!;3&gd&H?wM6X9g-eZdisL4kBo9X4|ee&hbWj%+aXiC}6*{peDf7RA~wXKiy2Iw-Md%n@3#axXvy+vuf>@>Ju zPclg{S`_z_$uS>udzh*yIb*j(F37dl)j=cL*?qkgEv{#%GU$wTz@IG~zQ;eQGWv{5Xf;?sP zd1-<;`a3az0;>X?mOI0~!jLg}ycQ&~C8UwIG2rdmm?)&-ds@-tY^chZIEnGW@)_oT z$Im1OkNU&CPyEHHzg3znyVB#FuUhQ%;GL=~=nJIHRD2f_$ z7&y?+=>b>^m85B`t=3H*y{x%MMc$~K(LRh|KDHS5mGkW0ad-lRioRW=cgk%GVNGb% z3dntyNmn-B&EbqqYm#mnS1p>r^2YG^l1C=;Y;Ib1Q=6D>R_czzUWv^lIW!@q&az6> z3J=Q)K(qGIlEFv}^AWnt=JAo#wTlZ%9doc=U%KB5OEWJzG;}(rj#Fe*3<3hZ0!$N7 zn0&B^;JLS)5CX#k-_{u7I+8|z91MN@ZSqKkmB<6~4|e)G%>@5Qeg66y|H*ri3R=-? zveEWW^jd1Y~lg7x+7o2#R{ zFchVmhM-`-`;H&=G=MU=oUpqENVJj`y`;r8f}C zr+>T{=Jdy$!ymYMgONwxvmYdeo{nu}bK0g=%_CQBH$_qxJ7g~2>d~PF)2o2-7g8Zp zj&qBYZ0~zJ1whBa0HK^QPpv@O!g_a1CFdhhR7#eH3y-Mcs58#F{5#{h!HHDjK4QUW=Usb-P8TY2aE{v-*DWqJ zn05Kv(P|BZ^D$x#7e`z%7X}9lgn1e70k`T^j(0M)D*s3=QVZJ)p-~sBPlT#=s~smt z01Zd7QB(T{UttoiT}~s$4AuABzAl9L7TrAjEqa$-WjNPPvz&C2K2^$}^dRQMw5fHi zVP{h$VvB&?s^<+Ni6)niR8*o_1snrv4}P(H5`;fD5lSi^s{^-$-Z>0G;Ui1OPW9C+9XJ;0e$Go=9ey&2m`{5KmK1@s3Ckju zNI-tgxZ8U=wuwmYjTTqvdp{R;w97P?3+KZmC{^8w#gaTPeV(XUSOf95H|M(pnlhY^ zT-F>#Ikkoj%T*)|f~|&V%4q!Wgko~S@C|4e2=oP33W^(iqzyidIl(92w!}_+t}tc0 zR-I{Hr_CWpDf>kD8PLVP1u-IuFxasw71h>WvMCdNCn>0A^PRkc#FwskZ6Hr;g6Hq; zm}#FWnM8GJJY#`+O6Vf*qyF5Ki`W*Fbg|mZr!Flwle57NBQL(tuu@j{LuFb-@On;E zc5+DgInBIIUmT1&mNcG6adNWJ)1AP`xl`$-UV#6jNI0bC#)>X60du$jPsUaV9=8yk*{VGhD=v}`!G42qy6i9-po9l)DB#<5OQzIn<8p#e))`yjpJ zB+jies^lV zGRx}$ryhI_4-p|H{B3upk_5it-ca87)s*`=09(>Vf~(i|)6?g{b4y;sBFhBb;tO;O z&Bz&)!Xk^ImP-+FjQHN#p6mgfpYZUfVVSh2fD|AVdY|Y~IdXQ})qJTr_%q*!l*ajd ztPSucMi`kwHm;cZZwaQPmqF=b1-fdhtRu@Ji9{Q~m?L-Iz zp|c5O{&v?4cKS%6zuf`U5t`?uA&*4gJy|DVbITSF*Ux7Y^JW`k2NUwi>!AKFdzkg-$Op^PV;(@Qv)n0|{{hNe9kig!(-1-`Y2|FZs_%OSR|7gsnBi@77z4oPjoi3}_e7d_!(vnovB=PDVD0J$>-46PkFHe@9Ff`N{62fQ6j zY{FKz0K+y78$!hx;i!b@WPRG4Rj`l?)&20Pnf+~X8l(c3 zj+OD56jJBAf?2F_Bup4AJVb_@5&c61>3R>_39t1njsvK{h4L9)OD4N~C#QISv=SUz?{=&N*=##UMA)v?_LJN9 z$&F&*QNo~0!H8h;thy8yfwbBxGM&3`)<3<3sp$A__lB9!XmyJHn>ygLq}o=%546+j zY~u*`N5T55i0QpiB4EuO?o?@RMw}@#zDu{Dq}uh}uggle>=~-dpjnLUql6PB2a5#R zPpO@C+gd0MXuA((*fzISIP%*PIPnE8sNjWy3t*GYBySLZfBKc^>ok$JkqjI?``sUP zOpk{StHo$2UF-G-BRhxpt&~4o@~|ie-$ipbrpJ*G98W1?HolC4e3o;Gms>Q~o+M}8 zLUP^0@PL+tLqMN`l0IsFalVv#-p!LC+hN?MbI_<7r@Hj@!bD0acx~gU$&R4Q8o9vA zqN)D&&|WLOAlM_{Ep~U;BM^^R{D4-S%*u=;$V2y!mt$?+8eO&n z141sg5x4CSHkOW>f(&IvPUR54V^6dk{y`!DriiYN-TAi%L(~Q@%-=+!Kc_xFJl)=Z z2lXDOwJ~07EU(966kXodKi-C?vu$K#ZhE3oK~)~_zP+7%oa{Zk55LB@uSX{@v)p;a zE6F&fG0F6JM!MX~@H)r4tjeU&Dm(eJb(EA7=tkE5fUn~@fr@uio;}R->>EcXcWf-E zcAMvq#^Jhgb)-Id>VG?Uzh7NEU)>LM^NPma`e

4^U7M#LQ69%E}~&EDDsSN(as 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 XR0Z|U~xvMB{m&#Cj|hTUPf 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 Buc-h4 literal 0 HcmV?d00001 diff --git a/master_outs_stereo.pd b/master_outs_stereo.pd new file mode 100644 index 0000000..07bba47 --- /dev/null +++ b/master_outs_stereo.pd @@ -0,0 +1,103 @@ +#N canvas 0 23 755 747 12; +#X obj 11 70 cnv 15 160 640 empty empty empty 20 12 0 14 -233017 -66577 +0; +#X obj 109 105 vu 30 480 masheen_meter_text empty -1 -8 0 10 -66577 +-1 1 0; +#X obj 45 105 vsl 30 480 1 101 1 0 empty empty empty 0 -9 0 10 -262144 +-1 -1 24900 1; +#X floatatom 79 596 5 0 0 0 - - -; +#X obj 461 303 *~; +#X obj 479 266 line~; +#X msg 479 242 \$1 20; +#X floatatom 479 220 5 0 0 0 - - -; +#X obj 401 32 inlet~; +#X obj 516 335 outlet~; +#X floatatom 461 391 5 0 0 0 - - -; +#X obj 461 364 env~ 16384 8192; +#X obj 479 171 - 1; +#X obj 479 196 / 100; +#X floatatom 341 391 5 0 0 0 - - -; +#X obj 341 364 env~ 16384 8192; +#X obj 341 419 - 103; +#X obj 461 419 - 103; +#X obj 77 105 vu 30 480 masheen_meter_text empty -1 -8 0 10 -66577 +-1 0 0; +#X obj 341 32 inlet~; +#X floatatom 39 596 5 0 0 0 - - -; +#X obj 16 82 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1 +; +#X text 35 81 Link; +#X obj 16 26 spigot; +#X obj 15 105 vsl 30 480 1 101 1 0 empty empty empty 0 -9 0 10 -262144 +-1 -1 24900 1; +#X obj 341 303 *~; +#X obj 359 266 line~; +#X msg 359 242 \$1 20; +#X floatatom 359 220 5 0 0 0 - - -; +#X obj 396 335 outlet~; +#X obj 359 171 - 1; +#X obj 359 196 / 100; +#X obj 665 322 dac~ 1 2; +#X obj 575 43 catch~ main_out_left; +#X obj 595 73 catch~ main_out_right; +#X obj 40 669 tgl 20 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 40 647 tgl 20 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 40 625 tgl 20 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 192 645 s solo all; +#X obj 192 667 s mute all; +#X obj 192 689 s rec all; +#X text 62 626 Solo All; +#X text 62 648 Mute All; +#X text 62 670 Record All; +#X obj 279 645 v global_solo_count; +#X msg 279 610 0; +#X text 315 611 Catch any stragglers; +#X obj 279 586 select 0; +#X obj 420 644 s solo_mode; +#X obj 595 322 recorder; +#X connect 2 0 12 0; +#X connect 4 0 9 0; +#X connect 4 0 11 0; +#X connect 4 0 32 1; +#X connect 4 0 49 1; +#X connect 5 0 4 1; +#X connect 6 0 5 0; +#X connect 7 0 6 0; +#X connect 7 0 3 0; +#X connect 8 0 4 0; +#X connect 10 0 17 0; +#X connect 11 0 10 0; +#X connect 12 0 13 0; +#X connect 13 0 7 0; +#X connect 14 0 16 0; +#X connect 15 0 14 0; +#X connect 16 0 18 0; +#X connect 17 0 1 0; +#X connect 19 0 25 0; +#X connect 21 0 23 1; +#X connect 23 0 2 0; +#X connect 24 0 23 0; +#X connect 24 0 30 0; +#X connect 25 0 29 0; +#X connect 25 0 15 0; +#X connect 25 0 32 0; +#X connect 25 0 49 0; +#X connect 26 0 25 1; +#X connect 27 0 26 0; +#X connect 28 0 27 0; +#X connect 28 0 20 0; +#X connect 30 0 31 0; +#X connect 31 0 28 0; +#X connect 33 0 25 0; +#X connect 34 0 4 0; +#X connect 35 0 40 0; +#X connect 36 0 39 0; +#X connect 37 0 38 0; +#X connect 37 0 47 0; +#X connect 45 0 44 0; +#X connect 45 0 48 0; +#X connect 47 0 45 0; +#X coords 0 -1 1 1 163 642 1 9 69; diff --git a/mixer.pd b/mixer.pd new file mode 100644 index 0000000..0b14587 --- /dev/null +++ b/mixer.pd @@ -0,0 +1,434 @@ +#N canvas 0 68 1680 606 12; +#X obj 1 101 cnv 15 1908 392 empty empty empty 20 12 0 14 -233017 -66577 +0; +#X obj 22 100 channel; +#X obj 111 100 channel; +#X obj 22 21 inlet~; +#X obj 111 21 inlet~; +#X obj 200 100 channel; +#X obj 289 100 channel; +#X obj 200 21 inlet~; +#X obj 289 21 inlet~; +#X obj 378 100 channel; +#X obj 467 100 channel; +#X obj 378 21 inlet~; +#X obj 467 21 inlet~; +#X obj 556 100 channel; +#X obj 645 100 channel; +#X obj 556 21 inlet~; +#X obj 645 21 inlet~; +#X obj 734 100 channel; +#X obj 823 100 channel; +#X obj 734 21 inlet~; +#X obj 823 21 inlet~; +#X obj 912 100 channel; +#X obj 1001 100 channel; +#X obj 912 21 inlet~; +#X obj 1001 21 inlet~; +#X obj 1090 100 channel; +#X obj 1179 100 channel; +#X obj 1090 21 inlet~; +#X obj 1179 21 inlet~; +#X obj 1268 100 channel; +#X obj 1357 100 channel; +#X obj 1268 21 inlet~; +#X obj 1357 21 inlet~; +#X obj 1446 100 channel; +#X obj 1533 100 channel; +#X obj 1446 21 inlet~; +#X obj 1533 21 inlet~; +#X obj 1622 100 channel; +#X obj 1711 100 channel; +#X obj 1622 21 inlet~; +#X obj 1711 19 inlet~; +#X obj 1800 100 channel; +#X obj 1800 19 inlet~; +#X text 118 331 deegaj; +#X text 208 331 houchl; +#X text 298 331 johnsz2; +#X text 387 331 martse; +#X text 479 331 mucelj; +#X text 565 331 nelsoc5; +#X text 666 331 nik; +#X text 747 331 novaa; +#X text 831 331 ortegm3; +#X text 925 331 persow; +#X text 1012 331 plancs; +#X text 1100 331 quarlm; +#X text 1190 331 rothgj; +#X text 1278 331 schans2; +#X text 1367 331 sheny13; +#X text 1450 331 smithd32; +#X text 1543 331 takakh; +#X text 1630 331 villan2; +#X text 1720 333 zhaox10; +#X text 1809 333 zhuy16; +#X obj 12 -131 catch~ bartoa_audio_1; +#X obj 32 -109 catch~ deegaj_audio_1; +#X obj 52 -87 catch~ houchl_audio_1; +#X obj 72 -65 catch~ johnsz2_audio_1; +#X obj 92 -43 catch~ martse_audio_1; +#X obj 112 -22 catch~ mucelj_audio_1; +#X obj 542 -131 catch~ nelsoc5_audio_1; +#X obj 562 -109 catch~ nik_audio_1; +#X obj 582 -87 catch~ novaa_audio_1; +#X obj 602 -65 catch~ ortegm3_audio_1; +#X obj 622 -44 catch~ persow_audio_1; +#X obj 642 -22 catch~ plancs_audio_1; +#X obj 1082 -131 catch~ quarlm_audio_1; +#X obj 1102 -109 catch~ rothgj_audio_1; +#X obj 1122 -87 catch~ schans2_audio_1; +#X obj 1142 -65 catch~ sheny13_audio_1; +#X obj 1182 -22 catch~ takakh_audio_1; +#X obj 1642 -87 catch~ zhuy16_audio_1; +#X obj 1622 -109 catch~ zhaox10_audio_1; +#X obj 1602 -131 catch~ villan2_audio_1; +#X text 34 331 bartoa; +#N canvas 0 23 1920 443 submixer................................................. +0; +#X obj 151 52 inlet~; +#X obj 51 52 inlet~; +#X obj 351 52 inlet~; +#X obj 251 52 inlet~; +#X obj 551 52 inlet~; +#X obj 451 52 inlet~; +#X obj 751 52 inlet~; +#X obj 651 52 inlet~; +#X obj 951 52 inlet~; +#X obj 851 52 inlet~; +#X obj 1151 52 inlet~; +#X obj 1051 52 inlet~; +#X obj 1351 52 inlet~; +#X obj 1251 52 inlet~; +#X obj 1551 52 inlet~; +#X obj 1451 52 inlet~; +#X obj 1751 52 inlet~; +#X obj 1651 52 inlet~; +#X obj 1951 52 inlet~; +#X obj 1851 52 inlet~; +#X obj 2051 52 inlet~; +#X obj 97 52 inlet~; +#X obj 197 52 inlet~; +#X obj 297 52 inlet~; +#X obj 397 52 inlet~; +#X obj 497 52 inlet~; +#X obj 597 52 inlet~; +#X obj 697 52 inlet~; +#X obj 797 52 inlet~; +#X obj 897 52 inlet~; +#X obj 997 52 inlet~; +#X obj 1097 52 inlet~; +#X obj 1197 52 inlet~; +#X obj 1297 52 inlet~; +#X obj 1397 52 inlet~; +#X obj 1497 52 inlet~; +#X obj 1597 52 inlet~; +#X obj 1697 52 inlet~; +#X obj 1797 52 inlet~; +#X obj 1897 52 inlet~; +#X obj 1997 52 inlet~; +#X obj 2097 52 inlet~; +#X obj 51 473 throw~ channel_1_L; +#X obj 61 454 throw~ channel_1_R; +#X obj 150 420 throw~ channel_2_L; +#X obj 160 401 throw~ channel_2_R; +#X obj 250 379 throw~ channel_3_L; +#X obj 260 360 throw~ channel_3_R; +#X obj 350 337 throw~ channel_4_L; +#X obj 360 318 throw~ channel_4_R; +#X obj 450 295 throw~ channel_5_L; +#X obj 460 276 throw~ channel_5_R; +#X obj 550 243 throw~ channel_6_L; +#X obj 560 224 throw~ channel_6_R; +#X obj 650 201 throw~ channel_7_L; +#X obj 660 182 throw~ channel_7_R; +#X obj 751 158 throw~ channel_8_L; +#X obj 761 139 throw~ channel_8_R; +#X obj 852 473 throw~ channel_9_L; +#X obj 862 454 throw~ channel_9_R; +#X obj 951 431 throw~ channel_10_L; +#X obj 961 412 throw~ channel_10_R; +#X obj 1051 389 throw~ channel_11_L; +#X obj 1061 370 throw~ channel_11_R; +#X obj 1151 347 throw~ channel_12_L; +#X obj 1161 328 throw~ channel_12_R; +#X obj 1251 305 throw~ channel_13_L; +#X obj 1261 286 throw~ channel_13_R; +#X obj 1351 263 throw~ channel_14_L; +#X obj 1361 244 throw~ channel_14_R; +#X obj 1451 221 throw~ channel_15_L; +#X obj 1461 201 throw~ channel_15_R; +#X obj 1552 178 throw~ channel_16_L; +#X obj 1562 159 throw~ channel_16_R; +#X obj 1652 353 throw~ channel_17_L; +#X obj 1662 334 throw~ channel_17_R; +#X obj 1751 311 throw~ channel_18_L; +#X obj 1761 292 throw~ channel_18_R; +#X obj 1851 269 throw~ channel_19_L; +#X obj 1861 250 throw~ channel_19_R; +#X obj 1951 227 throw~ channel_20_L; +#X obj 1961 208 throw~ channel_20_R; +#X obj 2051 185 throw~ channel_21_L; +#X obj 2061 166 throw~ channel_21_R; +#X connect 0 0 44 0; +#X connect 1 0 42 0; +#X connect 2 0 48 0; +#X connect 3 0 46 0; +#X connect 4 0 52 0; +#X connect 5 0 50 0; +#X connect 6 0 56 0; +#X connect 7 0 54 0; +#X connect 8 0 60 0; +#X connect 9 0 58 0; +#X connect 10 0 64 0; +#X connect 11 0 62 0; +#X connect 12 0 68 0; +#X connect 13 0 66 0; +#X connect 14 0 72 0; +#X connect 15 0 70 0; +#X connect 16 0 76 0; +#X connect 17 0 74 0; +#X connect 18 0 80 0; +#X connect 19 0 78 0; +#X connect 20 0 82 0; +#X connect 21 0 43 0; +#X connect 22 0 45 0; +#X connect 23 0 47 0; +#X connect 24 0 49 0; +#X connect 25 0 51 0; +#X connect 26 0 53 0; +#X connect 27 0 55 0; +#X connect 28 0 57 0; +#X connect 29 0 59 0; +#X connect 30 0 61 0; +#X connect 31 0 63 0; +#X connect 32 0 65 0; +#X connect 33 0 67 0; +#X connect 34 0 69 0; +#X connect 35 0 71 0; +#X connect 36 0 73 0; +#X connect 37 0 75 0; +#X connect 38 0 77 0; +#X connect 39 0 79 0; +#X connect 40 0 81 0; +#X connect 41 0 83 0; +#X restore 809 491 pd submixer................................................. +; +#N canvas 0 23 838 530 submixer_busses 0; +#X obj 1003 417 throw~ main_out_left; +#X obj 1149 417 throw~ main_out_right; +#X obj 988 265 catch~ channel_1; +#X obj 976 246 catch~ channel_2; +#X obj 964 227 catch~ channel_3; +#X obj 951 208 catch~ channel_4; +#X obj 938 189 catch~ channel_5; +#X obj 928 170 catch~ channel_6; +#X obj 910 151 catch~ channel_7; +#X obj 899 132 catch~ channel_8; +#X obj 1168 265 catch~ channel_11; +#X obj 1156 246 catch~ channel_12; +#X obj 1144 227 catch~ channel_13; +#X obj 1131 208 catch~ channel_14; +#X obj 1118 189 catch~ channel_15; +#X obj 1108 170 catch~ channel_16; +#X obj 1090 151 catch~ channel_17; +#X obj 1079 132 catch~ channel_18; +#X obj 887 113 catch~ channel_9; +#X obj 876 94 catch~ channel_10; +#X obj 1056 94 catch~ channel_20; +#X obj 1067 113 catch~ channel_19; +#X obj 175 404 throw~ main_out_left; +#X text 215 43 Simple hard-coded left/right channel routing to stereo +bus; +#X obj 160 252 catch~ channel_1_L; +#X obj 328 233 catch~ channel_12_L; +#X obj 340 252 catch~ channel_11_L; +#X obj 316 214 catch~ channel_13_L; +#X obj 303 195 catch~ channel_14_L; +#X obj 290 176 catch~ channel_15_L; +#X obj 280 157 catch~ channel_16_L; +#X obj 262 138 catch~ channel_17_L; +#X obj 251 119 catch~ channel_18_L; +#X obj 239 100 catch~ channel_19_L; +#X obj 228 81 catch~ channel_20_L; +#X obj 48 81 catch~ channel_10_L; +#X obj 59 100 catch~ channel_9_L; +#X obj 71 119 catch~ channel_8_L; +#X obj 82 138 catch~ channel_7_L; +#X obj 100 157 catch~ channel_6_L; +#X obj 110 175 catch~ channel_5_L; +#X obj 123 195 catch~ channel_4_L; +#X obj 136 214 catch~ channel_3_L; +#X obj 148 233 catch~ channel_2_L; +#X obj 699 404 throw~ main_out_right; +#X obj 321 404 throw~ main_out_left; +#X obj 545 404 throw~ main_out_right; +#X obj 418 81 catch~ channel_10_R; +#X obj 429 100 catch~ channel_9_R; +#X obj 441 119 catch~ channel_8_R; +#X obj 452 138 catch~ channel_7_R; +#X obj 470 157 catch~ channel_6_R; +#X obj 480 175 catch~ channel_5_R; +#X obj 493 195 catch~ channel_4_R; +#X obj 506 214 catch~ channel_3_R; +#X obj 518 233 catch~ channel_2_R; +#X obj 530 252 catch~ channel_1_R; +#X obj 598 81 catch~ channel_20_R; +#X obj 609 100 catch~ channel_19_R; +#X obj 621 119 catch~ channel_18_R; +#X obj 632 138 catch~ channel_17_R; +#X obj 650 157 catch~ channel_16_R; +#X obj 660 176 catch~ channel_15_R; +#X obj 673 195 catch~ channel_14_R; +#X obj 686 214 catch~ channel_13_R; +#X obj 698 233 catch~ channel_12_R; +#X obj 710 252 catch~ channel_11_R; +#X text 870 39 DEPRECATED: Simple hard-coded left/right channel routing +to stereo bus; +#X connect 2 0 0 0; +#X connect 3 0 1 0; +#X connect 4 0 0 0; +#X connect 5 0 1 0; +#X connect 6 0 0 0; +#X connect 7 0 1 0; +#X connect 8 0 0 0; +#X connect 9 0 1 0; +#X connect 10 0 0 0; +#X connect 11 0 1 0; +#X connect 12 0 0 0; +#X connect 13 0 1 0; +#X connect 14 0 0 0; +#X connect 15 0 1 0; +#X connect 16 0 0 0; +#X connect 17 0 1 0; +#X connect 18 0 0 0; +#X connect 19 0 1 0; +#X connect 20 0 1 0; +#X connect 21 0 0 0; +#X connect 24 0 22 0; +#X connect 25 0 45 0; +#X connect 26 0 22 0; +#X connect 27 0 22 0; +#X connect 28 0 45 0; +#X connect 29 0 22 0; +#X connect 30 0 45 0; +#X connect 31 0 22 0; +#X connect 32 0 45 0; +#X connect 33 0 22 0; +#X connect 34 0 45 0; +#X connect 35 0 45 0; +#X connect 36 0 22 0; +#X connect 37 0 45 0; +#X connect 38 0 22 0; +#X connect 39 0 45 0; +#X connect 40 0 22 0; +#X connect 41 0 45 0; +#X connect 42 0 22 0; +#X connect 43 0 45 0; +#X connect 47 0 44 0; +#X connect 48 0 46 0; +#X connect 49 0 44 0; +#X connect 50 0 46 0; +#X connect 51 0 44 0; +#X connect 52 0 46 0; +#X connect 53 0 44 0; +#X connect 54 0 46 0; +#X connect 55 0 44 0; +#X connect 56 0 46 0; +#X connect 57 0 44 0; +#X connect 58 0 46 0; +#X connect 59 0 44 0; +#X connect 60 0 46 0; +#X connect 61 0 44 0; +#X connect 62 0 46 0; +#X connect 63 0 44 0; +#X connect 64 0 46 0; +#X connect 65 0 44 0; +#X connect 66 0 46 0; +#X restore 809 512 pd submixer_busses; +#X obj 1162 -44 catch~ smithd32_audio_1; +#X connect 1 0 84 0; +#X connect 1 1 84 1; +#X connect 2 0 84 2; +#X connect 2 1 84 3; +#X connect 3 0 1 0; +#X connect 4 0 2 0; +#X connect 5 0 84 4; +#X connect 5 1 84 5; +#X connect 6 0 84 6; +#X connect 6 1 84 7; +#X connect 7 0 5 0; +#X connect 8 0 6 0; +#X connect 9 0 84 8; +#X connect 9 1 84 9; +#X connect 10 0 84 10; +#X connect 10 1 84 11; +#X connect 11 0 9 0; +#X connect 12 0 10 0; +#X connect 13 0 84 12; +#X connect 13 1 84 13; +#X connect 14 0 84 14; +#X connect 14 1 84 15; +#X connect 15 0 13 0; +#X connect 16 0 14 0; +#X connect 17 0 84 16; +#X connect 17 1 84 17; +#X connect 18 0 84 18; +#X connect 18 1 84 19; +#X connect 19 0 17 0; +#X connect 20 0 18 0; +#X connect 21 0 84 20; +#X connect 21 1 84 21; +#X connect 22 0 84 22; +#X connect 22 1 84 23; +#X connect 23 0 21 0; +#X connect 24 0 22 0; +#X connect 25 0 84 24; +#X connect 25 1 84 25; +#X connect 26 0 84 26; +#X connect 26 1 84 27; +#X connect 27 0 25 0; +#X connect 28 0 26 0; +#X connect 29 0 84 28; +#X connect 29 1 84 29; +#X connect 30 0 84 30; +#X connect 30 1 84 31; +#X connect 31 0 29 0; +#X connect 32 0 30 0; +#X connect 33 0 84 32; +#X connect 33 1 84 33; +#X connect 34 0 84 34; +#X connect 34 1 84 35; +#X connect 35 0 33 0; +#X connect 36 0 34 0; +#X connect 37 0 84 36; +#X connect 37 1 84 37; +#X connect 38 0 84 38; +#X connect 38 1 84 39; +#X connect 39 0 37 0; +#X connect 40 0 38 0; +#X connect 41 0 84 40; +#X connect 41 1 84 41; +#X connect 42 0 41 0; +#X connect 63 0 1 0; +#X connect 64 0 2 0; +#X connect 65 0 5 0; +#X connect 66 0 6 0; +#X connect 67 0 9 0; +#X connect 68 0 10 0; +#X connect 69 0 13 0; +#X connect 70 0 14 0; +#X connect 71 0 17 0; +#X connect 72 0 18 0; +#X connect 73 0 21 0; +#X connect 74 0 22 0; +#X connect 75 0 25 0; +#X connect 76 0 26 0; +#X connect 77 0 29 0; +#X connect 78 0 30 0; +#X connect 79 0 34 0; +#X connect 80 0 41 0; +#X connect 81 0 38 0; +#X connect 82 0 37 0; +#X connect 86 0 33 0; +#X coords 0 -1 1 1 1910 394 2 0 100; diff --git a/mucelj.pd b/mucelj.pd new file mode 100644 index 0000000..caf9fb4 --- /dev/null +++ b/mucelj.pd @@ -0,0 +1,47 @@ +#N canvas 765 186 915 842 12; +#X obj 113 40 inlet; +#X obj 51 39 inlet~; +#X obj 260 492 outlet~; +#X obj 235 92 receive mucelj_tempo; +#X obj 242 125 receive mucelj_control; +#X obj 213 54 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 297 186 + 1; +#X floatatom 238 233 5 0 0 0 - - -; +#X obj 239 183 f; +#N canvas -8 -8 3440 1357 (subpatch) 0; +#X array array1 16 float 3; +#A 0 42.0337 44.2078 45.21 47.0451 44.2373 44.2373 40.2204 40.2208 +42.1737 44.2593 45.1803 47.2148 44.2078 44.1935 40.3463 40.4053; +#X coords 0 40 16 50 200 140 1 0 0; +#X restore 22 141 graph; +#X obj 295 211 mod 16; +#X obj 249 333 mtof; +#X floatatom 251 365 5 0 0 0 - - -; +#X obj 254 396 osc~; +#X obj 241 265 tabread array1; +#X floatatom 246 302 5 0 0 0 - - -; +#X obj 254 435 *~ 0.3; +#X obj 432 113 metro 500; +#X obj 428 72 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 318 306 + 20; +#X obj 328 519 throw~ mucelj_audio_1; +#X connect 3 0 5 0; +#X connect 3 0 8 0; +#X connect 6 0 8 1; +#X connect 6 0 10 0; +#X connect 7 0 14 0; +#X connect 8 0 6 0; +#X connect 8 0 7 0; +#X connect 10 0 8 1; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 13 0 16 0; +#X connect 14 0 15 0; +#X connect 15 0 19 0; +#X connect 16 0 2 0; +#X connect 16 0 20 0; +#X connect 17 0 8 0; +#X connect 18 0 17 0; +#X connect 19 0 11 0; diff --git a/mute.pd b/mute.pd new file mode 100644 index 0000000..289eaa9 --- /dev/null +++ b/mute.pd @@ -0,0 +1,10 @@ +#N canvas 0 23 450 300 12; +#X obj 126 42 inlet; +#X obj 76 42 inlet~; +#X obj 75 144 gate~; +#X obj 74 181 outlet~; +#X obj 134 181 outlet~; +#X connect 0 0 2 1; +#X connect 1 0 2 0; +#X connect 2 0 3 0; +#X connect 2 1 4 0; diff --git a/novaa.pd b/novaa.pd new file mode 100644 index 0000000..d3b9145 --- /dev/null +++ b/novaa.pd @@ -0,0 +1,82 @@ +#N canvas 711 23 712 766 12; +#X obj 73 49 inlet; +#X obj 19 49 inlet~; +#X obj 43 599 outlet~; +#X obj 101 599 outlet; +#X obj 166 141 receive novaa_tempo; +#X obj 259 275 receive novaa_control; +#X obj 166 225 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 282 300 list prepend set; +#X obj 282 323 list trim; +#X msg 282 345 1 2 3 4 5 6 7; +#X obj 260 399 unpack f f f f f f f; +#X floatatom 315 566 5 0 0 0 - - -; +#X floatatom 330 542 5 0 0 0 - - -; +#X floatatom 343 522 5 0 0 0 - - -; +#X floatatom 357 498 5 0 0 0 - - -; +#X floatatom 373 475 5 0 0 0 - - -; +#X floatatom 387 452 5 0 0 0 - - -; +#X floatatom 401 430 5 0 0 0 - - -; +#X obj 487 414 osc~; +#X obj 487 450 *~; +#X msg 533 413 0; +#X msg 565 413 0.3; +#X floatatom 486 380 5 0 0 0 - - -; +#X obj 486 315 random 1000; +#X obj 486 339 + 40; +#N canvas 0 22 450 278 (subpatch) 0; +#X array newbeat 8 float 3; +#A 0 64 67 86 94 77 83 65 52; +#X coords 0 127 8 0 200 140 1 0 0; +#X restore 330 37 graph; +#X msg 331 194 \; newbeat 0 64 67 86 94 77 83 65 52; +#X obj 43 388 tabread newbeat; +#X floatatom 43 412 5 0 0 0 - - -; +#X obj 43 435 mtof; +#X floatatom 43 459 5 0 0 0 - - -; +#X obj 43 482 osc~ 440; +#X obj 43 540 *~; +#X obj 68 315 + 1; +#X obj 42 315 f; +#X floatatom 43 362 5 0 0 0 - - -; +#X obj 42 339 % 8; +#X obj 124 494 line~; +#X obj 124 444 loadbang; +#X msg 124 468 1; +#X text 467 481 old code to generate random sound; +#X obj 166 600 throw~ novaa_audio_1; +#X connect 4 0 6 0; +#X connect 5 0 7 0; +#X connect 5 0 10 0; +#X connect 6 0 34 0; +#X connect 7 0 8 0; +#X connect 8 0 9 0; +#X connect 10 0 11 0; +#X connect 10 1 12 0; +#X connect 10 2 13 0; +#X connect 10 3 14 0; +#X connect 10 4 15 0; +#X connect 10 5 16 0; +#X connect 10 6 17 0; +#X connect 18 0 19 0; +#X connect 20 0 19 1; +#X connect 21 0 19 1; +#X connect 22 0 18 0; +#X connect 23 0 24 0; +#X connect 24 0 22 0; +#X connect 27 0 28 0; +#X connect 28 0 29 0; +#X connect 29 0 30 0; +#X connect 30 0 31 0; +#X connect 31 0 32 0; +#X connect 32 0 2 0; +#X connect 32 0 41 0; +#X connect 33 0 34 1; +#X connect 34 0 33 0; +#X connect 34 0 36 0; +#X connect 35 0 27 0; +#X connect 36 0 35 0; +#X connect 37 0 32 1; +#X connect 38 0 39 0; +#X connect 39 0 37 0; diff --git a/panner.pd b/panner.pd new file mode 100644 index 0000000..8a05e3f --- /dev/null +++ b/panner.pd @@ -0,0 +1,44 @@ +#N canvas 981 184 770 589 12; +#X obj 104 101 hsl 66 15 0 1 0 0 empty empty empty -2 -6 0 10 -262144 +-1 -1 6500 1; +#X floatatom -42 211 5 0 0 0 - - -; +#X obj -60 401 *~; +#X obj 0 401 *~; +#X obj -60 440 outlet~; +#X obj 0 440 outlet~; +#X obj 81 360 line~; +#X msg 80 326 \$1 10; +#X obj -41 360 line~; +#X msg -42 326 \$1 10; +#X obj -68 8 inlet~; +#X obj 101 116 nbx 7 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10 +-262144 -1 -1 1 256; +#X text -117 -54 Simple panner; +#X obj 101 50 r init; +#X msg 101 74 0.5; +#X obj 70 442 outlet; +#X obj 120 442 outlet; +#X obj -40 153 expr 1 - $f1; +#X floatatom 81 275 5 0 0 0 - - -; +#X msg 107 247 0; +#X connect 0 0 11 0; +#X connect 1 0 9 0; +#X connect 2 0 4 0; +#X connect 3 0 5 0; +#X connect 6 0 3 1; +#X connect 7 0 6 0; +#X connect 7 0 16 0; +#X connect 8 0 2 1; +#X connect 9 0 8 0; +#X connect 9 0 15 0; +#X connect 10 0 2 0; +#X connect 10 0 3 0; +#X connect 11 0 18 0; +#X connect 11 0 17 0; +#X connect 13 0 14 0; +#X connect 14 0 0 0; +#X connect 17 0 1 0; +#X connect 18 0 7 0; +#X connect 19 0 18 0; +#X connect 19 0 1 0; +#X coords 0 -1 1 1 73 31 1 100 100; diff --git a/plancs.pd b/plancs.pd new file mode 100644 index 0000000..cfa4b83 --- /dev/null +++ b/plancs.pd @@ -0,0 +1,92 @@ +#N canvas 288 23 1392 965 12; +#X obj 54 38 inlet~; +#X obj 110 38 inlet; +#X obj 110 658 outlet; +#X obj 54 658 outlet~; +#X obj 239 38 receive plancs_tempo; +#X obj 484 38 receive plancs_control; +#X obj 239 547 *~; +#X floatatom 365 374 5 0 0 0 - - -; +#X obj 365 436 osc~ 400; +#N canvas 0 50 450 250 (subpatch) 0; +#X array melody 15 float 3; +#A 0 60 0 64 62 60 0 64 62 60 0 64 62 60 0 55; +#X coords 0 127 15 0 200 140 1 0 0; +#X restore 1041 173 graph; +#X obj 239 130 float; +#X obj 278 130 + 1; +#X floatatom 239 161 5 0 0 0 - - -; +#X floatatom 239 222 5 0 0 0 - - -; +#X obj 365 282 tabread melody; +#X floatatom 365 313 5 0 0 0 - - -; +#X obj 460 527 line~; +#X obj 365 343 mtof; +#X msg 529 498 0.1 100; +#X msg 460 498 0 100; +#N canvas 0 50 450 250 (subpatch) 0; +#X array bassline 15 float 3; +#A 0 30 0 0 35 30 0 0 35 30 0 0 35 30 0 25; +#X coords 0 127 15 0 200 140 1 0 0; +#X restore 831 173 graph; +#X obj 239 191 % 16; +#X obj 239 282 tabread bassline; +#X floatatom 239 374 5 0 0 0 - - -; +#X floatatom 239 313 5 0 0 0 - - -; +#X obj 239 343 mtof; +#X msg 831 69 \; melody 0 60 0 64 62 60 0 64 62 60 0 64 62 60 0 55 +; +#X obj 239 436 osc~ 400; +#X msg 831 116 \; bassline 0 30 0 0 35 30 0 0 35 30 0 0 35 30 0 25 +; +#N canvas 0 50 450 250 (subpatch) 0; +#X array highs 15 float 3; +#A 0 0 90 0 90 0 90 0 90 0 90 0 90 0 90 95; +#X coords 0 127 15 0 200 140 1 0 0; +#X restore 831 333 graph; +#X floatatom 127 374 5 0 0 0 - - -; +#X floatatom 127 313 5 0 0 0 - - -; +#X obj 127 343 mtof; +#X obj 127 436 osc~ 400; +#X obj 127 282 tabread highs; +#X msg 831 22 \; highs 0 0 90 0 90 0 90 0 90 0 90 0 90 0 90 95; +#X obj 365 467 *~ 1; +#X text 458 480 off; +#X text 527 480 on; +#X obj 239 467 *~ 1.25; +#X obj 127 467 *~ 0.05; +#X obj 450 608 throw~ plancs_audio_1; +#X obj 602 450 loadbang; +#X text 535 419 ROB - need to loadbang your volume on; +#X connect 4 0 10 0; +#X connect 6 0 3 0; +#X connect 6 0 41 0; +#X connect 7 0 8 0; +#X connect 8 0 36 0; +#X connect 10 0 11 0; +#X connect 10 0 12 0; +#X connect 11 0 10 1; +#X connect 12 0 21 0; +#X connect 13 0 14 0; +#X connect 13 0 22 0; +#X connect 13 0 34 0; +#X connect 14 0 15 0; +#X connect 15 0 17 0; +#X connect 16 0 6 1; +#X connect 17 0 7 0; +#X connect 18 0 16 0; +#X connect 19 0 16 0; +#X connect 21 0 13 0; +#X connect 22 0 24 0; +#X connect 23 0 27 0; +#X connect 24 0 25 0; +#X connect 25 0 23 0; +#X connect 27 0 39 0; +#X connect 30 0 33 0; +#X connect 31 0 32 0; +#X connect 32 0 30 0; +#X connect 33 0 40 0; +#X connect 34 0 31 0; +#X connect 36 0 6 0; +#X connect 39 0 6 0; +#X connect 40 0 6 0; +#X connect 42 0 18 0; diff --git a/quarlm.pd b/quarlm.pd new file mode 100644 index 0000000..e1bed1f --- /dev/null +++ b/quarlm.pd @@ -0,0 +1,68 @@ +#N canvas 648 153 904 680 12; +#X obj 180 36 receive quarlm_tempo; +#X obj 335 36 receive quarlm_control; +#X obj 85 36 inlet; +#X obj 94 577 outlet; +#X obj 29 36 inlet~; +#X obj 34 577 outlet~; +#N canvas 0 50 450 250 (subpatch) 0; +#X array melody 11 float 3; +#A 0 72 71 67 72 71 67 64 60 59 60 65; +#X coords 0 127 11 0 200 140 1 0 0; +#X restore 572 35 graph; +#X obj 33 129 f; +#X obj 79 129 + 1; +#X floatatom 33 153 5 0 0 0 - - -; +#X obj 33 228 tabread melody; +#X floatatom 33 252 10 0 0 0 - - -; +#X floatatom 33 200 5 0 0 0 - - -; +#X msg 92 105 0; +#X obj 132 346 line~; +#X obj 33 387 *~; +#X msg 186 297 0 50; +#X obj 33 275 mtof; +#X floatatom 33 299 10 0 0 0 - - -; +#X obj 33 348 osc~; +#X msg 132 297 0.5 50; +#X obj 378 66 list prepend set; +#X obj 378 93 list trim; +#X msg 378 122 1 2 3 4 5; +#X obj 335 165 unpack f f f f f; +#X floatatom 335 230 5 0 0 0 - - -; +#X floatatom 382 230 5 0 0 0 - - -; +#X floatatom 430 230 5 0 0 0 - - -; +#X floatatom 478 230 5 0 0 0 - - -; +#X floatatom 527 230 5 0 0 0 - - -; +#X obj 33 176 % 11; +#X msg 571 179 \; melody 0 72 71 67 72 71 67 64 60 59 60 65; +#X obj 64 445 throw~ quarlm_audio_1; +#X obj 267 295 loadbang; +#X text 337 295 ROB - need to start with a volume; +#X connect 0 0 7 0; +#X connect 1 0 21 0; +#X connect 1 0 24 0; +#X connect 7 0 9 0; +#X connect 7 0 8 0; +#X connect 8 0 7 1; +#X connect 9 0 30 0; +#X connect 10 0 11 0; +#X connect 11 0 17 0; +#X connect 12 0 10 0; +#X connect 13 0 7 1; +#X connect 14 0 15 1; +#X connect 15 0 5 0; +#X connect 15 0 32 0; +#X connect 16 0 14 0; +#X connect 17 0 18 0; +#X connect 18 0 19 0; +#X connect 19 0 15 0; +#X connect 20 0 14 0; +#X connect 21 0 22 0; +#X connect 22 0 23 0; +#X connect 24 0 25 0; +#X connect 24 1 26 0; +#X connect 24 2 27 0; +#X connect 24 3 28 0; +#X connect 24 4 29 0; +#X connect 30 0 12 0; +#X connect 33 0 20 0; diff --git a/recorder.pd b/recorder.pd new file mode 100644 index 0000000..55ffe45 --- /dev/null +++ b/recorder.pd @@ -0,0 +1,11 @@ +#N canvas 1000 203 450 300 12; +#X obj 280 255 writesf~ 2; +#X obj 297 220 inlet~; +#X obj 347 220 inlet~; +#X obj 279 193 r recorder; +#X msg 31 167 start; +#X msg 33 193 stop; +#X msg 22 83 open /tmp/foo.wav; +#X connect 1 0 0 0; +#X connect 2 0 0 1; +#X connect 3 0 0 0; diff --git a/recorder_controls.pd b/recorder_controls.pd new file mode 100644 index 0000000..759339a --- /dev/null +++ b/recorder_controls.pd @@ -0,0 +1,21 @@ +#N canvas 0 23 450 300 12; +#X obj 100 196 s recorder; +#X obj -33 143 savepanel; +#X msg -33 167 open \$1.wav; +#X msg 146 132 stop; +#X msg 99 132 start; +#X obj 95 71 bng 15 250 50 0 empty empty Open_File... 22 7 0 10 -262144 +-1 -1; +#X obj 95 93 bng 15 250 50 0 empty empty Start 22 7 0 10 -262144 -1 +-1; +#X obj 155 93 bng 15 250 50 0 empty empty Stop 22 7 0 10 -262144 -1 +-1; +#X text 75 46 Record Main Outs; +#X connect 1 0 2 0; +#X connect 2 0 0 0; +#X connect 3 0 0 0; +#X connect 4 0 0 0; +#X connect 5 0 1 0; +#X connect 6 0 4 0; +#X connect 7 0 3 0; +#X coords 0 -1 1 1 163 76 2 70 40; diff --git a/sheny13.pd b/sheny13.pd new file mode 100644 index 0000000..20e4395 --- /dev/null +++ b/sheny13.pd @@ -0,0 +1,94 @@ +#N canvas 460 23 1220 1005 12; +#X obj 134 40 inlet; +#X obj 74 40 inlet~; +#X obj 72 829 outlet~; +#X obj 138 829 outlet; +#X obj 213 41 receive sheny13_tempo; +#X obj 382 41 receive sheny13_control; +#X obj 72 342 metro 1000; +#X obj 72 389 f; +#X obj 112 389 + 1; +#X floatatom 72 413 5 0 0 0 - - -; +#X floatatom 72 523 5 0 0 0 - - -; +#X floatatom 72 460 5 0 0 0 - - -; +#X floatatom 139 310 5 0 0 0 - - -; +#X msg 162 356 0; +#X obj 201 676 line~; +#X obj 72 703 *~; +#X msg 235 628 0 50; +#X obj 72 546 mtof; +#X floatatom 72 570 10 0 0 0 - - -; +#X msg 162 627 0.2 50; +#X floatatom 139 231 5 0 0 0 - - -; +#X floatatom 139 169 5 0 0 0 - - -; +#X obj 72 648 osc~ 440; +#X obj 203 482 send coolbang; +#X obj 139 135 receive coolbang; +#X obj 139 262 * 150; +#X obj 72 436 % 13; +#X obj 72 99 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 72 308 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X floatatom 335 394 5 0 0 0 - - -; +#X floatatom 402 468 5 0 0 0 - - -; +#X obj 335 471 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 368 471 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 335 433 select 0 1; +#X obj 186 459 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 72 492 tabread note; +#X obj 139 197 tabread duration; +#X msg 516 348 \; note 60 64 69 60 64 69 64 59 64 69 59 64 67; +#X msg 516 392 \; duration 3 3 3 5 3 3 3 3 3 3 5 3 3; +#N canvas 0 50 450 250 (subpatch) 0; +#X array note 16 float 3; +#A 0 59.8716 65.3143 68.9429 60 64 68.9429 65.3141 59 64 69 59 64 67 +78 79 80; +#X coords 0 127 16 0 200 70 1 0 0; +#X restore 462 213 graph; +#N canvas 0 50 450 250 (subpatch) 0; +#X array duration 16 float 3; +#A 0 3 3 3 3 3 5 3 3 3 3 3 3 5 3 3 3; +#X coords 0 10 16 0 200 70 1 0 0; +#X restore 690 212 graph; +#X obj 197 782 throw~ sheny13_audio_1; +#X connect 4 0 27 0; +#X connect 6 0 7 0; +#X connect 7 0 8 0; +#X connect 7 0 9 0; +#X connect 8 0 7 1; +#X connect 9 0 26 0; +#X connect 10 0 17 0; +#X connect 11 0 23 0; +#X connect 11 0 35 0; +#X connect 12 0 6 1; +#X connect 13 0 7 1; +#X connect 13 0 34 0; +#X connect 14 0 15 1; +#X connect 15 0 2 0; +#X connect 15 0 41 0; +#X connect 16 0 14 0; +#X connect 17 0 18 0; +#X connect 18 0 22 0; +#X connect 19 0 14 0; +#X connect 20 0 25 0; +#X connect 21 0 36 0; +#X connect 22 0 15 0; +#X connect 24 0 21 0; +#X connect 25 0 12 0; +#X connect 26 0 11 0; +#X connect 27 0 28 0; +#X connect 28 0 6 0; +#X connect 28 0 29 0; +#X connect 29 0 33 0; +#X connect 31 0 16 0; +#X connect 32 0 13 0; +#X connect 33 0 31 0; +#X connect 33 1 32 0; +#X connect 33 2 30 0; +#X connect 34 0 19 0; +#X connect 35 0 10 0; +#X connect 36 0 20 0; diff --git a/sine_synth.pd b/sine_synth.pd new file mode 100755 index 0000000..335b6d5 --- /dev/null +++ b/sine_synth.pd @@ -0,0 +1,30 @@ +#N canvas 742 231 841 578 12; +#X obj 57 166 osc~ 440; +#X obj 156 185 line~; +#X obj 57 205 *~; +#X obj 57 93 mtof; +#X floatatom 57 117 10 0 0 0 - - -; +#X obj 156 73 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 218 103 delay 1000; +#X obj 57 15 inlet; +#X obj 156 15 inlet; +#X obj 285 14 inlet; +#X obj 57 272 outlet~; +#X msg 218 137 0 100; +#X obj 57 231 *~ 2; +#X msg 155 137 0.1 1000; +#X connect 0 0 2 0; +#X connect 1 0 2 1; +#X connect 2 0 12 0; +#X connect 3 0 4 0; +#X connect 4 0 0 0; +#X connect 5 0 6 0; +#X connect 5 0 13 0; +#X connect 6 0 11 0; +#X connect 7 0 3 0; +#X connect 8 0 5 0; +#X connect 9 0 6 1; +#X connect 11 0 1 0; +#X connect 12 0 10 0; +#X connect 13 0 1 0; diff --git a/smithd32.pd b/smithd32.pd new file mode 100755 index 0000000..0192e4a --- /dev/null +++ b/smithd32.pd @@ -0,0 +1,506 @@ +#N canvas 0 23 1680 976 12; +#X floatatom 861 60 5 0 0 0 - - -; +#X obj 861 88 * 12; +#X floatatom 861 114 5 0 0 0 - - -; +#X obj 350 3 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 +; +#X obj 350 31 metro 1000; +#X obj 394 284 route 1 2 3 4 5 6; +#X obj 304 325 s I; +#X obj 355 325 s II; +#X obj 412 325 s III; +#X obj 476 325 s IV; +#X obj 163 12 r I; +#X obj 163 75 s chord; +#X msg 163 42 48 52 55; +#X obj 163 178 s chord; +#X obj 163 289 s chord; +#X msg 163 145 50 53 57; +#X msg 163 256 53 57 60; +#X obj 163 394 s chord; +#X obj 163 497 s chord; +#X obj 163 608 s chord; +#X msg 163 361 55 59 62; +#X msg 163 575 59 62 65; +#X obj 710 114 r chord; +#X msg 163 464 57 60 64; +#X obj 710 183 list prepend set; +#X obj 710 206 list trim; +#X msg 710 229 67 71 74; +#X obj 163 115 r II; +#X obj 163 226 r III; +#X obj 163 331 r IV; +#X obj 533 325 s V; +#X obj 585 325 s VI; +#X obj 163 434 r V; +#N canvas 1002 29 678 460 diatonic_harmony 0; +#X obj 273 11 inlet; +#X text 154 11 current chord in; +#X obj 273 64 sel 1 2 3 4 5 6; +#X obj 176 119 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X floatatom 313 316 5 0 0 0 - - -; +#X msg 244 142 5; +#X obj 244 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 281 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X msg 281 142 6; +#X obj 316 119 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 316 142 random 2; +#X obj 316 170 sel 0 1; +#X msg 301 203 1; +#X msg 334 203 5; +#X obj 396 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 433 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X msg 396 142 1; +#X msg 433 142 2; +#X obj 313 353 outlet; +#X text 16 116 Diatonic Harmony; +#X text 16 144 1 - ANY; +#X text 16 163 2 - 5; +#X text 16 181 3 - 6; +#X text 16 199 4 - 1 or 5; +#X text 16 216 5 - 1; +#X text 16 234 6 - 2; +#X obj 176 142 random 5; +#X obj 176 170 + 2; +#X connect 0 0 2 0; +#X connect 2 0 3 0; +#X connect 2 1 6 0; +#X connect 2 2 7 0; +#X connect 2 3 9 0; +#X connect 2 4 14 0; +#X connect 2 5 15 0; +#X connect 3 0 26 0; +#X connect 4 0 18 0; +#X connect 5 0 4 0; +#X connect 6 0 5 0; +#X connect 7 0 8 0; +#X connect 8 0 4 0; +#X connect 9 0 10 0; +#X connect 10 0 11 0; +#X connect 11 0 12 0; +#X connect 11 1 13 0; +#X connect 12 0 4 0; +#X connect 13 0 4 0; +#X connect 14 0 16 0; +#X connect 15 0 17 0; +#X connect 16 0 4 0; +#X connect 17 0 4 0; +#X connect 26 0 27 0; +#X connect 27 0 4 0; +#X restore 394 224 pd diatonic_harmony; +#X msg 316 135 1; +#X obj 348 234 f; +#X floatatom 394 247 5 0 0 0 - - -; +#X obj 286 327 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 334 327 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 391 327 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 456 327 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 513 327 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 564 327 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X text 443 247 << current chord; +#X text 729 60 Select octave >> (base -1 from center C), f 17; +#X text 18 246 C major scale; +#X text 18 266 I - CEG \,; +#X text 18 285 II - DFA \,; +#X text 18 305 III - EGB \,; +#X text 18 325 IV - FAC \,; +#X text 18 345 V - GBD \,; +#X text 18 363 VI - ACE; +#X obj 585 209 s tempo; +#X obj 476 161 s start; +#X obj 311 422 r start; +#X obj 378 422 r tempo; +#X obj 311 482 metro 1000; +#X obj 378 452 / 4; +#X obj 350 63 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 700 260 unpack f f f; +#X obj 710 142 list-abs/list-math + 0; +#X obj 675 416 sine_synth; +#X obj 781 416 sine_synth; +#X obj 911 417 sine_synth; +#X obj 163 545 r VI; +#X obj 861 11 loadbang; +#X msg 861 36 1; +#X obj 687 757 s dur; +#X obj 742 354 r dur; +#X obj 848 334 r dur; +#X obj 978 354 r dur; +#X obj 311 516 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 239 711 route 1 2 3 4; +#X obj 239 635 f; +#X obj 275 635 + 1; +#X obj 239 660 expr ($f1 % 4)+1; +#X floatatom 239 683 5 0 0 0 - - -; +#X obj 496 518 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 311 603 sel 0 1; +#X obj 385 635 f; +#X obj 421 635 + 1; +#X obj 385 660 expr ($f1 % 4)+1; +#X floatatom 385 683 5 0 0 0 - - -; +#X obj 311 580 * 1; +#X msg 311 548 1; +#X obj 379 803 s s1; +#X obj 423 803 s s2; +#X obj 463 803 s s3; +#X obj 261 745 s all; +#X obj 708 354 r s1; +#X obj 814 334 r s2; +#X obj 944 354 r s3; +#X obj 825 357 r all; +#X obj 611 586 sel 0 1; +#X msg 496 492 1; +#X obj 474 463 loadbang; +#X obj 601 679 f; +#X obj 619 613 r tempo; +#X obj 619 636 * 0.75; +#X obj 757 681 f; +#X obj 775 621 r tempo; +#X obj 775 644 * 0.25; +#X text 627 175 << TEMPO; +#X text 284 3 START >>; +#X text 410 517 ARPEGGIO?>>; +#X obj 362 90 s beat; +#X obj 438 370 r beat; +#X obj 438 418 sel 0; +#X obj 585 43 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 +-1; +#X obj 585 90 * 1; +#X msg 585 62 1; +#X obj 620 63 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X obj 585 119 sel 0 1; +#X obj 585 149 timer; +#X floatatom 585 176 5 0 0 0 - - -; +#X obj 266 68 loadbang; +#X obj 585 7 r beat; +#X floatatom 418 3 5 0 0 0 - - -; +#X obj 476 7 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1 +; +#X obj 512 62 + 1; +#X floatatom 476 90 5 0 0 0 - - -; +#X msg 420 90 0; +#X obj 476 62 f; +#X obj 476 -51 loadbang; +#X msg 476 -26 1; +#X msg 418 -25 1000; +#X obj 476 137 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 +1; +#X obj 284 -41 hsl 128 15 200 2000 0 0 empty empty empty -2 -8 0 10 +-262144 -1 -1 5644 1; +#X obj 427 186 s arp; +#X obj 423 474 r arp; +#X msg 423 496 1; +#X obj 427 163 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 476 35 metro 500; +#X obj 427 140 sel 1; +#X obj 708 391 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 814 397 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 944 395 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X floatatom 687 722 5 0 0 0 - - -; +#X obj 539 466 * 1; +#X msg 539 438 1; +#X obj 539 495 sel 1; +#X msg 571 438 0; +#X obj 539 520 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X msg 603 438 1; +#X obj 539 372 r tempo; +#X obj 539 396 delay 100; +#X obj 427 114 > 2; +#X obj 476 113 < 5; +#X obj 231 30 r smithd32_tempo; +#X obj 12 13 inlet; +#X obj 62 13 inlet; +#X obj 1090 536 outlet; +#X obj 606 -43 r smithd32_control; +#X msg 508 671 0; +#X msg 542 671 5; +#X obj 693 299 s n1; +#X obj 737 299 s n2; +#X obj 781 300 s n3; +#X obj 674 382 r n1; +#X obj 778 380 r n2; +#X obj 910 383 r n3; +#X obj 1093 387 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 1199 393 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 1329 391 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 1059 378 r n1; +#X obj 1163 376 r n2; +#X obj 1295 379 r n3; +#X obj 1060 412 envelopes; +#X obj 1166 412 envelopes; +#X obj 1296 413 envelopes; +#X obj 385 759 route 1 2 3 4; +#X obj 1093 350 r s4; +#X obj 1199 330 r s5; +#X obj 1329 350 r s6; +#X obj 385 723 + 0; +#X obj 532 818 route 1 2 3 4; +#X obj 532 780 - 4; +#X obj 526 862 s s4; +#X obj 570 862 s s5; +#X obj 610 862 s s6; +#X obj 509 557 sel 1; +#X obj 782 784 + 20; +#X obj 782 839 s decay; +#X obj 1127 350 r decay; +#X obj 1233 330 r decay; +#X obj 1363 350 r decay; +#X floatatom 782 814 5 0 0 0 - - -; +#X obj 743 740 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 782 757 random 300; +#X obj 510 619 sel 0; +#X obj 542 651 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 509 588 random 5; +#X text 951 621 By Darius Smith; +#X text 952 640 Tutorials used:; +#X text 941 766 https://www.youtube.com/watch?v=I88Cxi86Zu8&feature=youtu.be +; +#X text 941 788 https://www.youtube.com/watch?v=gqpvIwYko3o&feature=youtu.be +; +#X text 944 746 By Really Useful Plugins; +#X text 945 684 By Programming for People; +#X text 943 705 https://www.youtube.com/watch?v=gdIAq7Kg-gI; +#X text 989 -16 Plans for the Future:; +#X text 986 61 2) Learn how to make more sounds; +#X text 986 87 3) Complete the drum sounds tutorials by Really Useful +Plugins; +#X text 986 134 4) Build a semi-randomized drum machine addon to this +; +#X text 987 164 5) Map controls to input from smithd32_contol; +#X text 1086 619 (^‿^); +#X text 988 2 1) Try to fix bug: envelopes instrument makes static +sound when first activated (ARPEGGIO is switched ON) - FIXED (appears +to be clipping issue); +#X text 988 228 NOTE: This patch will take a few seconds to start and +continue for a few seconds after it has stopped recieving pulses form +the master BPM. This is expected.; +#X msg 516 -25 10; +#X obj 1020 501 *~; +#X obj 1020 536 outlet~; +#X obj 1180 476 loadbang; +#X msg 1180 502 0; +#X obj 1224 502 delay 1000; +#X msg 1224 528 1; +#X floatatom 610 557 5 0 0 0 - - -; +#X obj 643 492 r tempo; +#X obj 643 520 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 +-1 -1; +#X obj 438 395 random 50; +#X obj 1216 620 throw~ smithd32_audio_1; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 0 60 1; +#X connect 3 0 4 0; +#X connect 4 0 58 0; +#X connect 5 0 6 0; +#X connect 5 0 37 0; +#X connect 5 1 7 0; +#X connect 5 1 38 0; +#X connect 5 2 8 0; +#X connect 5 2 39 0; +#X connect 5 3 9 0; +#X connect 5 3 40 0; +#X connect 5 4 30 0; +#X connect 5 4 41 0; +#X connect 5 5 31 0; +#X connect 5 5 42 0; +#X connect 10 0 12 0; +#X connect 12 0 11 0; +#X connect 15 0 13 0; +#X connect 16 0 14 0; +#X connect 20 0 17 0; +#X connect 21 0 19 0; +#X connect 22 0 60 0; +#X connect 23 0 18 0; +#X connect 24 0 25 0; +#X connect 25 0 26 0; +#X connect 27 0 15 0; +#X connect 28 0 16 0; +#X connect 29 0 20 0; +#X connect 32 0 23 0; +#X connect 33 0 36 0; +#X connect 34 0 35 1; +#X connect 35 0 33 0; +#X connect 36 0 35 1; +#X connect 36 0 5 0; +#X connect 54 0 56 0; +#X connect 55 0 57 0; +#X connect 56 0 71 0; +#X connect 57 0 56 1; +#X connect 58 0 35 0; +#X connect 58 0 105 0; +#X connect 58 0 121 0; +#X connect 59 0 155 0; +#X connect 59 1 156 0; +#X connect 59 2 157 0; +#X connect 60 0 24 0; +#X connect 60 0 59 0; +#X connect 61 0 208 0; +#X connect 62 0 208 0; +#X connect 63 0 208 0; +#X connect 64 0 21 0; +#X connect 65 0 66 0; +#X connect 66 0 0 0; +#X connect 68 0 61 2; +#X connect 69 0 62 2; +#X connect 70 0 63 2; +#X connect 71 0 84 0; +#X connect 72 1 88 0; +#X connect 73 0 74 0; +#X connect 73 0 75 0; +#X connect 74 0 73 1; +#X connect 75 0 76 0; +#X connect 76 0 72 0; +#X connect 77 0 83 1; +#X connect 77 0 180 0; +#X connect 77 0 214 0; +#X connect 77 0 187 0; +#X connect 78 0 73 0; +#X connect 78 1 79 0; +#X connect 79 0 80 0; +#X connect 79 0 81 0; +#X connect 80 0 79 1; +#X connect 81 0 82 0; +#X connect 82 0 174 0; +#X connect 83 0 78 0; +#X connect 84 0 83 0; +#X connect 89 0 134 0; +#X connect 90 0 135 0; +#X connect 91 0 136 0; +#X connect 92 0 134 0; +#X connect 92 0 135 0; +#X connect 92 0 136 0; +#X connect 93 0 96 0; +#X connect 93 1 99 0; +#X connect 94 0 77 0; +#X connect 95 0 94 0; +#X connect 96 0 137 0; +#X connect 97 0 98 0; +#X connect 98 0 96 1; +#X connect 99 0 137 0; +#X connect 100 0 101 0; +#X connect 101 0 99 1; +#X connect 106 0 217 0; +#X connect 107 0 77 0; +#X connect 108 0 110 0; +#X connect 108 0 111 0; +#X connect 109 0 112 0; +#X connect 110 0 109 0; +#X connect 111 0 109 1; +#X connect 112 0 113 0; +#X connect 112 1 113 1; +#X connect 113 0 114 0; +#X connect 114 0 52 0; +#X connect 115 0 34 0; +#X connect 116 0 108 0; +#X connect 117 0 4 1; +#X connect 118 0 132 0; +#X connect 119 0 122 1; +#X connect 120 0 146 0; +#X connect 120 0 147 0; +#X connect 121 0 122 1; +#X connect 122 0 120 0; +#X connect 122 0 119 0; +#X connect 123 0 124 0; +#X connect 123 0 125 0; +#X connect 123 0 207 0; +#X connect 124 0 118 0; +#X connect 125 0 127 0; +#X connect 126 0 53 0; +#X connect 127 0 117 0; +#X connect 129 0 130 0; +#X connect 130 0 77 0; +#X connect 131 0 128 0; +#X connect 132 0 122 0; +#X connect 133 0 131 0; +#X connect 134 0 61 1; +#X connect 135 0 62 1; +#X connect 136 0 63 1; +#X connect 137 0 67 0; +#X connect 138 0 140 0; +#X connect 139 0 138 0; +#X connect 140 0 142 0; +#X connect 140 0 77 0; +#X connect 141 0 138 1; +#X connect 143 0 138 1; +#X connect 144 0 145 0; +#X connect 145 0 139 0; +#X connect 145 0 141 0; +#X connect 146 0 133 0; +#X connect 147 0 126 0; +#X connect 148 0 58 0; +#X connect 153 0 174 1; +#X connect 154 0 174 1; +#X connect 158 0 61 0; +#X connect 159 0 62 0; +#X connect 160 0 63 0; +#X connect 161 0 167 1; +#X connect 162 0 168 1; +#X connect 163 0 169 1; +#X connect 164 0 167 0; +#X connect 165 0 168 0; +#X connect 166 0 169 0; +#X connect 167 0 208 0; +#X connect 168 0 208 0; +#X connect 169 0 208 0; +#X connect 170 1 85 0; +#X connect 170 2 86 0; +#X connect 170 3 87 0; +#X connect 170 4 176 0; +#X connect 171 0 161 0; +#X connect 172 0 162 0; +#X connect 173 0 163 0; +#X connect 174 0 170 0; +#X connect 175 1 177 0; +#X connect 175 2 178 0; +#X connect 175 3 179 0; +#X connect 176 0 175 0; +#X connect 180 0 191 0; +#X connect 181 0 186 0; +#X connect 183 0 167 2; +#X connect 184 0 168 2; +#X connect 185 0 169 2; +#X connect 186 0 182 0; +#X connect 187 0 188 0; +#X connect 188 0 181 0; +#X connect 189 0 153 0; +#X connect 189 1 190 0; +#X connect 190 0 154 0; +#X connect 191 0 189 0; +#X connect 207 0 122 1; +#X connect 208 0 209 0; +#X connect 208 0 218 0; +#X connect 210 0 211 0; +#X connect 210 0 212 0; +#X connect 211 0 208 1; +#X connect 212 0 213 0; +#X connect 213 0 208 1; +#X connect 214 0 93 0; +#X connect 215 0 216 0; +#X connect 216 0 214 0; +#X connect 217 0 107 0; diff --git a/utilities.pd b/utilities.pd new file mode 100644 index 0000000..efad11a --- /dev/null +++ b/utilities.pd @@ -0,0 +1,23 @@ +#N canvas 0 23 737 285 12; +#X msg 235 77 60000 \$1; +#X obj 235 101 /; +#X floatatom 235 125 10 0 0 0 - - -; +#X floatatom 235 50 5 0 0 0 - - -; +#X text 20 47 Convert BPM to milliseconds; +#X obj 362 80 expr 60000/$f1; +#X floatatom 362 124 10 0 0 0 - - -; +#X text 281 49 bpm; +#X text 311 125 ms; +#X text 438 124 ms; +#X obj 513 102 bpmtoms; +#X floatatom 513 157 5 0 0 0 - - -; +#X floatatom 513 73 5 0 0 0 - - -; +#X text 555 158 ms; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 3 0 0 0; +#X connect 3 0 5 0; +#X connect 3 0 12 0; +#X connect 5 0 6 0; +#X connect 10 0 11 0; +#X connect 12 0 10 0;