#N canvas 342 22 865 688 10;
#X obj 143 605 hsl 100 12 0 3 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 101 629 pd gain;
#X obj 113 255 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 71 279 pd gain;
#X obj 221 302 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 179 325 pd gain;
#X text 24 344 ============================================================
;
#X obj 71 224 r~ \$0-sample1;
#X obj 179 278 r~ \$0-sample2;
#X obj 230 543 r~ \$0-sample2;
#X obj 101 543 r~ \$0-sample1;
#X obj 131 164 bng 15 250 50 0 empty empty empty 17 7 0 10 -261234
-1 -1;
#X obj 174 140 bng 15 250 50 0 empty empty empty 17 7 0 10 -262130
-1 -1;
#X msg 207 71 bubul Mouthbow;
#X msg 267 148 kantele numbers;
#X msg 252 121 kantele MouthBow;
#X msg 233 96 bubul numbers;
#X text 72 162 sample1;
#N canvas 47 42 769 377 load-samples 0;
#X obj 72 147 openpanel;
#X obj 72 116 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 72 230 readsf~;
#X msg 72 205 open \$1 \, start;
#X obj 72 180 symbol;
#X obj 289 149 openpanel;
#X obj 289 118 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 289 232 readsf~;
#X msg 289 207 open \$1 \, start;
#X obj 289 182 symbol;
#X obj 72 262 s~ \$0-sample1;
#X obj 289 264 s~ \$0-sample2;
#X obj 146 123 r sample1;
#X obj 373 120 r sample2;
#X obj 72 59 inlet;
#X obj 289 62 inlet;
#X obj 570 63 inlet;
#X obj 570 92 list;
#X msg 570 118 \; sample1 symbol \$1 \; sample2 symbol \$2;
#X obj 582 206 loadbang;
#X msg 582 232 \; pd dsp 1;
#X msg 146 150 ../samples/\$1.wav;
#X msg 373 147 ../samples/\$1.wav;
#X connect 0 0 4 0;
#X connect 1 0 0 0;
#X connect 2 0 10 0;
#X connect 2 1 4 0;
#X connect 3 0 2 0;
#X connect 4 0 3 0;
#X connect 5 0 9 0;
#X connect 6 0 5 0;
#X connect 7 0 11 0;
#X connect 7 1 9 0;
#X connect 8 0 7 0;
#X connect 9 0 8 0;
#X connect 12 0 21 0;
#X connect 13 0 22 0;
#X connect 14 0 1 0;
#X connect 15 0 6 0;
#X connect 16 0 17 0;
#X connect 17 0 18 0;
#X connect 19 0 20 0;
#X connect 21 0 4 0;
#X connect 22 0 9 0;
#X restore 131 190 pd load-samples;
#X text 115 136 sample2;
#X obj 207 42 loadbang;
#X text 451 407 ============================================================
;
#X obj 547 631 hsl 100 12 0 3 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 505 653 pd gain;
#X obj 505 540 r~ \$0-sample1;
#X obj 533 568 r~ \$0-sample2;
#X floatatom 669 639 5 0 0 0 - - -;
#X text 688 522 Cross Synthesis;
#X obj 669 528 vsl 15 100 1 100 0 0 empty empty empty 0 -9 0 10 -204786
-1 -1 0 1;
#X text 690 613 Amp-Only-Convolution;
#X text 472 7 A operação da convolução é comutativa. Ou seja \, não
importa se você troca a ordem da entrada dos sinais \, ao contrário
dos exemplos anteriores \, onde a entrada da esquerda mantinha as qualidades
tonais.;
#X obj 643 382 rifft~;
#X obj 714 253 rfft~;
#X obj 646 253 rfft~;
#X obj 701 289 cartopol~;
#X obj 635 352 poltocar~;
#X obj 635 289 cartopol~;
#X obj 635 325 *~;
#X obj 506 290 rfft~;
#X obj 504 375 rifft~;
#X obj 506 348 *~;
#X obj 533 348 *~;
#X obj 548 290 rfft~;
#X obj 548 319 cartopol~;
#X text 27 655 ============================================================
;
#X text 19 16 ============================================================
;
#N canvas 62 64 854 648 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 58 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 text 188 230 "Compressor Espectral";
#X text 295 298 No caso de ambas as partes = 0;
#X text 333 316 Parte Real = 1;
#X text 357 371 "Filtro Espectral";
#X obj 192 544 r \$0-set-block;
#X obj 192 568 block~;
#X obj 340 569 expr~ $v1 / (w_size_\$0 * 1.5);
#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 31 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 29 0 30 0;
#X connect 31 0 9 0;
#X restore 505 595 pd Vocoder;
#X text 56 39 CARREGAR SAMPLES:;
#X text 122 70 Presets ==>;
#X text 46 117 abra outros:;
#X text 470 167 Mas \, se analisarmos bem o que isso significa \, percebemos
que se trata do exemplo de Vocoder sem compressão \, em que há uma
multiplicação das duas amplitudes e a fase de um permanece. Veja abaixo
duas possíveis implementaçõs bem simplificadas que já foram apresentadas:
;
#X obj 275 188 hradio 15 1 0 10 empty empty empty 0 -8 0 10 -262130
-1 -1 0;
#X obj 275 236 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 341 235 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 275 258 pd Window;
#X obj 275 211 expr pow(2 \, $f1 + 7);
#N canvas 142 80 1213 598 Convolução-Circular 0;
#X obj 460 195 cnv 15 230 110 empty empty ConvoluÃ§Ã£o 70 80 0 14 -170806
-66577 0;
#X obj 475 128 *~;
#X obj 475 54 inlet~;
#X obj 637 132 *~;
#X obj 637 49 inlet~;
#X text 474 27 Sample 1;
#X text 637 27 Sample 2;
#X obj 550 443 *~;
#X obj 550 539 outlet~;
#X obj 565 417 tabreceive~ \$0-hann;
#X obj 515 90 tabreceive~ \$0-hann;
#X obj 154 290 *~;
#X obj 195 289 *~;
#X obj 154 317 -~;
#X obj 228 288 *~;
#X obj 260 288 *~;
#X obj 228 322 +~;
#X obj 475 216 expr~ ($v1 * $v3) - ($v2 * $v4) \; ($v2 * $v3) + ($v1
* $v4);
#X obj 154 223 rfft~;
#X obj 246 220 rfft~;
#X obj 177 371 rifft~;
#X obj 475 168 rfft~;
#X obj 637 168 rfft~;
#X obj 549 368 rifft~;
#X obj 867 143 rfft~;
#X obj 940 143 rfft~;
#X obj 855 186 cartopol~;
#X obj 886 267 poltocar~;
#X obj 927 186 cartopol~;
#X obj 886 229 *~;
#X obj 937 228 +~;
#X obj 895 308 rifft~;
#X text 183 123 Re = (Re1 * Re2) - (Im1 * Im2) \; Im = (Im1 * Re2)
+ (Re1 * Im2);
#X text 899 473 comment;
#X text 69 102 Relembrando a multiplicação complexa na forma cartesiana
\, temos a fórmula:;
#X text 753 81 Lembrando as propriedades da matematica complexa \,
sabemos que há uma multiplicação das Amplitudes e uma soma das Fases.
Na forma Polar \, a implementação é a seguinte:;
#X obj 765 349 cnv 15 400 150 empty empty empty 70 80 0 14 -170806
-66577 0;
#X text 71 171 Abaixo temos a implementação com objetos de matemática
\, e à direita uma versão compactada em um objeto [expr~];
#X text 785 375 Nesse caso \, somar as Fases Iniciais significa embaralhar
a informação de frequência de ambas as fontes sonoras.;
#X text 787 413 As somas ocorrem ponto a ponto. Portanto \, cada soma
ocorre dentro de uma das diversas bandas da FFT. E o resultado da soma
fica em "loop" dentro do registro de -pi a pi.;
#X obj 391 476 r \$0-set-block;
#X obj 391 499 block~;
#X obj 550 490 expr~ $v1 / (w_size_\$0 * 1.5);
#X connect 1 0 21 0;
#X connect 2 0 1 0;
#X connect 3 0 22 0;
#X connect 4 0 3 0;
#X connect 7 0 42 0;
#X connect 9 0 7 1;
#X connect 10 0 1 1;
#X connect 10 0 3 1;
#X connect 11 0 13 0;
#X connect 12 0 13 1;
#X connect 13 0 20 0;
#X connect 14 0 16 0;
#X connect 15 0 16 1;
#X connect 16 0 20 1;
#X connect 17 0 23 0;
#X connect 17 1 23 1;
#X connect 18 0 11 0;
#X connect 18 0 15 0;
#X connect 18 1 12 0;
#X connect 18 1 14 0;
#X connect 19 0 11 1;
#X connect 19 0 14 1;
#X connect 19 1 15 1;
#X connect 19 1 12 1;
#X connect 21 0 17 0;
#X connect 21 1 17 1;
#X connect 22 0 17 2;
#X connect 22 1 17 3;
#X connect 23 0 7 0;
#X connect 24 0 26 0;
#X connect 24 1 26 1;
#X connect 25 0 28 0;
#X connect 25 1 28 1;
#X connect 26 0 29 0;
#X connect 26 1 30 0;
#X connect 27 0 31 0;
#X connect 27 1 31 1;
#X connect 28 0 29 1;
#X connect 28 1 30 1;
#X connect 29 0 27 0;
#X connect 30 0 27 1;
#X connect 40 0 41 0;
#X connect 42 0 8 0;
#X restore 101 571 pd Convolução-Circular;
#X text 471 72 Como a Convolução gera um híbrido real e "embaralha"
a informação de Fase dos dois sinais \, pode ser interessante preservar
a Fase de um dos sinais.;
#X text 25 363 A convolução circular é feita como uma multiplicação
no domínio da frequência (o mesmo que multiplicar uma saída de FFT
por outra). Veremos apenas depois quais são as reais implicações e
o porquê dela ser chamada circular quando apresentarmos a forma linear.
Por hora vamos apenas dizer que a convolução linear é forma mais clássica
\, ou "correta" por assim dizer.;
#X text 25 466 Sendo uma multiplicação no domínio da frequência (e
o sinal da FFT complexo) \, trata-se de uma multiplicação complexa.
Abra o subpatch abaixo para mais detalhes da implementação e implicações
do processamento.;
#X text 470 127 Esse tipo de processo incompleto pode ser chamado de
Convolução das Amplitudes (ou "Amplitude-Only-Convolution").;
#X text 464 430 Desse modo \, pode haver uma relação entre Convolução
e o Vocoder. Abaixo temos o exemplo de Vocoder apresentado anteriormente
\, incluindo tanto a Síntese Cruzada como a Convolução das Amplitudes.
Compare esses dois tipos com a Convolução Circular apresentada neste
exemplo:;
#X connect 0 0 1 1;
#X connect 2 0 3 1;
#X connect 4 0 5 1;
#X connect 7 0 3 0;
#X connect 8 0 5 0;
#X connect 9 0 56 1;
#X connect 10 0 56 0;
#X connect 11 0 18 0;
#X connect 12 0 18 1;
#X connect 13 0 18 2;
#X connect 14 0 18 2;
#X connect 15 0 18 2;
#X connect 16 0 18 2;
#X connect 20 0 13 0;
#X connect 22 0 23 1;
#X connect 24 0 46 0;
#X connect 25 0 46 1;
#X connect 28 0 26 0;
#X connect 28 0 46 2;
#X connect 32 0 34 0;
#X connect 32 1 34 1;
#X connect 33 0 36 0;
#X connect 33 1 36 1;
#X connect 34 0 37 1;
#X connect 35 0 31 0;
#X connect 35 1 31 1;
#X connect 36 0 37 0;
#X connect 36 1 35 1;
#X connect 37 0 35 0;
#X connect 38 0 40 0;
#X connect 38 1 41 0;
#X connect 40 0 39 0;
#X connect 41 0 39 1;
#X connect 42 0 43 0;
#X connect 42 1 43 1;
#X connect 43 0 40 1;
#X connect 43 0 41 1;
#X connect 46 0 23 0;
#X connect 51 0 55 0;
#X connect 52 0 54 0;
#X connect 55 0 52 0;
#X connect 56 0 1 0;
