#N canvas 32 15 950 613 12; #X obj 33 220 r trigger; #X floatatom 70 520 0 0 0; #N canvas 159 26 584 307 output 0; #X obj 390 189 t b; #X obj 390 129 f; #X obj 390 69 inlet; #X text 397 32 mute; #X obj 390 219 f; #X msg 451 217 0; #X msg 390 99 bang; #X obj 390 159 moses 1; #X obj 460 137 moses 1; #X obj 100 178 dbtorms; #X obj 460 107 r master-lvl; #X obj 100 50 r master-lvl; #X obj 390 249 s master-lvl; #X obj 26 217 inlet~; #X obj 239 49 inlet; #X text 239 22 level; #X obj 239 120 s master-lvl; #X msg 115 78 set \$1; #X obj 115 107 outlet; #X msg 257 77 \; pd dsp 1; #X obj 100 233 line~; #X obj 26 254 *~; #X obj 26 289 dac~; #X obj 100 205 pack 0 50; #X text 24 190 audio; #X text 112 132 show level; #X connect 0 0 4 0; #X connect 1 0 7 0; #X connect 2 0 6 0; #X connect 4 0 12 0; #X connect 5 0 12 0; #X connect 6 0 1 0; #X connect 7 0 0 0; #X connect 7 1 5 0; #X connect 8 1 4 1; #X connect 9 0 23 0; #X connect 10 0 1 1; #X connect 10 0 8 0; #X connect 11 0 9 0; #X connect 11 0 17 0; #X connect 13 0 21 0; #X connect 14 0 16 0; #X connect 14 0 19 0; #X connect 17 0 18 0; #X connect 20 0 21 1; #X connect 21 0 22 0; #X connect 21 0 22 1; #X connect 23 0 20 0; #X restore 32 546 pd output; #X msg 108 521 MUTE; #X obj 33 438 *~; #X obj 33 331 *~ 0.01; #X obj 33 366 *~; #X obj 33 396 *~; #X obj 80 360 r pitch; #X obj 80 410 mtof; #X floatatom 80 385 4 0 0; #X floatatom 57 272 4 0 0; #X obj 57 247 r level; #X floatatom 131 272 4 0 0; #X obj 131 247 r attack; #X floatatom 216 272 4 0 0; #X obj 216 247 r decay; #X floatatom 291 272 4 0 0; #X floatatom 385 272 4 0 0; #X obj 291 247 r sustain; #X obj 385 247 r release; #X obj 509 106 r note; #X msg 510 195 \; trigger 1; #X obj 634 185 del; #X msg 634 210 \; trigger 0; #X obj 9 167 qlist; #X obj 8 6 r qlist; #X msg 30 35 bang; #X msg 30 60 rewind; #X obj 37 89 r tempo; #X floatatom 37 114 4 0 0; #X msg 37 139 tempo \$1; #X obj 509 156 t b f; #X obj 564 157 s pitch; #X obj 656 120 r duration; #X floatatom 656 145 4 0 0; #X floatatom 509 131 4 0 0; #X obj 289 320 r trigger; #X floatatom 315 376 4 0 0; #X floatatom 387 406 4 0 0; #X floatatom 477 406 4 0 0; #X floatatom 563 406 4 0 0; #X floatatom 659 406 4 0 0; #X obj 315 351 r level2; #X obj 387 381 r attack2; #X obj 477 381 r decay2; #X obj 563 381 r sustain2; #X obj 659 381 r release2; #X obj 80 435 tabosc4~ array1; #X floatatom 239 366 4 0 0; #X obj 33 482 vcf~; #X floatatom 140 488 4 0 0; #X obj 140 463 r q; #X obj 33 306 adsr 0 0 0 0 0; #X obj 289 444 adsr 0 0 0 0 0; #X obj 315 401 / 69.23; #X obj 239 391 mtof; #X obj 239 416 sqrt; #X obj 239 441 sqrt; #X obj 197 336 r filter; #X obj 240 494 *~; #X obj 240 519 *~; #X obj 289 469 +~ 1; #X obj 239 466 *~; #X text 139 215 ADSR for amplitude:; #X text 402 300 ADSR for filter. Here \, I thought it better to make the envelope modify a constant "filter pitch"--so the "filter" receive gets the "mtof" treatment and the ADSR is an offset in halftones (thus the "/ 69.23" as compared to the previous patch.); #X text 141 5 USING QLIST TO MAKE SEQUENCES OF "NOTES"; #N canvas -10 258 703 380 otherstuff 0; #X obj 289 86 loadbang; #X obj 418 85 loadbang; #X graph graph2 0 -1 66 1 62 221 262 81; #X array array1 67 float 1; #A 0 0 0 0 0 0.714286 0.742857 0.757143 0.771429 0.778571 0.785714 0.785714 0.785714 0.785714 0.790476 0.795238 0.614286 0.585714 0.442857 0.271429 -0.128571 -0.142857 -0.157143 -0.171429 -0.642857 -0.528571 -0.614286 -0.685714 -0.828571 -0.828571 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.557143 0.571429 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; #X pop; #X msg 418 115 \; qlist read qlist2.txt; #X msg 289 111 \; level 100 \; attack 20 \; decay 300 \; sustain 70 \; release 300 \; duration 300 \; pitch 72 \; filter 38 \; level2 49 \; attack2 19 \; decay2 300 \; sustain2 17 \; release2 700 \; q 3 \; tempo 1; #X connect 0 0 4 0; #X connect 1 0 3 0; #X restore 32 571 pd otherstuff; #X text 82 34 <--start loop; #X text 99 62 <--stop loop; #X text 85 114 <--set tempo; #X text 248 34 The qlist reads the file \, "qlist2.txt" \, which contains four "note" messages and a message at the end that restarts the qlist at the beginning. The "note" messages are translated into a pitch change and triggers for the ADSRs:; #X text 694 573 updated for Pd version 0.34; #X text 155 573 <--loadbangs and table; #X msg 468 518 \; qlist read qlist2.txt; #X text 462 494 click to reload qlist2.txt; #X text 149 521 <--output; #X connect 0 0 53 0; #X connect 1 0 2 1; #X connect 2 0 1 0; #X connect 3 0 2 2; #X connect 4 0 50 0; #X connect 5 0 6 0; #X connect 5 0 6 1; #X connect 6 0 7 0; #X connect 6 0 7 1; #X connect 7 0 4 0; #X connect 8 0 10 0; #X connect 9 0 48 0; #X connect 10 0 9 0; #X connect 11 0 53 1; #X connect 12 0 11 0; #X connect 13 0 53 2; #X connect 14 0 13 0; #X connect 15 0 53 3; #X connect 16 0 15 0; #X connect 17 0 53 4; #X connect 18 0 53 5; #X connect 19 0 17 0; #X connect 20 0 18 0; #X connect 21 0 36 0; #X connect 23 0 24 0; #X connect 26 0 25 0; #X connect 27 0 25 0; #X connect 28 0 25 0; #X connect 29 0 30 0; #X connect 30 0 31 0; #X connect 31 0 25 0; #X connect 32 0 23 0; #X connect 32 0 22 0; #X connect 32 1 33 0; #X connect 34 0 35 0; #X connect 35 0 23 1; #X connect 36 0 32 0; #X connect 37 0 54 0; #X connect 38 0 55 0; #X connect 39 0 54 2; #X connect 40 0 54 3; #X connect 41 0 54 4; #X connect 42 0 54 5; #X connect 43 0 38 0; #X connect 44 0 39 0; #X connect 45 0 40 0; #X connect 46 0 41 0; #X connect 47 0 42 0; #X connect 48 0 4 1; #X connect 49 0 56 0; #X connect 50 0 2 0; #X connect 51 0 50 2; #X connect 52 0 51 0; #X connect 53 0 5 0; #X connect 54 0 62 0; #X connect 55 0 54 1; #X connect 56 0 57 0; #X connect 57 0 58 0; #X connect 58 0 63 0; #X connect 59 0 49 0; #X connect 60 0 61 0; #X connect 60 0 61 1; #X connect 61 0 50 1; #X connect 62 0 63 1; #X connect 63 0 60 0; #X connect 63 0 60 1;