#N canvas 262 44 888 674 10;
#X obj 148 387 + 1;
#X obj 102 386 float;
#X obj 117 526 mtof;
#X obj 117 580 osc~;
#X obj 478 351 loadbang;
#X floatatom 268 334 5 200 1000 0 - - -;
#X obj 317 407 spigot;
#X obj 350 383 tgl 15 0 empty empty empty 17 7 0 10 -261234 -1 -1 0
1;
#X text 367 382 Loop;
#X obj 102 326 tgl 25 0 empty metro empty 17 7 0 10 -151553 -262144
-1 0 1;
#X obj 187 398 bng 15 250 50 0 empty empty empty 17 7 0 10 -228856
-1 -1;
#X obj 128 612 *~;
#X obj 121 642 dac~;
#X obj 117 552 t f b;
#X floatatom 153 332 5 200 1000 0 - - -;
#X obj 472 528 tabdump sequencer;
#X obj 472 502 bng 15 250 50 0 empty empty empty 17 7 0 10 -228856
-1 -1;
#X obj 472 552 prepend set;
#X obj 478 286 prepend 0;
#X obj 478 309 s sequencer;
#X obj 478 221 loadbang;
#X msg 472 575 -5.14286 -7.88572 -7.2 -2.4 -7.2 1.2 4.8 4.11429 -2.4
-4.28572 -4.28572 -0.685715 2.22857 6.17143 7.02858 7.02858;
#X text 538 218 envia valores pro sequencer;
#X obj 305 476 v transp;
#X text 493 500 pegar valores do sequencer;
#X obj 587 330 cnv 15 198 138 empty empty empty 20 12 0 14 -261950
-66577 0;
#N canvas 91 30 450 300 (subpatch) 0;
#X array sequencer 16 float 2;
#X coords 0 12 16 -12 200 140 1;
#X restore 586 329 graph;
#X text 192 332 tempo (ms);
#X obj 102 360 metro 500;
#X obj 305 453 nbx 5 14 -1e+37 1e+37 0 0 empty transpos empty 0 -8
0 10 -261682 -1 -1 60 256;
#X obj 187 422 for++ 0 15 500;
#X text 54 27 Um sequencer armazena valores que podem ser usados para
diversas coisas \, mas é comum que seja usado para controlar a frequência
de sintetizadores.;
#X floatatom 187 446 5 0 0 0 - - -;
#X obj 117 478 expr sequencer[$f1] + transp;
#X obj 102 429 mod 16;
#X floatatom 102 450 5 0 0 0 - - -;
#X floatatom 102 408 5 0 0 0 - - -;
#X text 233 580 envelope;
#X floatatom 117 502 0 0 0 0 - - -;
#X text 56 253 Os valores do contador precisam ser de 0 a 15 \, por
isso temos uma função de módulo (objeto [mod]) para manter os valores
nesse registro.;
#X text 457 39 O [for++] já é um contador em que você seta o registro
(primeiros dois argumentos) e o tempo entre um valor e outro em ms
(terceiro argumento). Ele ainda envia um bang quando acaba de contar
\, que podemos usar para fazer um loop.;
#X text 457 110 Abaixo temos a tabela usada como sequencer \, que recebe
valores de incialização de uma mensagem. Você pode mudar a sequência
direto na tabela com o mouse \, e depois resgatar os novos valores
abaixo com o objeto [tabdump] \, que cospe todos os valores da tabela.
;
#X text 789 457 -12;
#X text 790 325 12;
#X text 55 150 Consultamos o valor da tabela via um [expr] e somamos
com esse valor de transposição \, depois convertemos de MIDI para hertz
com [mtof]. Perceba que estamos usando valores com pontos decimais.
Logo \, fora da escala temperada.;
#X msg 478 245 -5.14286 -7.88572 -7.2 -2.4 -7.2 1.2 4.8 4.11429 -2.4
-4.28572 -4.28572 -0.685715 2.22857 6.17143 7.3 7.1;
#X obj 158 581 ead~ 50 150;
#X msg 478 380 \; pd dsp 1 \; transpos 60;
#X text 36 329 Play/Stop;
#X text 54 78 Uma forma de implementar um sequencer no Pd é armazenar
valores em uma tabela. Neste exemplo \, guardamos valores de -12 a
12 \, que serão interpretados como intervalos em semitons. O ponto
de transposição dá a nota de base \, que setamos \, por padrão \, em
60 (ó central em MIDI).;
#X text 55 208 Temos aqui duas maneiras de sequenciar a leitura da
tabela. A mais comum é com um contador que funciona a partir de um
[metro] \, mas temos ainda uma outra forma com [for++].;
#X connect 0 0 1 1;
#X connect 1 0 0 0;
#X connect 1 0 36 0;
#X connect 2 0 13 0;
#X connect 3 0 11 0;
#X connect 4 0 47 0;
#X connect 5 0 30 2;
#X connect 6 0 10 0;
#X connect 7 0 6 1;
#X connect 9 0 28 0;
#X connect 10 0 30 0;
#X connect 11 0 12 0;
#X connect 11 0 12 1;
#X connect 13 0 3 0;
#X connect 13 1 46 0;
#X connect 14 0 28 1;
#X connect 15 0 17 0;
#X connect 16 0 15 0;
#X connect 17 0 21 0;
#X connect 18 0 19 0;
#X connect 20 0 45 0;
#X connect 28 0 1 0;
#X connect 29 0 23 0;
#X connect 30 0 32 0;
#X connect 30 1 6 0;
#X connect 32 0 33 0;
#X connect 33 0 38 0;
#X connect 34 0 35 0;
#X connect 35 0 33 0;
#X connect 36 0 34 0;
#X connect 38 0 2 0;
#X connect 45 0 18 0;
#X connect 46 0 11 1;
