#N canvas 51 47 1276 663 10;
#X obj 262 381 table \$0-buffer;
#X obj 170 372 soundfiler;
#X obj 170 314 list append \$0-buffer;
#X obj 170 288 loadbang;
#X obj 577 504 phasor~;
#X obj 577 556 tabread4~ \$0-buffer;
#X obj 260 575 v Hz_\$0;
#X obj 577 531 expr~ $v1 * size_\$0;
#X obj 577 403 nbx 5 18 -1e+37 1e+37 0 0 empty tempo empty 0 -8 0 13
-261234 -1 -1 100 256;
#X floatatom 184 397 0 0 0 0 - - -;
#X floatatom 260 549 0 0 0 0 - - -;
#X obj 170 494 samplerate~;
#X obj 260 525 /;
#X obj 170 469 trigger bang float;
#X obj 625 581 hsl 128 15 0 1 0 0 empty ganho empty -2 -8 0 10 -204786
-1 -1 7620 1;
#N canvas 0 22 450 300 ganho 0;
#X obj 206 206 *~;
#X obj 225 175 line~;
#X msg 225 149 \$1 10;
#X obj 225 113 pow 4;
#X obj 190 245 dac~;
#X obj 226 60 inlet;
#X obj 177 60 inlet~;
#X connect 0 0 4 0;
#X connect 0 0 4 1;
#X connect 1 0 0 1;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X connect 5 0 3 0;
#X connect 6 0 0 0;
#X restore 577 603 pd ganho;
#X obj 761 439 bng 25 250 50 0 empty empty empty 17 7 0 10 -228856
-1 -1;
#X obj 577 314 metro;
#X obj 577 379 line;
#X obj 577 275 tgl 30 0 empty empty empty 17 7 0 10 -262130 -1 -1 0
1;
#X floatatom 761 516 0 0 0 0 - - -;
#X obj 196 420 s \$0-size;
#X obj 794 444 r \$0-size;
#X obj 761 470 random;
#X obj 761 493 /;
#X text 120 549 Frequência de leitura:;
#X obj 30 285 openpanel;
#X obj 30 308 list append \$0-buffer;
#X msg 30 332 read -resize \$1 \$2;
#X obj 30 255 bng 25 250 50 0 empty empty empty 17 7 0 10 -262130 -1
-1;
#X obj 893 527 tabread4~ \$0-buffer;
#X obj 893 503 line~;
#X text 43 73 Para definir a frequência do [phasor~] \, basta dividir
a taxa de amostragem pelo tamanho da tabela como abaixo.;
#X text 45 191 A fase do [phasor~] pode ser usada para pular para um
ponto específico de leitura.;
#X obj 170 523 v sr;
#X obj 337 428 loadbang;
#X text 59 259 Escolher arquivo;
#X text 648 405 Velocidade (%);
#X obj 970 171 r \$0-size;
#X obj 937 205 random;
#X obj 893 205 random;
#X obj 893 146 bng 25 250 50 0 empty empty empty 17 7 0 10 -171370
-1 -1;
#X obj 893 181 t b b;
#X floatatom 1022 284 0 0 0 0 - - -;
#X floatatom 1022 340 0 0 0 0 - - -;
#X obj 1022 310 expr ($f1 / sr) * 1000;
#X obj 1099 339 nbx 5 18 -1e+37 1e+37 0 0 empty tempo empty 0 -8 0
13 -261234 -1 -1 100 256;
#X floatatom 1022 400 0 0 0 0 - - -;
#X obj 893 428 pack float float float;
#X msg 893 455 \$1 \, \$2 \$3;
#X obj 893 232 expr $f1 \; $f2 \; abs($f1 - $f2);
#X text 961 285 diferença;
#X text 1004 339 ms;
#X text 1171 339 Velocidade;
#X floatatom 893 401 0 0 0 0 - - -;
#X floatatom 957 401 0 0 0 0 - - -;
#X text 1002 399 ms;
#X obj 1022 371 /;
#X obj 1099 364 / 100;
#X obj 941 558 hsl 128 15 0 1 0 0 empty ganho empty -2 -8 0 10 -204786
-1 -1 7620 1;
#N canvas 0 22 450 300 ganho 0;
#X obj 206 206 *~;
#X obj 225 175 line~;
#X msg 225 149 \$1 10;
#X obj 225 113 pow 4;
#X obj 190 245 dac~;
#X obj 226 60 inlet;
#X obj 177 60 inlet~;
#X connect 0 0 4 0;
#X connect 0 0 4 1;
#X connect 1 0 0 1;
#X connect 2 0 1 0;
#X connect 3 0 2 0;
#X connect 5 0 3 0;
#X connect 6 0 0 0;
#X restore 893 584 pd ganho;
#X msg 337 450 \; tempo 100 \; ganho 0.6 \; pd dsp 1;
#X obj 577 426 / 100;
#X obj 577 473 expr~ Hz_\$0 * $v1;
#X obj 432 350 nbx 5 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 13
-261682 -1 -1 0 256;
#X obj 577 453 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-228856 -1 -1 1 256;
#X obj 432 377 expr pow(2 \, $f1/1200);
#X text 503 351 Cents;
#X obj 1100 388 nbx 5 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0
13 -261682 -1 -1 0 256;
#X obj 1100 415 expr pow(2 \, $f1/1200);
#X text 1173 387 Cents;
#X text 535 452 Razão;
#X text 44 107 A velocidade de leitura aqui é dada em porcentagem \,
basta dividir esse valor por 100 para obter uma razão \, a ser multiplicada
pela frequência de leitura. Temos também um controle de transposição
em cents \, que converte pra razão. Valores negativos de velocidade
(ou razão) lê a tabela no sentido oposto.;
#X text 681 436 fase/posição;
#X text 698 449 aleatória;
#X text 616 280 Velocidades aleatórias;
#X text 122 566 Taxa de Amostragem;
#X text 122 583 Dividida pelo Tamnho;
#X text 154 599 da tabela;
#X obj 184 443 value size_\$0;
#X text 456 191 O [phasor~] pode ser interrompido com uma frequência
de 0 Hz. Mas \, por sua natureza cíclica \, ele é conveniente para
ler uma tabela (ou trecho) em loop constante \, além de mudar a velocidade/frequência
de leitura de forma imediata.;
#X msg 911 481 stop;
#X text 946 481 congela no valor atual;
#X text 869 23 No patch abaixo usamos o [line~] para realizar a leitura.
Sorteamos uma amostra para o início e outra de chegada \, pegamos a
diferença absoluta e calculamos seu tempo em ms. Por fim \, temos um
ajuste desse tempo de acordo com um parâmetro de velocidade em porcentagem
ou em cents.;
#X text 868 96 A diferença em usar o [line~] (ou [vline~] é que a velocidade
de leitura é constante por comando.;
#X obj 577 340 expr random(60 \, 120) \; random(700 \, 1700);
#X msg 170 343 read -resize ../samples/violin.wav \$1;
#X text 449 12 Erro de interpolação:;
#X text 451 139 No caso de tocar arquivos que foram gravados a 44.1
KHz \, um bom programa para ressamplear e dobrar a taxa de amostragem
pode ser bemvindo \, e só isso já reduz bastante o erro.;
#X text 449 32 A interpolação sempre altera um pouco o sinal original
\, e pode introduzir alguns artefatos como aliasing. Para reduzir com
eficiência o erro \, os preciosistas podem trabalhar com taxas de amostragem
maiores \, como 88.2 KHz e/ou algum filtro passa baixa. Ou seja \,
de uma forma parecida com o que fizemos em síntese \, nos exemplos
de Anti-Aliasing.;
#X text 42 25 Com o [tabread4~] \, temos recursos como tocar o arquivo
em diferentes velocidades e também tocar ao contrário. A leitura pode
ser feita com um [phasor~] ou um [line~].;
#X connect 1 0 9 0;
#X connect 1 0 13 0;
#X connect 2 0 86 0;
#X connect 3 0 2 0;
#X connect 4 0 7 0;
#X connect 5 0 15 0;
#X connect 7 0 5 0;
#X connect 8 0 62 0;
#X connect 9 0 21 0;
#X connect 9 0 79 0;
#X connect 10 0 6 0;
#X connect 11 0 12 0;
#X connect 11 0 34 0;
#X connect 12 0 10 0;
#X connect 13 0 11 0;
#X connect 13 1 12 1;
#X connect 14 0 15 1;
#X connect 16 0 23 0;
#X connect 17 0 85 0;
#X connect 18 0 8 0;
#X connect 19 0 17 0;
#X connect 20 0 4 1;
#X connect 22 0 23 1;
#X connect 22 0 24 1;
#X connect 23 0 24 0;
#X connect 24 0 20 0;
#X connect 26 0 27 0;
#X connect 27 0 28 0;
#X connect 28 0 1 0;
#X connect 29 0 26 0;
#X connect 30 0 60 0;
#X connect 31 0 30 0;
#X connect 35 0 61 0;
#X connect 38 0 39 1;
#X connect 38 0 40 1;
#X connect 39 0 50 1;
#X connect 40 0 50 0;
#X connect 41 0 42 0;
#X connect 42 0 40 0;
#X connect 42 1 39 0;
#X connect 43 0 45 0;
#X connect 44 0 57 0;
#X connect 45 0 44 0;
#X connect 46 0 58 0;
#X connect 47 0 48 2;
#X connect 48 0 49 0;
#X connect 49 0 31 0;
#X connect 50 0 54 0;
#X connect 50 1 55 0;
#X connect 50 2 43 0;
#X connect 54 0 48 0;
#X connect 55 0 48 1;
#X connect 57 0 47 0;
#X connect 58 0 57 1;
#X connect 59 0 60 1;
#X connect 62 0 65 0;
#X connect 63 0 4 0;
#X connect 64 0 66 0;
#X connect 65 0 63 0;
#X connect 66 0 65 0;
#X connect 68 0 69 0;
#X connect 69 0 57 1;
#X connect 81 0 31 0;
#X connect 85 0 18 0;
#X connect 85 1 17 1;
#X connect 85 1 18 1;
#X connect 86 0 1 0;
