#N canvas 251 38 1021 649 10;
#X obj 274 177 readsf~;
#X obj 49 177 readsf~;
#X text 60 370 ============================================================
;
#X obj 121 309 hsl 100 12 0 1 0 0 empty nonjhjhfjghgdhj empty -2 -6
0 10 -204865 -220534 -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 79 334 pd gain;
#X obj 314 309 hsl 100 12 0 1 0 0 empty nonjhjhfjghgdhj empty -2 -6
0 10 -204865 -220534 -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 272 334 pd gain;
#X obj 761 167 vsl 15 100 1 100 1 1 empty empty empty 0 -9 0 10 -204786
-1 -1 7700 1;
#X obj 761 284 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-204786 -1 -1 35.9381 256;
#X obj 588 280 hsl 100 12 0 1 0 0 empty nonjhjhfjghgdhj empty -2 -6
0 10 -204865 -220534 -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 546 305 pd gain;
#X obj 619 565 hsl 100 12 0 1 0 0 empty nonjhjhfjghgdhj empty -2 -6
0 10 -204865 -220534 -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 577 590 pd gain;
#X text 786 242 "original";
#X obj 546 216 r~ input;
#X obj 79 275 r~ input;
#X obj 577 469 r~ input;
#X obj 49 202 s~ input;
#X text 54 94 ============================================================
;
#N canvas 73 22 625 631 "Timbre_Stamp"(aka-Vocoder) 0;
#X obj -76 127 cnv 15 280 330 empty empty empty 20 12 0 14 -220523
-66577 0;
#X obj 205 327 cnv 15 250 130 empty empty empty 20 12 0 14 -220139
-66577 0;
#X obj -23 354 *~;
#X obj -70 354 *~;
#X obj -50 78 *~;
#X obj -50 13 inlet~;
#X obj -50 101 rfft~;
#X obj 254 141 rfft~;
#X obj 255 115 *~;
#X obj 255 15 inlet~;
#X text 252 362 Amplitude;
#X obj -35 52 tabreceive~ \$0-hann;
#X obj 270 88 tabreceive~ \$0-hann;
#X obj -8 306 clip~;
#X floatatom 19 279 8 0 0 0 - - -;
#X text 73 281 "SQUELCH";
#X floatatom 405 186 5 0 0 0 - - -;
#X obj 216 516 *~;
#X obj 216 469 rifft~;
#X obj 216 602 outlet~;
#X obj 231 493 tabreceive~ \$0-hann;
#X obj 249 420 *~;
#X obj 216 420 *~;
#X obj 405 15 inlet;
#X obj 231 343 expr~ sqrt($v1*$v1 + $v2*$v2);
#X obj -8 189 expr~ 1 / sqrt($v1*$v1 + $v2*$v2);
#X obj -8 147 +~ 1e-20;
#X obj 19 255 expr $f1*$f1 / 100;
#X text 5 170 Evita divisão por zero;
#X text 0 205 1 / Amplitude;
#X text 447 16 "SQUELCH";
#X text 278 419 "Filtro";
#X text 22 327 Compressor Espectral;
#X text -1 220 (amplitude recíproca);
#X obj 63 559 block~;
#X obj 63 535 r \$0-set-block;
#X obj 216 550 expr~ $v1 / (w_size_\$0 * 1.5);
#X connect 2 0 21 0;
#X connect 3 0 22 0;
#X connect 4 0 6 0;
#X connect 5 0 4 0;
#X connect 6 0 26 0;
#X connect 6 1 2 0;
#X connect 6 1 25 1;
#X connect 7 0 24 0;
#X connect 7 1 24 1;
#X connect 8 0 7 0;
#X connect 9 0 8 0;
#X connect 11 0 4 1;
#X connect 12 0 8 1;
#X connect 13 0 3 1;
#X connect 13 0 2 1;
#X connect 14 0 13 2;
#X connect 16 0 27 0;
#X connect 17 0 36 0;
#X connect 18 0 17 0;
#X connect 20 0 17 1;
#X connect 21 0 18 1;
#X connect 22 0 18 0;
#X connect 23 0 16 0;
#X connect 24 0 22 1;
#X connect 24 0 21 1;
#X connect 25 0 13 0;
#X connect 26 0 25 0;
#X connect 26 0 3 0;
#X connect 27 0 14 0;
#X connect 35 0 34 0;
#X connect 36 0 19 0;
#X restore 577 526 pd "Timbre_Stamp"(aka-Vocoder);
#N canvas 56 55 1268 651 Cross-Synthesis(Vocoder) 0;
#X obj 22 348 cnv 15 800 100 empty empty empty 20 12 0 14 -249559 -66577
0;
#X obj 43 12 inlet~;
#X obj 22 157 cnv 15 520 190 empty empty empty 20 12 0 14 -171382 -66577
0;
#X obj 43 87 *~;
#X obj 43 127 rfft~;
#X obj 44 264 /~;
#X obj 70 264 /~;
#X obj 622 13 inlet~;
#X obj 623 108 *~;
#X obj 340 614 outlet~;
#X obj 340 531 *~;
#X obj 340 472 rifft~;
#X obj 340 422 *~;
#X obj 373 422 *~;
#X obj 623 155 rfft~;
#X obj 61 61 tabreceive~ \$0-hann;
#X obj 638 82 tabreceive~ \$0-hann;
#X obj 355 505 tabreceive~ \$0-hann;
#X obj 85 229 clip~ 1 1;
#X obj 768 13 inlet;
#X floatatom 312 87 8 0 0 0 - - -;
#X obj 85 180 expr~ sqrt($v1*$v1 + $v2*$v2);
#X obj 561 357 expr~ sqrt($v1*$v1 + $v2*$v2);
#X obj 44 300 expr~ if($v1 == 0 && $v2 == 0 \, 1 \, $v1) \; $v2;
#X obj 312 173 expr 1 - ($f1 / 100) \; $f1 * $f1;
#X obj 1028 241 rfft~;
#X obj 1086 349 rifft~;
#X obj 1086 327 *~;
#X obj 1119 327 *~;
#X obj 1134 241 rfft~;
#X obj 912 255 rfft~;
#X obj 910 340 rifft~;
#X obj 912 313 *~;
#X obj 939 313 *~;
#X obj 954 255 rfft~;
#X obj 1028 292 /~;
#X obj 1055 293 /~;
#X text 188 230 "Compressor Espectral";
#X text 295 298 No caso de ambas as partes = 0;
#X text 333 316 Parte Real = 1;
#X obj 1070 268 cartopol~;
#X obj 1134 268 cartopol~;
#X obj 954 284 cartopol~;
#X text 1028 216 comprimido/normalizado;
#X text 916 231 original;
#X text 357 371 "Filtro Espectral";
#X text 889 131 O parâmetro de compressão permite variar entre dois
tipos de processamento. Abaixo temos uma simplificação de implementação
de cada uma das opções. À esquerda quando o sinal original é preservado
\, e à direita quando o sinal é comprimido e normalizado.;
#X text 1067 381 (Síntese Cruzada);
#X text 891 372 (Amplitude de Ambos);
#X obj 708 613 rifft~;
#X obj 779 484 rfft~;
#X obj 711 484 rfft~;
#X obj 766 520 cartopol~;
#X obj 700 583 poltocar~;
#X obj 700 520 cartopol~;
#X obj 700 556 *~;
#X text 710 465 A;
#X text 776 464 B;
#X text 756 557 Fase de A;
#X text 601 556 (Amp A * Amp B);
#X text 847 551 À esquerda \, temos outra implementação com a Amplitude
de Ambos na forma Polar.;
#X obj 201 531 r \$0-set-block;
#X obj 201 556 block~;
#X obj 340 569 expr~ $v1 / (w_size_\$0 * 1.5);
#X text 888 62 Na seção azul à esquerda temos \, praticamente \, o
exemplo de compressão espectral apresentado antes. já a parte de baixo
\, em amarelo \, também equivale ao exemplo de Filtro-Espectral.;
#X text 880 415 Perceba também que \, no caso do sinal original ter
permanecido intacto \, podemos desconsiderar a seção de normalização
\, e o que resta é justamente o exemplo de Filtragem Espectral.;
#X connect 1 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 4 0 21 0;
#X connect 4 1 6 0;
#X connect 4 1 21 1;
#X connect 5 0 23 0;
#X connect 6 0 23 1;
#X connect 7 0 8 0;
#X connect 8 0 14 0;
#X connect 10 0 63 0;
#X connect 11 0 10 0;
#X connect 12 0 11 0;
#X connect 13 0 11 1;
#X connect 14 0 22 0;
#X connect 14 1 22 1;
#X connect 15 0 3 1;
#X connect 16 0 8 1;
#X connect 17 0 10 1;
#X connect 18 0 6 1;
#X connect 18 0 5 1;
#X connect 19 0 20 0;
#X connect 20 0 24 0;
#X connect 21 0 18 0;
#X connect 22 0 12 1;
#X connect 22 0 13 1;
#X connect 23 0 12 0;
#X connect 23 1 13 0;
#X connect 24 0 18 1;
#X connect 24 1 18 2;
#X connect 25 0 35 0;
#X connect 25 0 40 0;
#X connect 25 1 36 0;
#X connect 25 1 40 1;
#X connect 27 0 26 0;
#X connect 28 0 26 1;
#X connect 29 0 41 0;
#X connect 29 1 41 1;
#X connect 30 0 32 0;
#X connect 30 1 33 0;
#X connect 32 0 31 0;
#X connect 33 0 31 1;
#X connect 34 0 42 0;
#X connect 34 1 42 1;
#X connect 35 0 27 0;
#X connect 36 0 28 0;
#X connect 40 0 35 1;
#X connect 40 0 36 1;
#X connect 41 0 27 1;
#X connect 41 0 28 1;
#X connect 42 0 32 1;
#X connect 42 0 33 1;
#X connect 50 0 52 0;
#X connect 50 1 52 1;
#X connect 51 0 54 0;
#X connect 51 1 54 1;
#X connect 52 0 55 1;
#X connect 53 0 49 0;
#X connect 53 1 49 1;
#X connect 54 0 55 0;
#X connect 54 1 53 1;
#X connect 55 0 53 0;
#X connect 61 0 62 0;
#X connect 63 0 9 0;
#X restore 546 247 pd Cross-Synthesis(Vocoder);
#X text 113 235 Escute os sons separadamente.;
#X text 783 163 "comprimido";
#X text 801 181 (Síntese-Cruzada);
#X text 72 501 Porém \, quando o sinal permanece intacto ("original")
\, há uma multiplicação entre as amplitudes dos dois sinais em vez
da substituição da informação de Amplitude de um por outro.;
#X obj 274 203 s~ amplitude-filter;
#X obj 272 277 r~ amplitude-filter;
#X obj 625 217 r~ amplitude-filter;
#X obj 665 469 r~ amplitude-filter;
#X obj 49 127 loadbang;
#X obj 274 127 loadbang;
#X text 830 260 (Amplitudes de ambos);
#X text 527 168 Abra o subpatch para mais detalhes;
#X text 535 335 ============================================================
;
#X text 812 498 Squelch;
#X text 544 372 Comparemos agora com o exmeplo "timbre stamp" do Pd.
A única diferença é que o processo de compressão (dado pelo parâmetro
"Squelch" \, palavra que dá ideia de comprimir) não permite que o som
original seja completamente preservado. Abra o subpatch.;
#X text 532 90 ============================================================
;
#X text 534 120 Reveja o exemplo Compressor-Espectral no exemplos de
FFT;
#X obj 456 25 hradio 15 1 0 10 empty empty empty 0 -8 0 10 -262130
-1 -1 0;
#X obj 456 73 nbx 5 14 64 1e+37 0 0 \$0-w_size \$0-w_size-set empty
0 -8 0 10 -262130 -1 -1 2048 256;
#X text 522 72 tamanho da janela;
#N canvas 38 153 586 461 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 335 s \$0-set-block;
#X obj 259 175 t b f;
#X msg 296 198 resize \$1;
#X obj 296 224 s \$0-hann;
#X obj 259 281 v w_size_\$0;
#X obj 396 157 samplerate~;
#X obj 396 182 v sr_\$0;
#X obj 396 63 loadbang;
#X obj 396 84 \$0;
#X obj 259 21 inlet;
#X msg 259 308 set \$1 4;
#X msg 396 105 bang \; pd dsp 1 \; \$1-w_size-set 2048;
#X connect 0 0 7 0;
#X connect 2 0 0 1;
#X connect 5 0 0 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 12 0;
#X connect 9 0 6 0;
#X connect 9 1 10 0;
#X connect 9 1 12 0;
#X connect 10 0 11 0;
#X connect 12 0 18 0;
#X connect 13 0 14 0;
#X connect 15 0 16 0;
#X connect 16 0 19 0;
#X connect 17 0 9 0;
#X connect 18 0 8 0;
#X connect 19 0 13 0;
#X coords 0 0 1 1 120 60 0;
#X restore 456 95 pd Window;
#X obj 456 48 expr pow(2 \, $f1 + 7);
#X msg 49 152 open ../samples/kantele.wav \, 1;
#X msg 274 152 open ../samples/numbers.wav \, 1;
#X obj 754 499 nbx 5 14 1 1e+37 0 1 empty empty empty 0 -8 0 10 -204786
-1 -1 1 256;
#X text 61 31 Veremos agora um outro tipo de Vocoder em FFT \, relacionada
a um dos exemplos do Pd \, que é como se fosse uma variação do primeiro
exemplo de Síntese Cruzada em FFT.;
#X text 72 403 Basicamente \, o que temos é uma adaptação da implementação
de Síntese Cruzada na forma Cartesiana dada no exemplo anterior \,
incluindo o procedimento de Compressão Espectral (também já explicado
anteriormente). Desse modo \, quando totalmente comprimido \, as amplitudes
são normalizadas em 1 \, e temos exatamente o mesmo resultado apresentado
na Síntese Cruzada.;
#X text 73 562 Portanto \, temos aqui os dois tipos de Vocoder \, além
de uma forma de variar entre um e outro por meio de um slider vertical.
;
#X connect 0 0 25 0;
#X connect 0 1 44 0;
#X connect 1 0 17 0;
#X connect 1 1 43 0;
#X connect 3 0 4 1;
#X connect 5 0 6 1;
#X connect 7 0 8 0;
#X connect 7 0 20 2;
#X connect 9 0 10 1;
#X connect 11 0 12 1;
#X connect 14 0 20 0;
#X connect 15 0 4 0;
#X connect 16 0 19 0;
#X connect 19 0 12 0;
#X connect 20 0 10 0;
#X connect 26 0 6 0;
#X connect 27 0 20 1;
#X connect 28 0 19 1;
#X connect 29 0 43 0;
#X connect 30 0 44 0;
#X connect 38 0 42 0;
#X connect 39 0 41 0;
#X connect 42 0 39 0;
#X connect 43 0 1 0;
#X connect 44 0 0 0;
#X connect 45 0 19 2;
