#N canvas 175 32 998 683 10;
#X obj 743 105 receive WaveList;
#X obj 770 214 send HarmWaveForm;
#X obj 518 402 pack float float float float float float float float
;
#X obj 845 374 t b f;
#X obj 793 375 t b f;
#X obj 741 375 t b f;
#X obj 690 375 t b f;
#X obj 638 375 t b f;
#X obj 587 375 t b f;
#X obj 535 375 t b f;
#X obj 893 528 nbx 4 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-137954 -1 -1 0 256;
#X obj 839 528 nbx 4 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-137954 -1 -1 0 256;
#X obj 785 528 nbx 4 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-137954 -1 -1 0 256;
#X obj 732 528 nbx 4 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-137954 -1 -1 0 256;
#X obj 678 528 nbx 4 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-137954 -1 -1 0 256;
#X obj 518 501 unpack float float float float float float float float
;
#X obj 625 528 nbx 4 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-137954 -1 -1 0 256;
#X obj 571 528 nbx 4 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-137954 -1 -1 0.04 256;
#X obj 518 529 nbx 4 18 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-137954 -1 -1 -1 256;
#X obj 889 461 s harm;
#X msg 889 433 0;
#X obj 889 410 bng 15 250 50 0 empty empty empty 17 7 0 10 -261682
-1 -1;
#X obj 845 321 nbx 4 18 -1e+37 1e+37 0 0 empty harm empty 0 -8 0 10
-191672 -1 -1 0 256;
#X obj 793 321 nbx 4 18 -1e+37 1e+37 0 0 empty harm empty 0 -8 0 10
-191672 -1 -1 0 256;
#X obj 741 321 nbx 4 18 -1e+37 1e+37 0 0 empty harm empty 0 -8 0 10
-191672 -1 -1 0 256;
#X obj 690 321 nbx 4 18 -1e+37 1e+37 0 0 empty harm empty 0 -8 0 10
-191672 -1 -1 0 256;
#X obj 638 321 nbx 4 18 -1e+37 1e+37 0 0 empty harm empty 0 -8 0 10
-191672 -1 -1 0 256;
#X obj 587 321 nbx 4 18 -1e+37 1e+37 0 0 empty harm empty 0 -8 0 10
-191672 -1 -1 0 256;
#X obj 535 321 nbx 4 18 -1e+37 1e+37 0 0 empty harm empty 0 -8 0 10
-191672 -1 -1 0.2 256;
#X obj 485 321 nbx 4 18 -1e+37 1e+37 0 0 empty harm empty 0 -8 0 10
-191672 -1 -1 -5 256;
#X obj 793 347 f;
#X obj 741 347 f;
#X obj 690 347 f;
#X obj 638 347 f;
#X obj 587 347 f;
#X obj 535 347 f;
#X obj 485 347 f;
#X obj 516 99 cnv 15 198 138 empty empty empty 20 12 0 14 -204800 -66577
0;
#N canvas 0 22 474 324 (subpatch) 0;
#X array HarmWaveForm 4099 float 0;
#X coords 0 1 4098 -1 200 140 1;
#X restore 515 98 graph;
#X obj 268 400 phasor~;
#X obj 53 402 nbx 4 18 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
-204800 -1 -1 300 256;
#X obj 268 474 tabread4~ HarmWaveForm;
#X obj 316 499 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -204800
-1 -1 0 1;
#N canvas 0 22 237 305 ganho 0;
#X obj 79 176 *~;
#X obj 67 208 dac~;
#X obj 108 146 line~;
#X msg 108 120 \$1 10;
#X obj 108 94 pow 4;
#X obj 108 67 inlet;
#X obj 79 36 inlet~;
#X connect 0 0 1 0;
#X connect 0 0 1 1;
#X connect 2 0 0 1;
#X connect 3 0 2 0;
#X connect 4 0 3 0;
#X connect 5 0 4 0;
#X connect 6 0 0 0;
#X restore 268 521 pd ganho;
#X obj 101 457 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -204800
-1 -1 0 1;
#N canvas 0 22 237 305 ganho 0;
#X obj 79 176 *~;
#X obj 67 208 dac~;
#X obj 108 146 line~;
#X msg 108 120 \$1 10;
#X obj 108 94 pow 4;
#X obj 108 67 inlet;
#X obj 79 36 inlet~;
#X connect 0 0 1 0;
#X connect 0 0 1 1;
#X connect 2 0 0 1;
#X connect 3 0 2 0;
#X connect 4 0 3 0;
#X connect 5 0 4 0;
#X connect 6 0 0 0;
#X restore 53 483 pd ganho;
#X text 234 424 =;
#X obj 268 375 nbx 4 18 -1e+37 1e+37 0 1 empty empty empty 0 -8 0 10
-204800 -1 -1 300 256;
#X text 501 92 1;
#X text 496 227 -1;
#X msg 743 184 normalize 1;
#X text 569 276 ---- Lista de Amplitude de Parciais ----;
#X text 908 407 Resetar;
#N canvas 154 26 306 329 normalizar-lista 0;
#X obj 110 85 minmax;
#X obj 57 186 list-math /;
#X obj 110 113 abs;
#X obj 131 136 max;
#X floatatom 131 162 5 0 0 0 - - -;
#X obj 57 62 t l l;
#X obj 57 265 outlet;
#X obj 57 32 inlet;
#X text 69 209 Dividir pelo maior valor absoluto;
#X connect 0 0 2 0;
#X connect 0 1 3 1;
#X connect 1 0 6 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 1 1;
#X connect 5 0 1 0;
#X connect 5 1 0 0;
#X connect 7 0 5 0;
#X restore 518 472 pd normalizar-lista;
#X obj 545 435 send WaveList;
#X text 514 296 Valores negativos tem uma diferença de fase de 180
graus!;
#X obj 268 449 +~ 1;
#X text 610 545 --- lista normalizada ---;
#X text 558 590 Normalizamos a lista apenas para visualizar melhor
as relações proporcionais entre os parciais \, mesmo porque já enviamos
o comando normalize 1 para a tabela (que a normaliza entre valore de
-1 a 1).;
#X obj 53 430 tabosc4~ HarmWaveForm;
#X obj 743 157 t b a;
#X text 45 334 É possível armazenar essa tabela como arquivo de texto
\, ou mesmo de áudio \, para recarregar novamente em uma tabela qualquer.
;
#X text 43 246 Uma interpolação significa uma aproximação para índices
com pontos decimais (13.5 \, por exemplo). O tipo de interpolação feita
será apresentada em detalhes depois.;
#X text 45 290 O [tabosc4~] é \, então \, um oscilador de tabela interpolado.
E e comando "sinesum" é um gerador de tabelas para leitura interpolada.
;
#X text 42 177 Os pontos adicionais criados são o primeiro e os dois
últimos. Logo \, os índices reais vão de 1 a 512! O primeiro ponto
(índice 0) é pra ser uma cópia do último (512). Já os dois últimos
(513 e 514) devem ser cópias dos dois primeiros (índices 1 e 2 \, respectivamente).
;
#X text 322 440 (1 a 513);
#X obj 268 429 *~ 512;
#X obj 743 132 prepend sinesum 4096;
#X text 41 17 Neste exemplo \, temos uma lista de amplitudes com 8
parciais harmônicos (que geram uma forma de onda periódica). São \,
portanto \, os 8 primeiros termos de uma série harmônica. A lista é
enviada à tabela seguida do comando "sinesum" e um número que deve
ser uma potência de 2 (nesse caso \, 512).;
#X text 42 94 O comando "sinesum 512" desenha a forma de onda em uma
tabela com 512 pontos mais 3 (com índices de 0 a 514). Esses três pontos
adicionais são necessários para a interpolação feita no objeto [tabosc4~]
\, que precisa \, justamente \, de uma tabela com tamanho igual a uma
potência de 2 mais esses 3 pontos adicionais.;
#X text 54 556 Um [phasor~] ligado ao [tabread4~] pode substituir o
[tabosc4~] \, já que o [tabread4~] é umleitor de tabela que faz a mesma
interpolação. Por preciosismo \, e para a interpolação fazer sentido
\, devemos descartar o primeiro e o último ítem da tabela. Logo \,
em nosso exemplo (com 515 pontos e índices de 0 a 514) \, lemos do
índice 1 ao 513! Enfatizando que o 513 deve ser uma cópia do 1 \, fazemos
assim um loop perfeito.;
#X text 532 19 Brinque com as caixas de números abaixo \, cada uma
controla a amplitude de um termo da Série Harmônica \, na ordem da
esquerda pra direita.;
#X connect 0 0 67 0;
#X connect 2 0 53 0;
#X connect 2 0 54 0;
#X connect 3 0 30 0;
#X connect 3 1 2 7;
#X connect 4 0 31 0;
#X connect 4 1 2 6;
#X connect 5 0 32 0;
#X connect 5 1 2 5;
#X connect 6 0 33 0;
#X connect 6 1 2 4;
#X connect 7 0 34 0;
#X connect 7 1 2 3;
#X connect 8 0 35 0;
#X connect 8 1 2 2;
#X connect 9 0 36 0;
#X connect 9 1 2 1;
#X connect 15 0 18 0;
#X connect 15 1 17 0;
#X connect 15 2 16 0;
#X connect 15 3 14 0;
#X connect 15 4 13 0;
#X connect 15 5 12 0;
#X connect 15 6 11 0;
#X connect 15 7 10 0;
#X connect 20 0 19 0;
#X connect 21 0 20 0;
#X connect 22 0 3 0;
#X connect 23 0 30 0;
#X connect 24 0 31 0;
#X connect 25 0 32 0;
#X connect 26 0 33 0;
#X connect 27 0 34 0;
#X connect 28 0 35 0;
#X connect 29 0 36 0;
#X connect 30 0 4 0;
#X connect 31 0 5 0;
#X connect 32 0 6 0;
#X connect 33 0 7 0;
#X connect 34 0 8 0;
#X connect 35 0 9 0;
#X connect 36 0 2 0;
#X connect 39 0 66 0;
#X connect 40 0 59 0;
#X connect 41 0 43 0;
#X connect 42 0 43 1;
#X connect 44 0 45 1;
#X connect 47 0 39 0;
#X connect 50 0 1 0;
#X connect 53 0 15 0;
#X connect 56 0 41 0;
#X connect 59 0 45 0;
#X connect 60 0 50 0;
#X connect 60 1 1 0;
#X connect 66 0 56 0;
#X connect 67 0 60 0;
