#N canvas 121 22 693 482 10;
#N canvas 574 244 606 392 Compressor 0;
#X obj 56 33 inlet~;
#X obj 56 334 outlet~;
#X obj 48 107 cnv 15 320 160 empty empty empty 20 12 0 14 -204800 -66577
0;
#X obj 56 78 *~;
#X obj 56 118 rfft~;
#X obj 56 279 rifft~;
#X obj 56 233 /~;
#X obj 88 233 /~;
#X obj 103 204 clip~ 1 1;
#X obj 195 33 inlet;
#X obj 71 55 tabreceive~ \$0-hann;
#X floatatom 195 206 5 0 0 0 - - -;
#X floatatom 318 206 5 0 0 0 - - -;
#X obj 103 151 cartopol~;
#X obj 275 286 tabreceive~ \$0-hann;
#X floatatom 195 78 5 0 100 0 - - -;
#X obj 195 139 expr 1 - ($f1 / 100) \; if ($f1 <= 1 \, 1 \, $f1 * $f1)
;
#X obj 250 39 r \$0-set-block;
#X obj 250 63 block~;
#X obj 56 308 expr~ ($v1 * $v2) / (w_size_\$0 * 1.5);
#X text 392 137 limita os valores a 1 ou deixa os;
#X text 400 153 valores de amplitudes passar;
#X text 371 146 <==;
#X text 297 308 normalização;
#X connect 0 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 6 0;
#X connect 4 0 13 0;
#X connect 4 1 7 0;
#X connect 4 1 13 1;
#X connect 5 0 19 0;
#X connect 6 0 5 0;
#X connect 7 0 5 1;
#X connect 8 0 7 1;
#X connect 8 0 6 1;
#X connect 9 0 15 0;
#X connect 10 0 3 1;
#X connect 13 0 8 0;
#X connect 14 0 19 1;
#X connect 15 0 16 0;
#X connect 16 0 8 1;
#X connect 16 0 11 0;
#X connect 16 1 8 2;
#X connect 16 1 12 0;
#X connect 17 0 18 0;
#X connect 19 0 1 0;
#X restore 449 174 pd Compressor;
#X obj 541 58 vsl 15 100 0 100 0 0 empty empty empty 0 -9 0 10 -204786
-1 -1 0 1;
#X obj 541 175 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-204786 -1 -1 0 256;
#X obj 491 206 hsl 100 15 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 449 228 pd gain;
#X obj 503 356 hsl 100 15 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 461 377 pd gain;
#X floatatom 554 296 5 0 0 1 - - -;
#X obj 43 122 readsf~;
#X obj 43 27 loadbang;
#X obj 449 142 r~ \$0-sample;
#X obj 43 147 s~ \$0-sample;
#X obj 461 295 r~ \$0-sample;
#X text 561 150 Original;
#X text 560 50 Comprimido;
#X msg 43 50 bang \; pd dsp 1;
#N canvas 698 52 483 593 Examplo_do_Pd 0;
#X obj 32 86 inlet~;
#X obj 32 550 outlet~;
#X obj 13 152 cnv 15 450 290 empty empty empty 20 12 0 14 -204800 -66577
0;
#X obj 59 410 *~;
#X obj 32 410 *~;
#X obj 32 121 *~;
#X obj 32 164 rfft~;
#X obj 95 217 *~;
#X obj 67 217 *~;
#X obj 74 241 +~;
#X obj 74 276 +~ 1e-20;
#X obj 74 304 q8_rsqrt~;
#X floatatom 305 324 8 0 0 0 - - -;
#X obj 305 83 inlet;
#X obj 32 455 rifft~;
#X text 84 332 1 / Amplitude;
#X obj 305 300 expr pow($f1 \, 2) / 100;
#X text 310 353 "SQUELCH";
#X floatatom 305 275 5 0 0 0 - - -;
#X obj 67 124 tabreceive~ \$0-hann;
#X text 34 22 Implementação equivalente ao exemplo "I05.Compressor"
do Miller Puckette \, disponível no Pd.;
#X text 64 304 *;
#X text 133 305 inverso da raiz quadrada;
#X text 90 451 * quick 8 bit reciprocal square root - recíproco (inversão)
da raiz quadrada com resolução de 8 bits (portanto \, "rápida").;
#X text 134 277 Evita divisão por 0;
#X text 101 242 Parte do cálculo de Amplitude;
#X obj 74 379 clip~;
#X obj 251 499 tabreceive~ \$0-hann;
#X obj 197 101 r \$0-set-block;
#X obj 197 125 block~;
#X obj 32 521 expr~ ($v1 * $v2) / (w_size_\$0 * 1.5);
#X text 270 523 normalização;
#X connect 0 0 5 0;
#X connect 3 0 14 1;
#X connect 4 0 14 0;
#X connect 5 0 6 0;
#X connect 6 0 8 0;
#X connect 6 0 8 1;
#X connect 6 0 4 0;
#X connect 6 1 7 0;
#X connect 6 1 7 1;
#X connect 6 1 3 0;
#X connect 7 0 9 1;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 11 0 26 0;
#X connect 12 0 26 2;
#X connect 13 0 18 0;
#X connect 14 0 30 0;
#X connect 16 0 12 0;
#X connect 18 0 16 0;
#X connect 19 0 5 1;
#X connect 26 0 4 1;
#X connect 26 0 3 1;
#X connect 27 0 30 1;
#X connect 28 0 29 0;
#X connect 30 0 1 0;
#X restore 461 321 pd Examplo_do_Pd;
#X text 589 294 "squelch";
#X obj 288 46 hradio 15 1 0 4 empty empty empty 0 -8 0 10 -262130 -1
-1 0;
#X obj 288 69 expr pow(2 \, $f1 + 10);
#X obj 288 100 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 346 97 tamanho da janela;
#N canvas 634 71 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 333 s \$0-set-block;
#X obj 259 195 t b f;
#X msg 289 222 resize \$1;
#X obj 289 244 s \$0-hann;
#X obj 259 281 v w_size_\$0;
#X obj 386 160 samplerate~;
#X obj 386 185 v sr_\$0;
#X obj 386 63 loadbang;
#X obj 386 84 \$0;
#X obj 259 21 inlet;
#X msg 259 306 set \$1 4;
#X msg 386 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 288 125 pd Window;
#X text 51 304 Há um exemplo original do Pd que é um pouco diferente.
Em vez de dividir pela amplitude \, multiplicamos pela inversão - ou
"recíproco" - da amplitude (1 / amplitude). Além disso \, o objeto
[clip~] não faz com que o som original seja 100% preservado (já que
não força o valor a ficar igual a 1).;
#X text 55 398 Veja dentro dos subpatches para mais informações.;
#X msg 43 95 open ../samples/bubul.wav \, start;
#X text 51 199 O "Compressor Espectral" é uma adaptação do exemplo
anterior. Incluímos no patch o objeto [clip~]. Assim podemos limitar
os valores de amplitudes em 1 \, de modo que \, ao dividirmos por um
\, o sinal original permanece inalterado. Porém \, ao subirmos com
o slider \, o [clip] deixa passar os valores de amplitudes e \, assim
\, obtemos o sinal completamente normalizado como anteriormente.;
#X connect 0 0 4 0;
#X connect 1 0 2 0;
#X connect 1 0 0 1;
#X connect 3 0 4 1;
#X connect 5 0 6 1;
#X connect 7 0 16 1;
#X connect 8 0 11 0;
#X connect 8 1 25 0;
#X connect 9 0 15 0;
#X connect 10 0 0 0;
#X connect 12 0 16 0;
#X connect 15 0 25 0;
#X connect 16 0 6 0;
#X connect 18 0 19 0;
#X connect 19 0 20 0;
#X connect 20 0 22 0;
#X connect 25 0 8 0;
