#N canvas 0 49 1022 973 10; #X declare -lib moonlib; #N canvas 0 49 830 973 constroi_teclado 0; #X obj 62 204 counter; #X obj 62 140 t b b; #X msg 448 670 \; pd-Exemplo_Pitagoras.pd obj 846 100 tgl 15 0 s48 r48 C 5 22 0 10 -262144 -1 -1 0 1 \;; #X obj 421 156 import moonlib; #X obj 136 414 f2char; #X msg 445 1142 \; pd-osciladores obj 7220 10 r freq48 \; pd-osciladores obj 7220 40 osc~ \; pd-osciladores obj 7220 70 *~ \; pd-osciladores obj 7220 100 throw~ saida \; pd-osciladores obj 7280 10 r s48 \; pd-osciladores obj 7280 40 / 48 \; pd-osciladores connect 288 0 289 0 \; pd-osciladores connect 289 0 290 0 \; pd-osciladores connect 290 0 291 0 \; pd-osciladores connect 292 0 293 0 \; pd-osciladores connect 293 0 290 1 \;; #X obj 62 239 t f f; #X msg 447 757 \; pd-Exemplo_Pitagoras.pd obj 846 83 tgl 15 0 s48 r48 empty 0 0 0 10 -1 -262144 -1 0 1 \;; #X obj 89 749 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 89 691 expr $f1%12; #X obj 104 471 pack 0 0 s; #X text 59 8 Este patch constroi o teclado e o banco de osciladores senoidais. Cuidado ao usa-lo \, pois voce podera acabar duplicando essas estruturas que ja' estao salvas no patch principal. Para ver como funciona \, apague manualmente todos os osciladores do subpatch "osciladores" e tambem todos os toggles que formam o teclado no patch principal \; em seguida crie um "bang" (Ctrl-Shift-B) neste patch \, conecte-o `a entrada do objeto [t b b] abaixo e acione o mecanismo. ; #X text 420 122 O objeto f2char utilizado abaixo depende da biblioteca moonlib; #X text 103 139 inicializa e dispara contador de 0 a 48; #X text 165 297 inicializa a mensagem de criacao de tecla; #X text 372 389 calcula a letra que representa a nota; #X text 201 441 calcula a posicao horizontal da tecla; #X text 176 471 (posicao horizontal \, indice da nota \, letra); #X obj 447 731 r mensagem2; #X obj 448 642 r mensagem1; #X msg 166 316 \; mensagem1 set \; mensagem2 set \; mensagem1 addsemi \; mensagem2 addsemi \;; #X obj 170 777 s mensagem1; #X obj 89 777 s mensagem2; #X obj 170 749 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 104 500 t l l; #X text 149 499 cria as mensagens de criacao de objetos; #X text 482 538 teclas pretas; #X text 449 592 teclas brancas; #X text 527 641 As duas mensagens abaixo sao criadas dinamicamente ; #X text 95 642 indices correspondentes `as teclas pretas acionam o envio da mensagem2 \, enquanto os demais acionam o envio da mensagem1. ; #X text 78 836 A segunda parte deste subpatch cria o banco de osciladores senoidais pareados com os toggles criados (atraves de sends de nome s0 \, s1 \, ... \, s48); #X text 104 239 separa o processamento em duas partes: criacao das teclas (imediatamente abaixo) e criacao dos osciladores (segunda metade deste subpatch); #X obj 445 1115 r mensagem3; #X text 526 1114 A mensagem abaixo e´ criada dinamicamente; #X obj 89 286 t f f f f b; #X msg 190 912 \; mensagem3 set \; mensagem3 addsemi \;; #X text 191 890 inicializa a mensagem de criacao de oscilador; #X obj 62 895 t f b; #X text 61 1287 Abaixo esta´ um template para entender melhor os objetos criados automaticamente no patch osciladores:; #X obj 63 1387 osc~; #X obj 63 1431 *~; #X obj 63 1461 throw~ saida; #X obj 63 1347 r freq\$3; #X obj 221 1349 r s\$3; #X text 218 1325 posicao \$2; #X text 60 1323 posicao \$1; #X text 257 1360 recebe o toggle (liga/deslida) da tecla; #X text 73 1363 recebe a frequencia; #X text 175 1430 (ajusta o volume); #X text 225 1459 (soma o sinal na saida); #X obj 221 1386 / 48; #X text 255 1393 recebe o toggle (liga/deslida) da tecla; #X text 123 1347 objeto # \$4; #X text 95 1386 objeto # \$5; #X text 95 1429 objeto # \$6; #X text 144 1460 objeto # \$7; #X text 258 1349 objeto # \$8; #X text 256 1382 objeto # \$9; #X msg 62 1113 \; mensagem3 add pd-osciladores obj \$1 10 r freq\$3 \; mensagem3 add pd-osciladores obj \$1 40 osc~ \; mensagem3 add pd-osciladores obj \$1 70 *~ \; mensagem3 add pd-osciladores obj \$1 100 throw~ saida \; mensagem3 add pd-osciladores obj \$2 10 r s\$3 \; mensagem3 add pd-osciladores obj \$2 40 / 48 \; mensagem3 add pd-osciladores connect \$4 0 \$5 0 \; mensagem3 add pd-osciladores connect \$5 0 \$6 0 \; mensagem3 add pd-osciladores connect \$6 0 \$7 0 \; mensagem3 add pd-osciladores connect \$8 0 \$9 0 \; mensagem3 add pd-osciladores connect \$9 0 \$6 1 \; mensagem3 bang \;; #X text 204 1036 (posicao horizontal dos objetos \, posicao horizontal do objeto [r sN] \, indice da tecla correspondente \, indice do objeto [r freqN] \, indice do objeto [osc~] \, indice do objeto [*~] \, indice do objeto [throw~] \, indice do objeto [r sN] \, indice do objeto [/ 48]); #X obj 62 1067 pack 0 0 0 0 0 0 0 0 0; #X obj 104 440 expr 30+17*$f1; #X msg 104 579 \; mensagem1 add pd-Exemplo_Pitagoras.pd obj \$1 100 tgl 15 0 s\$2 r\$2 \$3 5 22 0 10 -262144 -1 -1 0 1 \;; #X msg 131 525 \; mensagem2 add pd-Exemplo_Pitagoras.pd obj \$1 83 tgl 15 0 s\$2 r\$2 empty 0 0 0 10 -1 -262144 -1 0 1 \;; #X obj 62 926 expr 20+150*$f1 \; 80+150*$f1 \; $f1 \; 6*$f1 \; 6*$f1+1 \; 6*$f1+2 \; 6*$f1+3 \; 6*$f1+4 \; 6*$f1+5; #X obj 89 718 sel 1 3 6 8 10; #X obj 62 171 uzi 49; #X obj 136 390 expr 65+(2+int((($f1)%12)*7/12+0.5))%7; #X connect 0 0 6 0; #X connect 1 0 66 0; #X connect 1 1 0 2; #X connect 4 0 10 2; #X connect 6 0 37 0; #X connect 6 1 34 0; #X connect 8 0 22 0; #X connect 9 0 65 0; #X connect 10 0 24 0; #X connect 18 0 7 0; #X connect 19 0 2 0; #X connect 23 0 21 0; #X connect 24 0 62 0; #X connect 24 1 63 0; #X connect 32 0 5 0; #X connect 34 0 9 0; #X connect 34 1 61 0; #X connect 34 2 10 1; #X connect 34 3 67 0; #X connect 34 4 20 0; #X connect 37 0 64 0; #X connect 37 1 35 0; #X connect 39 0 40 0; #X connect 40 0 41 0; #X connect 42 0 39 0; #X connect 43 0 50 0; #X connect 50 0 40 1; #X connect 60 0 58 0; #X connect 61 0 10 0; #X connect 64 0 60 0; #X connect 64 1 60 1; #X connect 64 2 60 2; #X connect 64 3 60 3; #X connect 64 4 60 4; #X connect 64 5 60 5; #X connect 64 6 60 6; #X connect 64 7 60 7; #X connect 64 8 60 8; #X connect 65 0 8 0; #X connect 65 1 8 0; #X connect 65 2 8 0; #X connect 65 3 8 0; #X connect 65 4 8 0; #X connect 65 5 23 0; #X connect 66 0 0 0; #X connect 67 0 4 0; #X restore 300 479 pd constroi_teclado; #N canvas 0 49 830 973 osciladores 0; #X obj 20 10 r freq0; #X obj 20 40 osc~; #X obj 20 70 *~; #X obj 20 100 throw~ saida; #X obj 80 10 r s0; #X obj 80 40 / 48; #X obj 170 10 r freq1; #X obj 170 40 osc~; #X obj 170 70 *~; #X obj 170 100 throw~ saida; #X obj 230 10 r s1; #X obj 230 40 / 48; #X obj 320 10 r freq2; #X obj 320 40 osc~; #X obj 320 70 *~; #X obj 320 100 throw~ saida; #X obj 380 10 r s2; #X obj 380 40 / 48; #X obj 470 10 r freq3; #X obj 470 40 osc~; #X obj 470 70 *~; #X obj 470 100 throw~ saida; #X obj 530 10 r s3; #X obj 530 40 / 48; #X obj 620 10 r freq4; #X obj 620 40 osc~; #X obj 620 70 *~; #X obj 620 100 throw~ saida; #X obj 680 10 r s4; #X obj 680 40 / 48; #X obj 770 10 r freq5; #X obj 770 40 osc~; #X obj 770 70 *~; #X obj 770 100 throw~ saida; #X obj 830 10 r s5; #X obj 830 40 / 48; #X obj 920 10 r freq6; #X obj 920 40 osc~; #X obj 920 70 *~; #X obj 920 100 throw~ saida; #X obj 980 10 r s6; #X obj 980 40 / 48; #X obj 1070 10 r freq7; #X obj 1070 40 osc~; #X obj 1070 70 *~; #X obj 1070 100 throw~ saida; #X obj 1130 10 r s7; #X obj 1130 40 / 48; #X obj 1220 10 r freq8; #X obj 1220 40 osc~; #X obj 1220 70 *~; #X obj 1220 100 throw~ saida; #X obj 1280 10 r s8; #X obj 1280 40 / 48; #X obj 1370 10 r freq9; #X obj 1370 40 osc~; #X obj 1370 70 *~; #X obj 1370 100 throw~ saida; #X obj 1430 10 r s9; #X obj 1430 40 / 48; #X obj 1520 10 r freq10; #X obj 1520 40 osc~; #X obj 1520 70 *~; #X obj 1520 100 throw~ saida; #X obj 1580 10 r s10; #X obj 1580 40 / 48; #X obj 1670 10 r freq11; #X obj 1670 40 osc~; #X obj 1670 70 *~; #X obj 1670 100 throw~ saida; #X obj 1730 10 r s11; #X obj 1730 40 / 48; #X obj 1820 10 r freq12; #X obj 1820 40 osc~; #X obj 1820 70 *~; #X obj 1820 100 throw~ saida; #X obj 1880 10 r s12; #X obj 1880 40 / 48; #X obj 1970 10 r freq13; #X obj 1970 40 osc~; #X obj 1970 70 *~; #X obj 1970 100 throw~ saida; #X obj 2030 10 r s13; #X obj 2030 40 / 48; #X obj 2120 10 r freq14; #X obj 2120 40 osc~; #X obj 2120 70 *~; #X obj 2120 100 throw~ saida; #X obj 2180 10 r s14; #X obj 2180 40 / 48; #X obj 2270 10 r freq15; #X obj 2270 40 osc~; #X obj 2270 70 *~; #X obj 2270 100 throw~ saida; #X obj 2330 10 r s15; #X obj 2330 40 / 48; #X obj 2420 10 r freq16; #X obj 2420 40 osc~; #X obj 2420 70 *~; #X obj 2420 100 throw~ saida; #X obj 2480 10 r s16; #X obj 2480 40 / 48; #X obj 2570 10 r freq17; #X obj 2570 40 osc~; #X obj 2570 70 *~; #X obj 2570 100 throw~ saida; #X obj 2630 10 r s17; #X obj 2630 40 / 48; #X obj 2720 10 r freq18; #X obj 2720 40 osc~; #X obj 2720 70 *~; #X obj 2720 100 throw~ saida; #X obj 2780 10 r s18; #X obj 2780 40 / 48; #X obj 2870 10 r freq19; #X obj 2870 40 osc~; #X obj 2870 70 *~; #X obj 2870 100 throw~ saida; #X obj 2930 10 r s19; #X obj 2930 40 / 48; #X obj 3020 10 r freq20; #X obj 3020 40 osc~; #X obj 3020 70 *~; #X obj 3020 100 throw~ saida; #X obj 3080 10 r s20; #X obj 3080 40 / 48; #X obj 3170 10 r freq21; #X obj 3170 40 osc~; #X obj 3170 70 *~; #X obj 3170 100 throw~ saida; #X obj 3230 10 r s21; #X obj 3230 40 / 48; #X obj 3320 10 r freq22; #X obj 3320 40 osc~; #X obj 3320 70 *~; #X obj 3320 100 throw~ saida; #X obj 3380 10 r s22; #X obj 3380 40 / 48; #X obj 3470 10 r freq23; #X obj 3470 40 osc~; #X obj 3470 70 *~; #X obj 3470 100 throw~ saida; #X obj 3530 10 r s23; #X obj 3530 40 / 48; #X obj 3620 10 r freq24; #X obj 3620 40 osc~; #X obj 3620 70 *~; #X obj 3620 100 throw~ saida; #X obj 3680 10 r s24; #X obj 3680 40 / 48; #X obj 3770 10 r freq25; #X obj 3770 40 osc~; #X obj 3770 70 *~; #X obj 3770 100 throw~ saida; #X obj 3830 10 r s25; #X obj 3830 40 / 48; #X obj 3920 10 r freq26; #X obj 3920 40 osc~; #X obj 3920 70 *~; #X obj 3920 100 throw~ saida; #X obj 3980 10 r s26; #X obj 3980 40 / 48; #X obj 4070 10 r freq27; #X obj 4070 40 osc~; #X obj 4070 70 *~; #X obj 4070 100 throw~ saida; #X obj 4130 10 r s27; #X obj 4130 40 / 48; #X obj 4220 10 r freq28; #X obj 4220 40 osc~; #X obj 4220 70 *~; #X obj 4220 100 throw~ saida; #X obj 4280 10 r s28; #X obj 4280 40 / 48; #X obj 4370 10 r freq29; #X obj 4370 40 osc~; #X obj 4370 70 *~; #X obj 4370 100 throw~ saida; #X obj 4430 10 r s29; #X obj 4430 40 / 48; #X obj 4520 10 r freq30; #X obj 4520 40 osc~; #X obj 4520 70 *~; #X obj 4520 100 throw~ saida; #X obj 4580 10 r s30; #X obj 4580 40 / 48; #X obj 4670 10 r freq31; #X obj 4670 40 osc~; #X obj 4670 70 *~; #X obj 4670 100 throw~ saida; #X obj 4730 10 r s31; #X obj 4730 40 / 48; #X obj 4820 10 r freq32; #X obj 4820 40 osc~; #X obj 4820 70 *~; #X obj 4820 100 throw~ saida; #X obj 4880 10 r s32; #X obj 4880 40 / 48; #X obj 4970 10 r freq33; #X obj 4970 40 osc~; #X obj 4970 70 *~; #X obj 4970 100 throw~ saida; #X obj 5030 10 r s33; #X obj 5030 40 / 48; #X obj 5120 10 r freq34; #X obj 5120 40 osc~; #X obj 5120 70 *~; #X obj 5120 100 throw~ saida; #X obj 5180 10 r s34; #X obj 5180 40 / 48; #X obj 5270 10 r freq35; #X obj 5270 40 osc~; #X obj 5270 70 *~; #X obj 5270 100 throw~ saida; #X obj 5330 10 r s35; #X obj 5330 40 / 48; #X obj 5420 10 r freq36; #X obj 5420 40 osc~; #X obj 5420 70 *~; #X obj 5420 100 throw~ saida; #X obj 5480 10 r s36; #X obj 5480 40 / 48; #X obj 5570 10 r freq37; #X obj 5570 40 osc~; #X obj 5570 70 *~; #X obj 5570 100 throw~ saida; #X obj 5630 10 r s37; #X obj 5630 40 / 48; #X obj 5720 10 r freq38; #X obj 5720 40 osc~; #X obj 5720 70 *~; #X obj 5720 100 throw~ saida; #X obj 5780 10 r s38; #X obj 5780 40 / 48; #X obj 5870 10 r freq39; #X obj 5870 40 osc~; #X obj 5870 70 *~; #X obj 5870 100 throw~ saida; #X obj 5930 10 r s39; #X obj 5930 40 / 48; #X obj 6020 10 r freq40; #X obj 6020 40 osc~; #X obj 6020 70 *~; #X obj 6020 100 throw~ saida; #X obj 6080 10 r s40; #X obj 6080 40 / 48; #X obj 6170 10 r freq41; #X obj 6170 40 osc~; #X obj 6170 70 *~; #X obj 6170 100 throw~ saida; #X obj 6230 10 r s41; #X obj 6230 40 / 48; #X obj 6320 10 r freq42; #X obj 6320 40 osc~; #X obj 6320 70 *~; #X obj 6320 100 throw~ saida; #X obj 6380 10 r s42; #X obj 6380 40 / 48; #X obj 6470 10 r freq43; #X obj 6470 40 osc~; #X obj 6470 70 *~; #X obj 6470 100 throw~ saida; #X obj 6530 10 r s43; #X obj 6530 40 / 48; #X obj 6620 10 r freq44; #X obj 6620 40 osc~; #X obj 6620 70 *~; #X obj 6620 100 throw~ saida; #X obj 6680 10 r s44; #X obj 6680 40 / 48; #X obj 6770 10 r freq45; #X obj 6770 40 osc~; #X obj 6770 70 *~; #X obj 6770 100 throw~ saida; #X obj 6830 10 r s45; #X obj 6830 40 / 48; #X obj 6920 10 r freq46; #X obj 6920 40 osc~; #X obj 6920 70 *~; #X obj 6920 100 throw~ saida; #X obj 6980 10 r s46; #X obj 6980 40 / 48; #X obj 7070 10 r freq47; #X obj 7070 40 osc~; #X obj 7070 70 *~; #X obj 7070 100 throw~ saida; #X obj 7130 10 r s47; #X obj 7130 40 / 48; #X obj 7220 10 r freq48; #X obj 7220 40 osc~; #X obj 7220 70 *~; #X obj 7220 100 throw~ saida; #X obj 7280 10 r s48; #X obj 7280 40 / 48; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 4 0 5 0; #X connect 5 0 2 1; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 10 0 11 0; #X connect 11 0 8 1; #X connect 12 0 13 0; #X connect 13 0 14 0; #X connect 14 0 15 0; #X connect 16 0 17 0; #X connect 17 0 14 1; #X connect 18 0 19 0; #X connect 19 0 20 0; #X connect 20 0 21 0; #X connect 22 0 23 0; #X connect 23 0 20 1; #X connect 24 0 25 0; #X connect 25 0 26 0; #X connect 26 0 27 0; #X connect 28 0 29 0; #X connect 29 0 26 1; #X connect 30 0 31 0; #X connect 31 0 32 0; #X connect 32 0 33 0; #X connect 34 0 35 0; #X connect 35 0 32 1; #X connect 36 0 37 0; #X connect 37 0 38 0; #X connect 38 0 39 0; #X connect 40 0 41 0; #X connect 41 0 38 1; #X connect 42 0 43 0; #X connect 43 0 44 0; #X connect 44 0 45 0; #X connect 46 0 47 0; #X connect 47 0 44 1; #X connect 48 0 49 0; #X connect 49 0 50 0; #X connect 50 0 51 0; #X connect 52 0 53 0; #X connect 53 0 50 1; #X connect 54 0 55 0; #X connect 55 0 56 0; #X connect 56 0 57 0; #X connect 58 0 59 0; #X connect 59 0 56 1; #X connect 60 0 61 0; #X connect 61 0 62 0; #X connect 62 0 63 0; #X connect 64 0 65 0; #X connect 65 0 62 1; #X connect 66 0 67 0; #X connect 67 0 68 0; #X connect 68 0 69 0; #X connect 70 0 71 0; #X connect 71 0 68 1; #X connect 72 0 73 0; #X connect 73 0 74 0; #X connect 74 0 75 0; #X connect 76 0 77 0; #X connect 77 0 74 1; #X connect 78 0 79 0; #X connect 79 0 80 0; #X connect 80 0 81 0; #X connect 82 0 83 0; #X connect 83 0 80 1; #X connect 84 0 85 0; #X connect 85 0 86 0; #X connect 86 0 87 0; #X connect 88 0 89 0; #X connect 89 0 86 1; #X connect 90 0 91 0; #X connect 91 0 92 0; #X connect 92 0 93 0; #X connect 94 0 95 0; #X connect 95 0 92 1; #X connect 96 0 97 0; #X connect 97 0 98 0; #X connect 98 0 99 0; #X connect 100 0 101 0; #X connect 101 0 98 1; #X connect 102 0 103 0; #X connect 103 0 104 0; #X connect 104 0 105 0; #X connect 106 0 107 0; #X connect 107 0 104 1; #X connect 108 0 109 0; #X connect 109 0 110 0; #X connect 110 0 111 0; #X connect 112 0 113 0; #X connect 113 0 110 1; #X connect 114 0 115 0; #X connect 115 0 116 0; #X connect 116 0 117 0; #X connect 118 0 119 0; #X connect 119 0 116 1; #X connect 120 0 121 0; #X connect 121 0 122 0; #X connect 122 0 123 0; #X connect 124 0 125 0; #X connect 125 0 122 1; #X connect 126 0 127 0; #X connect 127 0 128 0; #X connect 128 0 129 0; #X connect 130 0 131 0; #X connect 131 0 128 1; #X connect 132 0 133 0; #X connect 133 0 134 0; #X connect 134 0 135 0; #X connect 136 0 137 0; #X connect 137 0 134 1; #X connect 138 0 139 0; #X connect 139 0 140 0; #X connect 140 0 141 0; #X connect 142 0 143 0; #X connect 143 0 140 1; #X connect 144 0 145 0; #X connect 145 0 146 0; #X connect 146 0 147 0; #X connect 148 0 149 0; #X connect 149 0 146 1; #X connect 150 0 151 0; #X connect 151 0 152 0; #X connect 152 0 153 0; #X connect 154 0 155 0; #X connect 155 0 152 1; #X connect 156 0 157 0; #X connect 157 0 158 0; #X connect 158 0 159 0; #X connect 160 0 161 0; #X connect 161 0 158 1; #X connect 162 0 163 0; #X connect 163 0 164 0; #X connect 164 0 165 0; #X connect 166 0 167 0; #X connect 167 0 164 1; #X connect 168 0 169 0; #X connect 169 0 170 0; #X connect 170 0 171 0; #X connect 172 0 173 0; #X connect 173 0 170 1; #X connect 174 0 175 0; #X connect 175 0 176 0; #X connect 176 0 177 0; #X connect 178 0 179 0; #X connect 179 0 176 1; #X connect 180 0 181 0; #X connect 181 0 182 0; #X connect 182 0 183 0; #X connect 184 0 185 0; #X connect 185 0 182 1; #X connect 186 0 187 0; #X connect 187 0 188 0; #X connect 188 0 189 0; #X connect 190 0 191 0; #X connect 191 0 188 1; #X connect 192 0 193 0; #X connect 193 0 194 0; #X connect 194 0 195 0; #X connect 196 0 197 0; #X connect 197 0 194 1; #X connect 198 0 199 0; #X connect 199 0 200 0; #X connect 200 0 201 0; #X connect 202 0 203 0; #X connect 203 0 200 1; #X connect 204 0 205 0; #X connect 205 0 206 0; #X connect 206 0 207 0; #X connect 208 0 209 0; #X connect 209 0 206 1; #X connect 210 0 211 0; #X connect 211 0 212 0; #X connect 212 0 213 0; #X connect 214 0 215 0; #X connect 215 0 212 1; #X connect 216 0 217 0; #X connect 217 0 218 0; #X connect 218 0 219 0; #X connect 220 0 221 0; #X connect 221 0 218 1; #X connect 222 0 223 0; #X connect 223 0 224 0; #X connect 224 0 225 0; #X connect 226 0 227 0; #X connect 227 0 224 1; #X connect 228 0 229 0; #X connect 229 0 230 0; #X connect 230 0 231 0; #X connect 232 0 233 0; #X connect 233 0 230 1; #X connect 234 0 235 0; #X connect 235 0 236 0; #X connect 236 0 237 0; #X connect 238 0 239 0; #X connect 239 0 236 1; #X connect 240 0 241 0; #X connect 241 0 242 0; #X connect 242 0 243 0; #X connect 244 0 245 0; #X connect 245 0 242 1; #X connect 246 0 247 0; #X connect 247 0 248 0; #X connect 248 0 249 0; #X connect 250 0 251 0; #X connect 251 0 248 1; #X connect 252 0 253 0; #X connect 253 0 254 0; #X connect 254 0 255 0; #X connect 256 0 257 0; #X connect 257 0 254 1; #X connect 258 0 259 0; #X connect 259 0 260 0; #X connect 260 0 261 0; #X connect 262 0 263 0; #X connect 263 0 260 1; #X connect 264 0 265 0; #X connect 265 0 266 0; #X connect 266 0 267 0; #X connect 268 0 269 0; #X connect 269 0 266 1; #X connect 270 0 271 0; #X connect 271 0 272 0; #X connect 272 0 273 0; #X connect 274 0 275 0; #X connect 275 0 272 1; #X connect 276 0 277 0; #X connect 277 0 278 0; #X connect 278 0 279 0; #X connect 280 0 281 0; #X connect 281 0 278 1; #X connect 282 0 283 0; #X connect 283 0 284 0; #X connect 284 0 285 0; #X connect 286 0 287 0; #X connect 287 0 284 1; #X connect 288 0 289 0; #X connect 289 0 290 0; #X connect 290 0 291 0; #X connect 292 0 293 0; #X connect 293 0 290 1; #X restore 300 398 pd osciladores; #N canvas 0 49 1022 973 afina_teclado 0; #X obj 51 122 inlet; #X obj 355 123 inlet; #X text 49 64 para iniciar o ciclo das quintas; #X text 48 45 recebe numero da nota (0=C \, 1=C# \, ...); #X text 351 45 recebe a referencia de afinacao para A4; #X text 350 65 (default A4=440Hz); #X obj 355 153 f 440; #X obj 51 160 f 0; #X text 48 87 (default 0); #X obj 204 121 loadbang; #X obj 78 552 tabwrite frequencias; #X obj 51 373 expr (6*($f1%2)+$f1)%12; #X text 207 373 calcula l (expoente do 3); #X obj 51 395 t f f; #X text 275 424 calcula m (expoente do 2); #X obj 51 454 expr $f3*pow(3 \, $f1)/pow(2 \, $f2); #X obj 51 278 counter; #X obj 51 182 t b b f f; #X obj 196 284 expr $f2*pow(2 \, ($f1-9)/12); #X text 368 275 calcula a frequencia em Hz correspondente; #X obj 78 424 expr int($f1*log(3)/log(2)+$f2); #X obj 78 330 expr ($f1+$f2)%12 \; if ($f1+$f2>=12 \, 1 \, 0); #X obj 51 302 t f f; #X obj 51 208 uzi 12; #X msg 204 154 \; refA4 440 \; refCiclo 0 \;; #X obj 355 183 t b f; #X msg 51 767 \; freq\$1 \$2 \; freq\$3 \$4 \; freq\$5 \$6 \; freq\$7 \$8 \;; #X obj 51 740 pack f f f f f f f f; #X obj 102 497 t f f; #X obj 51 496 t f f; #X text 252 453 expressao da nota correspondente pelo sistema pitagorico (F0*3^l/2^m); #X text 206 551 Escreve a frequencia na tabela; #X text 128 776 Atualiza os osciladores senoidais no subpatch "osciladores" ; #X text 118 615 Calcula os indices e frequencias da nota atual nas 4 oitavas do teclado. Para a nota N=0...1 os indices das teclas correspondentes terao a forma N \, N+12 \, N+24 e N+36 \, e as frequencias serao F0/4 \, F0/2 \, F0 \, 2*F0.; #X obj 51 615 expr $f2 \; $f1/4 \; $f2+12 \; $f1/2 \; $f2+24 \; $f1 \; $f2+36 \; $f1*2; #X text 223 315 calcula a posicao na tabela correspondente `a nota e ajusta o expoente de 2 para as notas mais graves (exemplo: comecando no A=9 para preencher as notas de 0...8 e´ necessario dividir mais uma vez por 2); #X obj 560 686 tabread frequencias; #X msg 560 662 0; #X obj 560 711 * 4; #X obj 560 639 r lastbang; #X obj 67 241 s lastbang; #X text 559 613 Afina o ultimo C do teclado; #X msg 560 736 \; freq48 \$1 \;; #X text 368 288 `a nota do inicio do ciclo das quintas; #X connect 0 0 7 0; #X connect 1 0 6 0; #X connect 6 0 25 0; #X connect 7 0 17 0; #X connect 9 0 24 0; #X connect 11 0 13 0; #X connect 13 0 15 0; #X connect 13 1 20 0; #X connect 15 0 29 0; #X connect 16 0 22 0; #X connect 17 0 23 0; #X connect 17 1 16 2; #X connect 17 2 21 1; #X connect 17 3 18 0; #X connect 18 0 15 2; #X connect 20 0 15 1; #X connect 21 0 28 0; #X connect 21 1 20 1; #X connect 22 0 11 0; #X connect 22 1 21 0; #X connect 23 0 16 0; #X connect 23 1 40 0; #X connect 25 0 7 0; #X connect 25 1 18 1; #X connect 27 0 26 0; #X connect 28 0 34 1; #X connect 28 1 10 1; #X connect 29 0 34 0; #X connect 29 1 10 0; #X connect 34 0 27 0; #X connect 34 1 27 1; #X connect 34 2 27 2; #X connect 34 3 27 3; #X connect 34 4 27 4; #X connect 34 5 27 5; #X connect 34 6 27 6; #X connect 34 7 27 7; #X connect 36 0 38 0; #X connect 37 0 36 0; #X connect 38 0 42 0; #X connect 39 0 37 0; #X restore 31 429 pd afina_teclado; #X obj 31 191 vradio 15 1 0 12 empty refCiclo Inicio_do_Ciclo_das_Quintas 0 -8 0 10 -262144 -1 -1 0; #X floatatom 124 402 5 20 20000 2 Referencia_A4_(em_Hz) refA4 -; #N canvas 0 49 830 973 (subpatch) 0; #X array frequencias 12 float 3; #A 0 261.626 279.382 294.329 314.305 331.12 353.593 372.51 392.438 419.074 441.493 471.458 496.68; #X coords 0 523 12 261 200 140 1 0 0; #X restore 302 222 graph; #X obj 30 498 output~; #X obj 31 464 catch~ saida; #X text 305 366 C; #X text 339 366 D; #X text 354 366 D#; #X text 319 366 C#; #X text 373 366 E; #X text 387 366 F; #X text 401 366 F#; #X text 422 366 G; #X text 436 366 G#; #X text 454 366 A; #X text 469 366 A#; #X text 489 366 B; #X text 502 352 261 Hz; #X text 503 213 523 Hz; #X text 298 420 Este subpatch contem o banco de osciladores independentes para cada tecla do teclado (foi gerado automaticamente pelo mecanismo contido no subpatch "constroi_teclado"); #X text 302 173 A tabela abaixo contem as frequencias geradas pela afinacao Pitagorica na oitava entre C4 e B4; #X text 48 204 C# (C#->G#->D#->A#->...->B->F#); #X text 48 189 C (C->G->D->A->....->A#->F); #X text 48 219 D (D->A->E->B->...->C->G); #X text 48 234 D# (D#->A#->F->C->...->C#->G#); #X text 48 249 E (E->B->F#->C#->...->D->A); #X text 48 265 F (F->C->G->D->...->D#->A#); #X text 48 280 F# (F#->C#->G#->D#->...->E->B); #X text 48 295 G (G->D->A->E->...->F->C); #X text 48 310 G# (G#->D#->A#->E->...->F#->C#); #X text 49 325 A (A->E->B->F#->...->G->D); #X text 49 340 A# (A#->F->C->G->...->G#->D#); #X text 49 355 B (B->F#->C#->G#->...->A->E); #X text 26 23 TECLADO PITAGORICO; #X obj 30 100 tgl 15 0 s0 r0 C 5 22 0 10 -262144 -1 -1 0 1; #X obj 47 83 tgl 15 0 s1 r1 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 64 100 tgl 15 0 s2 r2 D 5 22 0 10 -262144 -1 -1 0 1; #X obj 81 83 tgl 15 0 s3 r3 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 98 100 tgl 15 0 s4 r4 E 5 22 0 10 -262144 -1 -1 0 1; #X obj 115 100 tgl 15 0 s5 r5 F 5 22 0 10 -262144 -1 -1 0 1; #X obj 132 83 tgl 15 0 s6 r6 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 149 100 tgl 15 0 s7 r7 G 5 22 0 10 -262144 -1 -1 0 1; #X obj 166 83 tgl 15 0 s8 r8 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 183 100 tgl 15 0 s9 r9 A 5 22 0 10 -262144 -1 -1 0 1; #X obj 200 83 tgl 15 0 s10 r10 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 217 100 tgl 15 0 s11 r11 B 5 22 0 10 -262144 -1 -1 0 1; #X obj 234 100 tgl 15 0 s12 r12 C 5 22 0 10 -262144 -1 -1 0 1; #X obj 251 83 tgl 15 0 s13 r13 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 268 100 tgl 15 0 s14 r14 D 5 22 0 10 -262144 -1 -1 0 1; #X obj 285 83 tgl 15 0 s15 r15 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 302 100 tgl 15 0 s16 r16 E 5 22 0 10 -262144 -1 -1 0 1; #X obj 319 100 tgl 15 0 s17 r17 F 5 22 0 10 -262144 -1 -1 0 1; #X obj 336 83 tgl 15 0 s18 r18 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 353 100 tgl 15 0 s19 r19 G 5 22 0 10 -262144 -1 -1 0 1; #X obj 370 83 tgl 15 0 s20 r20 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 387 100 tgl 15 0 s21 r21 A 5 22 0 10 -262144 -1 -1 0 1; #X obj 404 83 tgl 15 0 s22 r22 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 421 100 tgl 15 0 s23 r23 B 5 22 0 10 -262144 -1 -1 0 1; #X obj 438 100 tgl 15 0 s24 r24 C 5 22 0 10 -262144 -1 -1 0 1; #X obj 455 83 tgl 15 0 s25 r25 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 472 100 tgl 15 0 s26 r26 D 5 22 0 10 -262144 -1 -1 0 1; #X obj 489 83 tgl 15 0 s27 r27 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 506 100 tgl 15 0 s28 r28 E 5 22 0 10 -262144 -1 -1 0 1; #X obj 523 100 tgl 15 0 s29 r29 F 5 22 0 10 -262144 -1 -1 0 1; #X obj 540 83 tgl 15 0 s30 r30 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 557 100 tgl 15 0 s31 r31 G 5 22 0 10 -262144 -1 -1 0 1; #X obj 574 83 tgl 15 0 s32 r32 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 591 100 tgl 15 0 s33 r33 A 5 22 0 10 -262144 -1 -1 0 1; #X obj 608 83 tgl 15 0 s34 r34 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 625 100 tgl 15 0 s35 r35 B 5 22 0 10 -262144 -1 -1 0 1; #X obj 642 100 tgl 15 0 s36 r36 C 5 22 0 10 -262144 -1 -1 0 1; #X obj 659 83 tgl 15 0 s37 r37 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 676 100 tgl 15 0 s38 r38 D 5 22 0 10 -262144 -1 -1 0 1; #X obj 693 83 tgl 15 0 s39 r39 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 710 100 tgl 15 0 s40 r40 E 5 22 0 10 -262144 -1 -1 0 1; #X obj 727 100 tgl 15 0 s41 r41 F 5 22 0 10 -262144 -1 -1 0 1; #X obj 744 83 tgl 15 0 s42 r42 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 761 100 tgl 15 0 s43 r43 G 5 22 0 10 -262144 -1 -1 0 1; #X obj 778 83 tgl 15 0 s44 r44 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 795 100 tgl 15 0 s45 r45 A 5 22 0 10 -262144 -1 -1 0 1; #X obj 812 83 tgl 15 0 s46 r46 empty 0 0 0 10 -1 -262144 -1 0 1; #X obj 829 100 tgl 15 0 s47 r47 B 5 22 0 10 -262144 -1 -1 0 1; #X obj 846 100 tgl 15 0 s48 r48 C 5 22 0 10 -262144 -1 -1 0 1; #X msg 30 705 \; refA4 440 \; refCiclo 0 \; r17 1 \; r24 1 \;; #X text 243 686 desliga:; #X msg 246 705 \; r17 0 \; r24 0 \;; #X text 27 623 Quinta "do lobo" - intervalo entre a penultima nota do ciclo de quintas e a nota do inicio do ciclo \, a unica quinta que nao tem a proporcao 3/2 = 1.5 (e sim 2^18/3^11 = 1.14798):; #X text 644 689 desliga:; #X msg 431 708 \; refA4 440 \; refCiclo 0 \; r24 1 \; r28 1 \;; #X msg 647 708 \; r24 0 \; r28 0 \;; #X text 428 689 3a Pitagorica:; #X text 516 689 3a justa:; #X obj 520 730 tabread frequencias; #X msg 520 709 0; #X msg 520 788 \; refA4 440 \; refCiclo 0 \; freq28 \$1 \; r24 1 \; r28 1 \;; #X obj 520 751 expr ($f1*1.25); #X text 547 707 clique aqui; #X text 27 686 5a do lobo:; #X obj 119 731 tabread frequencias; #X text 146 703 clique aqui; #X text 115 685 5a justa:; #X msg 119 705 0; #X obj 119 779 expr ($f1/1.5); #X msg 119 804 \; refA4 440 \; refCiclo 0 \; freq17 \$1 \; r17 1 \; r24 1 \;; #X text 29 583 ALGUNS FENOMENOS INTERESSANTES ASSOCIADOS `A AFINACAO PITAGORICA:; #X text 128 759 corrige a frequencia do F3 para C4/1.5; #X text 528 768 corrige a frequencia do E4 para C4*1.25; #X text 822 623 Coma pitagorica: distancia entre a nota de origem do ciclo das quintas e a nota obtida apos 12 iteracoes do ciclo (3^12/2^19 = 1.0136):; #X text 1039 684 desliga:; #X obj 915 756 tabread frequencias; #X text 823 684 Nota inicial:; #X msg 826 703 \; refA4 440 \; refCiclo 0 \; r24 1 \;; #X text 911 684 Coma Pitagorica:; #X obj 915 784 expr ($f1*1.0136); #X obj 915 806 osc~; #X obj 915 850 throw~ saida; #X obj 954 807 tgl 15 0 empty t_coma empty 17 7 0 10 -262144 -1 -1 0 1; #X text 911 698 clique aqui; #X msg 1042 702 \; r24 0 \; t_coma 0 \;; #X msg 915 720 0 \; t_coma 1 \;; #X obj 915 828 *~; #X obj 954 829 / 48; #X text 429 623 Terca Pitagorica - obtida pelo acumulo de quintas \, tem a proporcao 81/32 = 1.2656 \, sensivelmente mais alta do que a terca justa (5/4 = 1.25). A distancia entre essas duas tercas e´ denominada "coma sintonica":; #X text 430 873 Observe como a triade maior soa "aspera" na afinacao Pitagorica:; #X msg 432 911 \; refA4 440 \; refCiclo 0 \; r24 1 \; r28 1 \; r31 1 \;; #X text 751 904 desliga:; #X msg 754 923 \; r24 0 \; r28 0 \; r31 0 \;; #X text 526 905 ... compare-a com a triade justa:; #X msg 596 933 bang \; r31 1 \;; #X text 298 500 Este subpatch constroi o teclado e o banco de osciladores automaticamente. "Dynamic patching" e´ um recurso relativamente avancado do Pd \, este subpatch nao precisa ser usado nem entendido \, so´ esta´ aqui mesmo para ilustrar como esta construcao foi automatizada. ; #X connect 3 0 2 0; #X connect 4 0 2 1; #X connect 7 0 6 0; #X connect 7 0 6 1; #X connect 95 0 98 0; #X connect 96 0 95 0; #X connect 98 0 97 0; #X connect 101 0 105 0; #X connect 104 0 101 0; #X connect 105 0 106 0; #X connect 112 0 116 0; #X connect 116 0 117 0; #X connect 117 0 123 0; #X connect 119 0 124 0; #X connect 122 0 112 0; #X connect 123 0 118 0; #X connect 124 0 123 1; #X connect 131 0 96 0;