#N canvas 224 74 876 643 10;
#X floatatom 144 153 5 0 0 0 - hz -;
#X text 152 132 Hz;
#X obj 80 233 output~;
#X obj 93 155 noise~;
#X obj 194 173 hsl 128 15 0 0.999 0 0 empty fb empty -2 -6 0 8 -204800
-1 -1 12649 1;
#X floatatom 191 197 0 0 0 0 - - -;
#X text 229 154 feedback;
#X text 43 25 A síntese de Karplus-String é basicamente um ruído branco
sendo filtrado por um Comb Filter! Temos então \, como ponto de partida
\, o que já vimos em exemplos anteriores \, como abaixo \, onde um
ruído branco é filtrado em um Comb Filter simples \, com apenas uma
linha de feedback. E em que a frequência é dada em Hz e convertida
para o período do delay.;
#X obj 262 216 loadbang;
#X obj 100 567 output~;
#X obj 225 515 hsl 128 15 0 0.999 0 0 empty fb empty -2 -6 0 8 -204800
-1 -1 12649 1;
#X floatatom 222 539 0 0 0 0 - - -;
#X text 260 496 feedback;
#X obj 113 460 mtof;
#X obj 200 460 / 127;
#X floatatom 113 485 0 0 0 0 - - -;
#X msg 113 409 36;
#X obj 113 436 makenote 127 10;
#X floatatom 200 411 5 0 0 0 - - -;
#X obj 500 402 output~;
#X obj 658 291 hsl 128 15 0 0.999 0 0 empty fb empty -2 -6 0 8 -204800
-1 -1 12700 1;
#X floatatom 655 315 0 0 0 0 - - -;
#X text 693 272 feedback;
#X obj 513 295 mtof;
#X obj 600 295 / 127;
#X floatatom 513 320 0 0 0 0 - - -;
#X obj 513 271 makenote 127 10;
#X floatatom 600 246 5 10 100 0 - - -;
#X obj 660 367 hsl 128 15 0 10000 0 0 empty cutoff empty -2 -6 0 8
-262130 -1 -1 2700 1;
#X floatatom 657 391 0 0 0 0 - - -;
#X text 695 348 cutoff;
#X msg 262 241 \; hz 65.4 \; fb 0.995 \; cutoff 5700;
#N canvas 442 60 507 485 Karplus-Strong 0;
#X obj 181 422 outlet~;
#X obj 199 256 line~;
#X msg 199 229 \$1 10;
#X obj 317 259 line~;
#X msg 317 232 \$1 10;
#X obj 128 53 inlet;
#X obj 317 56 inlet;
#X text 308 35 feedback;
#X floatatom 199 195 5 0 0 0 - - -;
#X obj 199 165 expr 1000 / $f1;
#X text 243 195 ms;
#X obj 37 226 noise~;
#X obj 99 238 vline~;
#X obj 84 282 *~;
#X obj 203 52 inlet;
#X text 202 32 envelope;
#X text 134 31 Hz;
#X msg 99 210 \$1 5;
#X obj 385 56 inlet;
#X text 383 35 cutoff;
#N canvas 0 22 459 366 feedback 0;
#X obj 133 160 *~;
#X obj 118 191 +~;
#X obj 133 85 vd~ \$0-fb3;
#X obj 151 258 delwrite~ \$0-fb3 1000;
#X obj 151 226 lop~;
#X obj 133 48 inlet~;
#X obj 51 48 inlet~;
#X obj 270 48 inlet~;
#X obj 350 48 inlet;
#X obj 118 294 outlet~;
#X obj 288 199 block~ 1;
#X connect 0 0 1 1;
#X connect 1 0 4 0;
#X connect 1 0 9 0;
#X connect 2 0 0 0;
#X connect 4 0 3 0;
#X connect 5 0 2 0;
#X connect 6 0 1 0;
#X connect 7 0 0 1;
#X connect 8 0 4 1;
#X restore 181 381 pd feedback;
#X floatatom 385 280 5 0 0 0 - - -;
#X connect 1 0 20 1;
#X connect 2 0 1 0;
#X connect 3 0 20 2;
#X connect 4 0 3 0;
#X connect 5 0 9 0;
#X connect 6 0 4 0;
#X connect 8 0 2 0;
#X connect 9 0 8 0;
#X connect 11 0 13 0;
#X connect 12 0 13 1;
#X connect 13 0 20 0;
#X connect 14 0 17 0;
#X connect 17 0 12 0;
#X connect 18 0 21 0;
#X connect 20 0 0 0;
#X connect 21 0 20 3;
#X restore 513 364 pd Karplus-Strong;
#X text 459 480 Essa é uma implementação bem simples \, mas que já
traz bons resultados sonoros. Mude os parâmetros e veja como interferem
no som.;
#X text 452 30 E já estamos quase lá. O último passo é incluir um filtro
Passa Baixa para eliminar essa sobra de agudos. No caso usamos um simples
[lop~] e fazemos isso na seção de feedback. É bom também criar um subpatch
para a seção de feedback com tamanho de bloco igual a 1 para permitir
frequências bem agudas. Veja abaixo como ficou o patch de Karplus-Strong.
;
#X obj 457 183 metro;
#X obj 457 159 tgl 15 0 empty empty empty 17 7 0 10 -261234 -33289
-1 1 1;
#X obj 457 209 expr random(30 \, 50) \; random(200 \, 600);
#X obj 513 249 nbx 2 14 -1e+37 1e+37 0 0 empty empty empty 0 -8 0 10
-204786 -1 -1 31 256;
#X text 486 155 <== Gerador de notas aleatório;
#X text 460 529 Como variações \, podemos pensar em usar um sistema
de feedbacks como o do objeto [comb~]. Também pode ser interessante
utilizar outro tipo de filtro em vez do Passa Baiza ou ainda um ruído
rosa em vez de ruído branco.;
#N canvas 217 82 303 410 comb-filter 0;
#X obj 50 357 outlet~;
#X obj 105 238 *~;
#X obj 50 274 +~;
#X obj 105 181 line~;
#X msg 105 154 \$1 10;
#X obj 50 53 inlet~;
#X obj 175 242 line~;
#X msg 175 215 \$1 10;
#X obj 105 52 inlet;
#X obj 173 53 inlet;
#X text 107 30 tempo;
#X text 164 32 feedback;
#X text 48 29 input;
#X obj 80 313 delwrite~ \$0-fb1 1000;
#X obj 105 213 vd~ \$0-fb1;
#X floatatom 105 120 5 0 0 0 - - -;
#X obj 105 90 expr 1000 / $f1;
#X text 84 118 ms;
#X connect 1 0 2 1;
#X connect 2 0 0 0;
#X connect 2 0 13 0;
#X connect 3 0 14 0;
#X connect 4 0 3 0;
#X connect 5 0 2 0;
#X connect 6 0 1 1;
#X connect 7 0 6 0;
#X connect 8 0 16 0;
#X connect 9 0 7 0;
#X connect 14 0 1 0;
#X connect 15 0 4 0;
#X connect 16 0 15 0;
#X restore 93 195 pd comb-filter;
#N canvas 442 60 602 557 comb-filter 0;
#X obj 184 496 outlet~;
#X obj 199 382 *~;
#X obj 184 413 +~;
#X obj 199 256 line~;
#X msg 199 229 \$1 10;
#X obj 396 248 line~;
#X msg 396 221 \$1 10;
#X obj 128 53 inlet;
#X obj 394 59 inlet;
#X text 385 38 feedback;
#X floatatom 199 195 5 0 0 0 - - -;
#X obj 199 165 expr 1000 / $f1;
#X text 243 195 ms;
#X obj 199 307 vd~ \$0-fb2;
#X obj 214 452 delwrite~ \$0-fb2 1000;
#X obj 37 226 noise~;
#X obj 99 238 vline~;
#X obj 84 282 *~;
#X obj 203 52 inlet;
#X text 202 32 envelope;
#X text 134 31 Hz;
#X msg 99 210 \$1 5;
#X connect 1 0 2 1;
#X connect 2 0 0 0;
#X connect 2 0 14 0;
#X connect 3 0 13 0;
#X connect 4 0 3 0;
#X connect 5 0 1 1;
#X connect 6 0 5 0;
#X connect 7 0 11 0;
#X connect 8 0 6 0;
#X connect 10 0 4 0;
#X connect 11 0 10 0;
#X connect 13 0 1 0;
#X connect 15 0 17 0;
#X connect 16 0 17 1;
#X connect 17 0 2 0;
#X connect 18 0 21 0;
#X connect 21 0 16 0;
#X restore 113 529 pd comb-filter;
#X text 38 315 Vamos aprimorar agora com um Note On e Note Off simples
com um valor curto de 10 ms de duração/sustain. Usamos 0 [makenote]
para emular uma entrada de um teclado MIDI. Abra o subpatch e veja
que temos um ataque e um release de 5 ms no objeto [vline~].;
#X text 198 390 duração/sustain;
#X text 611 201 duração/sustain;
#X obj 603 223 hsl 128 15 10 100 0 0 empty empty empty -2 -8 0 10 -261682
-1 -1 0 1;
#X connect 0 0 41 1;
#X connect 3 0 41 0;
#X connect 4 0 5 0;
#X connect 5 0 41 2;
#X connect 8 0 31 0;
#X connect 10 0 11 0;
#X connect 11 0 42 2;
#X connect 13 0 15 0;
#X connect 14 0 42 1;
#X connect 15 0 42 0;
#X connect 16 0 17 0;
#X connect 17 0 13 0;
#X connect 17 1 14 0;
#X connect 18 0 17 2;
#X connect 20 0 21 0;
#X connect 21 0 32 2;
#X connect 23 0 25 0;
#X connect 24 0 32 1;
#X connect 25 0 32 0;
#X connect 26 0 23 0;
#X connect 26 1 24 0;
#X connect 27 0 26 2;
#X connect 28 0 29 0;
#X connect 29 0 32 3;
#X connect 32 0 19 0;
#X connect 32 0 19 1;
#X connect 35 0 37 0;
#X connect 36 0 35 0;
#X connect 37 0 38 0;
#X connect 37 1 35 1;
#X connect 38 0 26 0;
#X connect 41 0 2 0;
#X connect 41 0 2 1;
#X connect 42 0 9 0;
#X connect 42 0 9 1;
#X connect 46 0 27 0;
