#N canvas 105 45 998 431 10;
#X obj 549 147 hsl 100 16 0 3 0 0 empty nonjhjhfjghgdhj empty -2 -6
0 10 -204800 -1 -1 0 1;
#N canvas 0 22 237 305 gain 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 507 169 pd gain;
#X obj 771 130 nbx 5 14 64 1e+37 0 0 empty empty empty 0 -8 0 10 -262130
-1 -1 2048 256;
#X text 829 127 tamanho da janela;
#X obj 771 82 hradio 15 1 0 8 empty \$0-set-window empty 0 -8 0 10
-262130 -1 -1 5;
#X obj 771 105 expr pow(2 \, $f1 + 6);
#N canvas 437 26 539 448 Window 0;
#X obj 90 363 osc~;
#X obj 71 408 tabwrite~ \$0-hann;
#X msg 111 339 0.5;
#X obj 30 67 cnv 15 198 118 empty empty empty 20 12 0 14 -262130 -66577
0;
#N canvas 0 22 450 300 (subpatch) 0;
#X array \$0-hann 2048 float 0;
#X coords 0 1 2047 0 200 120 1;
#X restore 29 67 graph;
#X obj 90 306 expr sr_\$0 / w_size_\$0;
#X obj 71 280 t b b b;
#X obj 90 385 expr~ ($v1 * 0.5) + 0.5;
#X obj 259 363 s \$0-set-block;
#X obj 259 307 pack float float;
#X msg 259 336 set \$1 \$2;
#X obj 259 165 t b f;
#X msg 293 192 resize \$1;
#X obj 293 214 s \$0-hann;
#X obj 259 281 v w_size_\$0;
#X obj 393 279 v overlap_\$0;
#X obj 396 177 samplerate~;
#X obj 396 202 v sr_\$0;
#X obj 396 63 loadbang;
#X obj 396 84 \$0;
#X obj 259 21 inlet;
#X obj 366 22 inlet;
#X obj 366 250 t b f;
#X obj 286 237 s \$0-w_size;
#X floatatom 173 335 5 0 0 0 - - -;
#X msg 396 105 bang \; pd dsp 1 \; \$1-set-window 5 \; \$1-overlap-set
4;
#X connect 0 0 7 0;
#X connect 2 0 0 1;
#X connect 5 0 0 0;
#X connect 5 0 24 0;
#X connect 6 0 1 0;
#X connect 6 1 5 0;
#X connect 6 2 2 0;
#X connect 7 0 1 0;
#X connect 9 0 10 0;
#X connect 10 0 8 0;
#X connect 11 0 14 0;
#X connect 11 0 6 0;
#X connect 11 1 12 0;
#X connect 11 1 14 0;
#X connect 11 1 23 0;
#X connect 12 0 13 0;
#X connect 14 0 9 0;
#X connect 16 0 17 0;
#X connect 18 0 19 0;
#X connect 19 0 25 0;
#X connect 20 0 11 0;
#X connect 21 0 22 0;
#X connect 22 0 14 0;
#X connect 22 1 15 0;
#X connect 22 1 9 1;
#X connect 25 0 16 0;
#X coords 0 0 1 1 120 60 0;
#X restore 771 155 pd Window;
#X obj 842 152 nbx 2 14 1 1e+37 0 1 \$0-overlap \$0-overlap-set empty
0 -8 0 10 -204786 -1 -1 4 256;
#X text 873 151 overlaps;
#N canvas 33 42 1309 473 envelope-espectral 0;
#X obj 56 201 tof/breakpoints~ 500 100;
#X msg 121 158 1 1 1;
#X obj 121 135 loadbang;
#X obj 54 131 phasor~;
#X obj 54 320 tabsend~ \$0-env;
#X obj 62 348 table \$0-env;
#X obj 983 170 r \$0-w_size;
#X msg 993 236 set \$1;
#X obj 993 260 block~;
#X obj 983 305 s \$0-env;
#X msg 983 282 resize \$1;
#X obj 983 200 / 2;
#X obj 54 105 expr~ sr_\$0 / (w_size_\$0 * 0.5);
#X text 597 165 Usamos um gerador de envelopes para alimentar uma tabela
\, que é usada como filtro espectral. O tamanho da tabela é a metade
da análise de FFT \, pois a metade é a frequência de Nyquist que é
até onde nos importa.;
#X text 598 229 Este subpatch precisa rodar com um tamanho de blobo
igual à metade da janela de analise para poder gerar uma tabela com
esse tamanho.;
#X text 599 283 À esquerda temos um [phasor~] rodando na frequência
que equivale ao período do bloco e é somente isso.;
#X connect 0 0 4 0;
#X connect 1 0 0 0;
#X connect 2 0 1 0;
#X connect 3 0 0 0;
#X connect 6 0 11 0;
#X connect 7 0 8 0;
#X connect 10 0 9 0;
#X connect 11 0 10 0;
#X connect 11 0 7 0;
#X connect 12 0 3 0;
#X coords 0 -1 1 1 514 130 1 50 180;
#X restore 453 234 pd envelope-espectral;
#N canvas 517 64 604 482 Filtro 0;
#X obj 106 86 *~;
#X obj 106 20 inlet~;
#X obj 106 115 rfft~;
#X obj 121 57 tabreceive~ \$0-hann;
#X text 157 114 FFT;
#X text 69 132 real;
#X obj 106 335 *~;
#X obj 121 310 tabreceive~ \$0-hann;
#X obj 105 262 rifft~;
#X obj 106 425 outlet~;
#X text 134 84 janelamento;
#X text 146 134 imaginário;
#X text 131 336 janelamento;
#X text 156 262 FFT inversa;
#X obj 276 120 block~;
#X text 243 309 janela hann;
#X obj 276 93 r \$0-set-block;
#X obj 106 387 expr~ $v1 / (w_size_\$0 * overlap_\$0 * 0.375);
#X text 383 387 normalização;
#X text 250 56 janela hann;
#X obj 96 163 cnv 15 175 85 empty empty empty 20 12 0 14 -233017 -66577
0;
#X obj 105 218 *~;
#X obj 133 218 *~;
#X obj 148 182 tabreceive~ \$0-env;
#X connect 0 0 2 0;
#X connect 1 0 0 0;
#X connect 2 0 21 0;
#X connect 2 1 22 0;
#X connect 3 0 0 1;
#X connect 6 0 17 0;
#X connect 7 0 6 1;
#X connect 8 0 6 0;
#X connect 16 0 14 0;
#X connect 17 0 9 0;
#X connect 21 0 8 0;
#X connect 22 0 8 1;
#X connect 23 0 22 1;
#X connect 23 0 21 1;
#X restore 507 118 pd Filtro;
#X obj 507 93 readsf~;
#X msg 507 66 open ../../samples/didge.aif \, start;
#X text 43 33 O termo "Envelope Espectral" costuma ser bastante usado
\, e trata-se apenas dos pontos de amplitude de uma FFT! Ou seja \,
a informação de amplitude de uma análise de FFT é o tal chamado "Envelope
Espectral".;
#X text 45 97 É um termo que claramente remete ao que chamamos de envelope
de amplitude \, mas agora no domínio da frequência em vez do domínio
do tempo.;
#X text 44 146 Nesse contexto \, vamos revisar o exemplo de filtro
espectral anterior. Usamos uma tabela de amplitudes como um filtro.
Pois bem \, podemos encarar essa tabela de amplitudes como um Envelope
Espectral \, e entender que esse envelope espectral foi usado para
filtrar as amplitudes de uma FFT (logo \, filtrar outro envelope espectral).
;
#X text 46 229 Em suma \, podemos dizer que aplicamos um Envelope Espectral
em cima de outro.;
#X text 535 209 Clique e arraste pra gerar o envelope usado como filtro
;
#X obj 507 41 loadbang;
#X text 48 267 Dito isso \, vamos a este exemplo \, que é praticamente
o mesmo que o anterior. A única mudança é a interface. Agora temos
o [tof/breakpoints~] - que é um gerador de envelope - como uma interface
para o envelope espectral do filtro. Em suma \, trata-se então \, literalmente
\, de um envelope espectral.;
#X text 52 343 Abra o subpatch [pd envelope-espectral] e veja como
ele funciona. O subpatch [pd Filtro] é basicamente idêntico ao exemplo
anterior.;
#X connect 0 0 1 1;
#X connect 2 0 6 0;
#X connect 4 0 5 0;
#X connect 5 0 2 0;
#X connect 7 0 6 1;
#X connect 10 0 1 0;
#X connect 11 0 10 0;
#X connect 11 1 12 0;
#X connect 12 0 11 0;
#X connect 18 0 12 0;
