#N canvas 141 23 904 600 10;
#X obj 164 479 samplerate~;
#X floatatom 164 504 0 0 0 0 - - -;
#X obj 164 356 loadbang;
#X obj 594 122 output~;
#X obj 594 60 nbx 5 14 -1e+37 1e+37 0 0 empty hz empty 0 -8 0 10 -261682
-1 -1 440 256;
#X msg 180 402 \; pd dsp 1 \; hz 440;
#N canvas 317 59 913 649 Resampling 0;
#X obj 127 352 inlet;
#X obj 127 480 outlet~;
#X obj 290 520 samplerate~;
#X obj 290 555 nbx 6 20 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 14
-241261 -1 -1 0 256;
#X obj 290 485 trigger bang float;
#X msg 300 335 0.5;
#X msg 285 308 0.25;
#X msg 321 359 1;
#X msg 334 391 2;
#X msg 342 415 4;
#X msg 260 285 0.125;
#X msg 346 445 8;
#X obj 395 575 block~;
#X obj 127 410 osc~ 440;
#X text 479 531 O resampleamento é o terceiro argumento que o [block~]
recebe. O primeiro é o tamanho do bloco e o segundo é o "overlaping"
(algo que veremos em análise de FFT).;
#X text 353 358 Sem resampleamento;
#X text 332 332 Downsamping pela metade;
#X text 327 307 Downsamping por um quarto;
#X text 364 390 Upsamping pelo dobro;
#X text 376 444 Upsamping por oito vezes;
#X text 370 414 Upsamping por quatro vezes;
#X text 187 35 O resampleamento é feito a partir de um valor de razão.
Por exemplo \, 2 é o dobro \, 0.5 é a metade. É necessário que esse
valor seja sempre uma potência de dois \, tanto para upsampling (2
\, 4 \, 8 \, 16 \, 32) quanto para downsampling (1/2 \, 1/4 \, 1/8
\, 1/16 \, 1/32).;
#X text 190 116 Clique nas mensagens abaixo e confira como neste subatch
o [samplerate~] nos dá um valor diferente da Taxa de Amostragem de
acordo com o resampleamento.;
#X text 196 175 Perceba também que um downsampling acaba prejudicando
a geração sonora do oscilador mesmo para frequências abaixo do Nyquist.
Isso porque a mudança de taxa de amostragem para baixo acaba prejudicando
o funcionamento do objeto como um todo.;
#X msg 395 539 set 64 1 \$1;
#X text 304 281 Downsamping por um oitava;
#X connect 0 0 13 0;
#X connect 2 0 3 0;
#X connect 4 0 2 0;
#X connect 4 1 24 0;
#X connect 5 0 4 0;
#X connect 6 0 4 0;
#X connect 7 0 4 0;
#X connect 8 0 4 0;
#X connect 9 0 4 0;
#X connect 10 0 4 0;
#X connect 11 0 4 0;
#X connect 13 0 1 0;
#X connect 24 0 12 0;
#X restore 594 90 pd Resampling;
#X text 457 22 Abra o subpatch [pd Resampling] abaixo para conferir
o resampleamento.;
#X text 57 18 Os objetos [block~] e [switch~] \, além de serem capazes
de mudar o tamanho do bloco do patch ou subpatch \, também permitem
um resampleamento - tanto "downsampling" como "upsampling" \, que seria
\, respectivamente \, abaixar ou aumentar a taxa de amostragem em relação
a que está rodando no Pd.;
#X text 57 106 Já foi dito que a taxa de amostragem que o Pd roda costuma
ser de 44100 Hz \, mas que pode ser mudada nas configurações do programa.
Todavia \, neste exemplo \, estamos mudando com o [block~].;
#X text 58 173 É mais pertinente que esse tipo de processamento seja
feito em um subpatch \, pelo mesmo motivo que mudar o tamanho de bloco
(conflitos no funcionamento de objetos como [adc~] e [dac~].;
#X text 60 232 Um detalhe técnico é que os objetos [inlet~] e [outlet~]
trabalham muito bem e automaticamente na conversão de tamanho de bloco
e taxa de amostragem.;
#X text 460 204 Há uma relação com a mudança da taxa de amostragem
e o tamanho do bloco \, é por isso que um objeto como o [block~] também
cuida do resampleamento.;
#X text 461 257 Por exemplo \, um oscilador com frequência de 689.062Hz
tem um período que dura 64 amostras numa taxa de 44.1Khz. Em um upsampling
de 2x \, a taxa é de 88.2kHz e o período tem 128 amostras \, o dobro
de número de amostras.;
#X text 462 320 Portanto \, por mais que o bloco esteja definido por
64 \, temos \, na prática \, um bloco de 128 amostras. Porém \, a leitura
dessas amostras é feita mais rápida \, em uma taxa de amostragem maior.
Logo \, mudar a taxa de amostragem \, além de definir uma frequência
diferente de leitura das amostras \, também implica em mudar o tamanho
do bloco.;
#X text 462 414 É importante perceber que \, no caso de um oscilador
por exemplo \, mudar a velocidade de leitura implica em mudar a frequência.
Isso porque \, em um upsampling de 2x \, estamos lendo as amostras
duas vezes mais rápido. Porém \, podemos perceber que a frequência
do oscilador neste exemplo não muda. Isso significa que o objeto [osc~]
recebe informação sobre o upsampling realizado pelo [block~] para um
ajuste de frequência de oscilação.;
#X text 61 283 Pois bem \, vejamos aqui no patch qual é a taxa de amostragem
que o Pd está rodando. Em seguida \, num subpatch acima à direita \,
teremos o resampleamento com o [blcok~] em relação a esse valor.;
#X text 214 505 <= taxa de amostragem do Pd;
#X connect 0 0 1 0;
#X connect 2 0 0 0;
#X connect 2 0 5 0;
#X connect 4 0 6 0;
#X connect 6 0 3 0;
#X connect 6 0 3 1;
