#N canvas 0 49 638 973 10; #X obj 85 268 hsl 128 15 20 12500 1 0 freq-s freq-r Frequência -2 -8 0 10 -262144 -1 -1 12700 1; #X floatatom 82 292 8 20 12500 1 Hz freq-r freq-s; #X floatatom 461 291 8 0 1 1 /1 vol-r vol-s; #X obj 464 268 hsl 128 15 0 1 0 0 vol-s vol-r Volume -2 -8 0 10 -262144 -1 -1 4800 1; #N canvas 0 49 638 973 Processa_Entrada_do_Teclado 0; #X text 474 218 Frequencia; #X obj 65 152 key; #X text 63 132 Entrada do teclado; #X obj 65 267 split 97 122; #X text 69 249 Trata letras minusculas; #X obj 65 371 - 45; #X obj 65 413 mtof; #X text 72 352 Transforma "a" em A2 etc.; #X obj 375 346 sel 48; #X msg 375 368 58; #X obj 230 284 split 49 53; #X obj 312 301 split 54 57; #X text 226 265 Trata [1...5]; #X text 308 282 Trata [6...9]; #X text 379 327 Trata 0; #X obj 230 446 expr $f2*pow(2 \, ($f1-48)/12); #X text 63 42 Este patch converte as letras minusculas do teclado em frequencias \, comecando por a=A2 \, b=A#2 e assim por diante. Os numeros de 1 a 5 sao usados para incrementar a frequencia atual em k semitons \, enquanto os numeros 6 \, 7 \, 8 \, 9 \, 0 correspondem respectivamente a -5 \, -4 \, -3 \, -2 \, -1 semitons.; #X obj 312 408 expr $f2*pow(2 \, ($f1-59)/12); #X text 550 219 Variacao de frequencia; #X text 483 344 Trata +; #X obj 486 363 sel 43; #X obj 554 380 sel 45; #X text 551 361 Trata -; #X obj 501 408 +; #X obj 569 409 -; #X obj 486 450 f; #X obj 554 450 f; #X text 73 393 Converte para Hz; #X text 236 427 Sobe k=[1...5] semitons; #X text 315 389 Desce k=[-5...-1] semitons; #X text 583 449 e guarda resultado; #X text 596 409 Soma/subtrai variacao; #X obj 65 512 f; #X obj 65 232 spigot; #X obj 65 179 sel 27; #X obj 98 206 tgl 15 0 ligateclado ligateclado empty 17 7 0 10 -262144 -1 -1 0 1; #X text 114 178 Controle de liga/desliga funcionamento do teclado com a tecla ESC; #X obj 65 546 expr max(20 \, min($f1 \, 12500)); #X obj 477 239 r freq; #X obj 552 239 r delta; #X obj 65 583 s freq; #X floatatom 90 152 5 0 0 0 - - -; #X obj 631 381 sel 61; #X text 628 363 Trata = como +; #X obj 664 496 sel 32; #X obj 664 611 s tcompensa; #X text 672 475 Trata [ESPACO]; #X obj 679 525 r tcompensa; #X obj 664 552 f; #X obj 664 581 expr 1-$f1; #X connect 1 0 34 0; #X connect 1 0 41 0; #X connect 3 0 5 0; #X connect 3 1 10 0; #X connect 5 0 6 0; #X connect 6 0 32 0; #X connect 8 0 9 0; #X connect 8 1 20 0; #X connect 9 0 17 0; #X connect 10 0 15 0; #X connect 10 1 11 0; #X connect 11 0 17 0; #X connect 11 1 8 0; #X connect 15 0 32 0; #X connect 17 0 32 0; #X connect 20 0 25 0; #X connect 20 1 21 0; #X connect 21 0 26 0; #X connect 21 1 42 0; #X connect 23 0 25 1; #X connect 24 0 26 1; #X connect 25 0 32 0; #X connect 26 0 32 0; #X connect 32 0 37 0; #X connect 33 0 3 0; #X connect 34 0 35 0; #X connect 34 1 33 0; #X connect 35 0 33 1; #X connect 37 0 40 0; #X connect 38 0 15 1; #X connect 38 0 17 1; #X connect 38 0 23 0; #X connect 38 0 24 0; #X connect 39 0 24 1; #X connect 39 0 23 1; #X connect 42 0 25 0; #X connect 42 1 44 0; #X connect 44 0 48 0; #X connect 47 0 48 1; #X connect 48 0 49 0; #X connect 49 0 45 0; #X restore 462 411 pd Processa_Entrada_do_Teclado; #X obj 270 268 hsl 128 15 0 1000 0 0 delta-s delta-r Variação_de_Frequência -2 -8 0 10 -262144 -1 -1 0 1; #X floatatom 267 292 8 0 0 1 Hz delta-r delta-s; #N canvas 0 49 638 973 plota 0; #X obj 59 162 tabwrite curva_de_volume; #X text 56 35 Escreve valores de (frequencia \, amplitude) no grafico ; #X obj 200 122 expr int(100*log($f1)/log(20))-100; #X obj 59 218 r vol; #X obj 59 250 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X msg 59 280 \; curva_de_volume const 0; #X obj 267 248 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X msg 267 278 \; curva_de_volume const 0; #X obj 267 216 r tcompensa; #X obj 60 371 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X msg 60 401 \; curva_de_volume const 0; #X obj 60 339 r metodo; #X text 56 190 reinicializa grafico se muda volume \, compensacao ou metodo; #X obj 59 63 r vol_freq; #X obj 59 85 unpack f f; #X text 199 83 passa frequencia para escala logaritmica; #X text 199 99 e adapta aos indices da tabela; #X text 128 63 recebe pares (vol \, freq); #X connect 2 0 0 1; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 6 0 7 0; #X connect 8 0 6 0; #X connect 9 0 10 0; #X connect 11 0 9 0; #X connect 13 0 14 0; #X connect 14 0 0 0; #X connect 14 1 2 0; #X restore 461 468 pd plota; #X text 78 66 ESC: liga/desliga entrada pelo teclado; #X obj 83 222 tgl 15 0 ligateclado ligateclado Liga/desliga_teclado 17 7 0 10 -262144 -1 -1 0 1; #N canvas 0 49 638 973 controlagui 0; #X obj 30 132 s freq; #X obj 30 102 r freq-s; #X obj 30 162 r freq; #X obj 30 192 list prepend set; #X obj 30 222 list trim; #X obj 30 252 s freq-r; #X obj 147 192 list prepend set; #X obj 147 222 list trim; #X obj 259 192 list prepend set; #X obj 259 222 list trim; #X obj 147 102 r delta-s; #X obj 147 132 s delta; #X obj 147 162 r delta; #X obj 147 252 s delta-r; #X obj 259 102 r vol-s; #X obj 259 132 s vol; #X obj 259 162 r vol; #X obj 259 252 s vol-r; #X text 28 49 http://lists.puredata.info/pipermail/pd-list/2010-01/075713.html ; #X text 28 16 Sincroniza as interfaces slider/numberbox no patch principal \, conforme a receita sugerida em:; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 6 0 7 0; #X connect 7 0 13 0; #X connect 8 0 9 0; #X connect 9 0 17 0; #X connect 10 0 11 0; #X connect 12 0 6 0; #X connect 14 0 15 0; #X connect 16 0 8 0; #X restore 461 439 pd controlagui; #N canvas 0 49 958 1029 toca 0; #X obj 35 100 osc~; #X obj 34 136 *~; #X text 59 135 Corrige amplitude da senoide; #X text 35 57 Gera senoide com frequencia informada; #X obj 35 62 f; #X obj 35 35 r freq; #X obj 35 178 outlet~; #X obj 78 106 r vol_corr; #X connect 0 0 1 0; #X connect 1 0 6 0; #X connect 4 0 0 0; #X connect 5 0 4 0; #X connect 7 0 1 1; #X restore 461 550 pd toca; #X text 80 116 +/-: incrementa/decrementa a frequencia do oscilador pelo valor da variacao de frequencia; #X text 80 174 0 \, 9 \, ... \, 6: decrementa a frequencia em k=1 \, ... \, 5 semitons; #X text 80 152 1 \, 2 \, ... \, 5: incrementa a frequencia em k=1 \, ... \, 5 semitons; #N canvas 0 49 638 973 Compensa_Amplitude 0; #X obj 340 216 rmstodb; #X floatatom 340 245 5 0 0 0 - - -; #X floatatom 198 363 5 0 0 0 - - -; #X obj 198 410 dbtorms; #X floatatom 198 439 5 0 0 0 - - -; #X text 55 107 Frequencia; #X text 337 110 Volume; #X obj 340 283 t b f; #X obj 340 174 * 0.707; #X obj 198 332 +; #X floatatom 56 275 5 0 0 0 - - -; #N canvas 0 49 958 1029 iso226_ou_dBA 0; #X floatatom 106 122 5 0 0 0 - - -; #N canvas 0 49 958 1029 iso226 0; #X obj 58 39 inlet; #X obj 58 318 outlet; #N canvas 0 0 450 300 (subpatch) 0; #X array iso226 31 float 3; #A 0 104.72 104.72 99.1446 93.6944 88.4851 83.963 79.6064 75.3619 71.6095 68.1696 64.6786 61.721 59.0427 56.5496 54.265 52.5898 51.1012 49.9829 50.011 51.9886 52.8753 49.6176 46.9061 46.0502 47.1464 50.479 56.1123 61.7561 63.7798 60.1353 60.1353; #X coords 0 150 31 -10 200 140 1; #X restore 388 47 graph; #X obj 389 242 loadbang; #X obj 58 113 expr max(20 \, min(12500 \, $f1)); #X obj 58 246 - 50; #X obj 58 154 expr 1+28*log($f1/20)/log(625); #N canvas 63 122 886 749 Curvas_ISO 0; #X msg 50 200 \; iso226 0 83.75 83.75 75.7579 68.2089 61.1365 54.9638 49.0098 43.2377 38.1338 33.4772 28.7734 24.8417 21.3272 18.0522 15.1379 12.9768 11.1791 9.99175 9.99962 11.2621 10.4291 7.27444 4.45078 3.04042 3.79606 7.4583 14.3483 20.9841 23.4306 22.3269 22.3269; #X msg 50 300 \; iso226 0 89.5781 89.5781 82.6513 75.9764 69.6171 64.0178 58.552 53.1898 48.3809 43.9414 39.3702 35.5126 31.9922 28.6866 25.6703 23.4263 21.4825 20.1011 20.0052 21.4618 21.4013 18.1515 15.3844 14.2559 15.1415 18.6349 25.0196 31.5227 34.4256 33.0444 33.0444; #X msg 50 400 \; iso226 0 94.8496 94.8496 88.5219 82.3587 76.4545 71.2624 66.1966 61.2219 56.7609 52.6368 48.3826 44.7777 41.4727 38.364 35.5005 33.3699 31.4902 30.1094 30.0083 31.6452 32.0429 28.7625 26.0254 25.0451 26.0185 29.4242 35.4811 41.7446 44.5662 42.5479 42.5479; #X msg 50 500 \; iso226 0 99.8539 99.8539 93.9444 88.1659 82.6287 77.7849 73.0825 68.4779 64.3711 60.5855 56.7022 53.4087 50.3992 47.5775 44.9766 43.0507 41.3392 40.0618 40.01 41.8195 42.5076 39.2296 36.509 35.6089 36.6492 40.0077 45.8283 51.7968 54.2841 51.4859 51.4859; #X msg 450 100 \; iso226 0 104.72 104.72 99.1446 93.6944 88.4851 83.963 79.6064 75.3619 71.6095 68.1696 64.6786 61.721 59.0427 56.5496 54.265 52.5898 51.1012 49.9829 50.011 51.9886 52.8753 49.6176 46.9061 46.0502 47.1464 50.479 56.1123 61.7561 63.7798 60.1353 60.1353; #X msg 450 200 \; iso226 0 109.511 109.511 104.228 99.0779 94.1773 89.9635 85.9434 82.0534 78.6546 75.5635 72.4743 69.8643 67.5348 65.3917 63.451 62.0512 60.815 59.8867 60.0116 62.1549 63.1894 59.9616 57.2552 56.4239 57.5699 60.8882 66.3613 71.664 73.1551 68.6308 68.6308; #X msg 450 300 \; iso226 0 114.262 114.262 109.248 104.383 99.7812 95.8685 92.1801 88.6415 85.5957 82.8546 80.1722 77.9158 75.9443 74.1624 72.5805 71.4694 70.5018 69.7806 70.0119 72.3196 73.4735 70.2811 67.5774 66.7599 67.9526 71.2629 76.5905 81.5431 82.464 77.0421 77.0421; #X msg 450 400 \; iso226 0 118.99 118.99 114.233 109.646 105.337 101.721 98.3618 95.1729 92.4797 90.0892 87.8162 85.9166 84.308 82.8934 81.6786 80.8634 80.1736 79.6691 80.0121 82.4834 83.7408 80.5867 77.8847 77.0748 78.3124 81.6182 86.8087 91.4062 91.7361 85.4068 85.4068; #X msg 450 500 \; iso226 0 123.705 123.705 119.198 114.884 110.865 107.545 104.513 101.673 99.332 97.2924 95.4301 93.8891 92.6462 91.6022 90.7591 90.244 89.837 89.5545 90.0122 92.6466 93.9988 90.8847 88.1836 87.378 88.6594 91.9626 97.0207 101.26 100.988 93.7455 93.7455; #X text 50 180 Curva ISO 226 para 10 phons; #X text 50 280 Curva ISO 226 para 20 phons; #X text 50 380 Curva ISO 226 para 30 phons; #X text 50 480 Curva ISO 226 para 40 phons; #X text 450 80 Curva ISO 226 para 50 phons; #X text 450 180 Curva ISO 226 para 60 phons; #X text 450 280 Curva ISO 226 para 70 phons; #X text 450 380 Curva ISO 226 para 80 phons; #X text 450 480 Curva ISO 226 para 90 phons; #X text 50 80 Curva ISO 226 para 0 phons; #X msg 50 100 \; iso226 0 76.5517 76.5517 65.6189 55.1228 45.534 37.6321 30.865 25.0238 20.51 16.6458 13.116 10.0883 7.54356 5.11374 3.05885 1.48244 0.302919 -0.302646 -0.0102578 1.0335 -1.18632 -4.11159 -7.04616 -9.02601 -8.49438 -4.48288 3.28166 9.82911 10.4757 8.38134 8.38134 ; #X text 360 -50 http://www.mathworks.com/matlabcentral/fileexchange/7028-iso-226-equal-loudness-level-contour-signal ; #X text 48 -90 Os valores a seguir foram obtidos atraves do codigo MATLAB/Octave disponivel na pagina "ISO 226 Equal-Loudness-Level Contour Signal - File Exchange - MATLAB Central" que pode ser acessado no endereco: ; #X text 47 -12 Todos as tabelas se referem aas frequencias (em Hz): 20 25 31.5 40 50 63 80 100 125 160 200 250 315 400 500 630 800 1000 1250 1600 2000 2500 3150 4000 5000 6300 8000 10000 12500; #X restore 474 243 pd Curvas_ISO; #X msg 389 289 \; iso226 0 104.72 104.72 99.1446 93.6944 88.4851 83.963 79.6064 75.3619 71.6095 68.1696 64.6786 61.721 59.0427 56.5496 54.265 52.5898 51.1012 49.9829 50.011 51.9886 52.8753 49.6176 46.9061 46.0502 47.1464 50.479 56.1123 61.7561 63.7798 60.1353 60.1353; #X text 394 269 Curva ISO 226 para 50 phons; #X text 68 94 Limita a frequencia aa faixa [20 \, 12500]; #X text 68 133 Converte para o indice correspondente na tabela; #X text 69 176 Faz a leitura interpolada (cubica) da tabela; #X text 71 224 Ajusta a correcao para o equivalente a 0 phons; #X text 91 244 (esta constante deve ser igual ao; #X text 97 260 nivel de dB da curva ISO 226 usada); #X obj 58 198 tabread4 iso226; #X connect 0 0 4 0; #X connect 3 0 8 0; #X connect 4 0 6 0; #X connect 5 0 1 0; #X connect 6 0 16 0; #X connect 16 0 5 0; #X restore 106 89 pd iso226; #N canvas 0 49 958 1029 dBA 0; #X obj 82 32 inlet; #X text 194 30 Calcula a expressao RA(f) de acordo com; #X text 195 50 http://en.wikipedia.org/wiki/DB(A)#A; #X obj 82 87 *; #X obj 82 115 expr 2+20*log10((14884*10000*pow($f1 \, 2))/(($f1+424.36)*($f1+14884*10000)*sqrt(($f1+11599)*($f1+544496)))) ; #X obj 82 223 outlet; #X obj 82 188 * -1; #X text 88 167 Troca o sinal da expressao para funcionar como compensacao ; #X text 88 66 calcula f^2; #X connect 0 0 3 1; #X connect 0 0 3 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 6 0 5 0; #X restore 187 90 pd dBA; #X floatatom 187 122 5 0 0 0 - - -; #X obj 106 52 inlet; #X text 104 30 Frequencia; #X obj 274 53 inlet; #X text 273 32 Metodo (0=iso226 \, 1=dBA); #X obj 180 177 mux; #X obj 180 217 outlet; #X connect 0 0 8 0; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 8 1; #X connect 4 0 1 0; #X connect 4 0 2 0; #X connect 6 0 8 2; #X connect 8 0 9 0; #X restore 56 247 pd iso226_ou_dBA; #X text 63 226 Calcula o ajuste de amplitude em dB; #X text 343 152 Converte amplitude pico-a-pico em amplitude RMS; #X text 343 195 Converte RMS para dB; #X text 347 264 Garante que a atualizacao sera repassada pelo objeto [+]; #X text 228 327 Combina o volume selecionado pelo slider com a compensacao de frequencia; #X text 203 387 Retorna valores para RMS; #X obj 198 478 / 0.707; #X text 203 458 Converte RMS para pico de amplitude; #X obj 198 726 outlet; #X obj 198 610 expr min(1 \, $f1); #X text 203 589 Garante que a amplitude maxima e' 1; #X text 456 352 Liga/Desliga compensacao de amplitude; #X obj 191 562 mux; #X obj 458 419 t b b f; #X text 465 399 Redireciona o fluxo e atualiza os valores; #X text 508 415 de frequencia e amplitude; #X text 218 563 Seleciona o volume correspondente (original ou compensado) ; #X obj 198 522 f; #X obj 86 520 f; #X text 202 501 volume compensado; #X text 83 501 volume original; #X obj 56 131 r freq; #X obj 340 133 r vol; #X obj 86 475 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 458 376 r tcompensa; #X obj 149 139 r metodo; #X text 54 32 Referencias:; #X text 93 86 http://en.wikipedia.org/wiki/DB(A)#A; #X text 93 54 http://www.mathworks.com/matlabcentral/fileexchange/7028-iso-226-equal-loudness-level-contour-signal/content/iso226.m ; #X obj 129 676 pack f f; #X obj 56 178 t f f f; #X obj 199 642 t f f; #X obj 129 709 s vol_freq; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 18 0; #X connect 7 0 9 0; #X connect 7 1 9 1; #X connect 8 0 0 0; #X connect 9 0 2 0; #X connect 10 0 9 0; #X connect 11 0 10 0; #X connect 18 0 29 0; #X connect 21 0 43 0; #X connect 24 0 21 0; #X connect 25 0 30 0; #X connect 25 1 29 0; #X connect 25 2 24 2; #X connect 29 0 24 1; #X connect 30 0 24 0; #X connect 33 0 42 0; #X connect 34 0 8 0; #X connect 34 0 30 0; #X connect 35 0 30 0; #X connect 36 0 25 0; #X connect 37 0 11 1; #X connect 41 0 44 0; #X connect 42 0 11 0; #X connect 42 1 35 0; #X connect 42 2 41 1; #X connect 43 0 20 0; #X connect 43 1 41 0; #X restore 461 317 pd Compensa_Amplitude; #X obj 266 222 tgl 15 0 tcompensa tcompensa Compensação_de_Volume 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 461 342 8 0 0 1 /1 - vol_corr; #X obj 460 579 output~; #N canvas 0 0 450 300 (subpatch) 0; #X array curva_de_volume 215 float 2; #X coords 0 1 215 0 280 300 1 0 0; #X restore 105 336 graph; #X text 99 641 20; #X text 133 641 50; #X text 162 641 100; #X text 191 641 200; #X text 233 642 500; #X text 261 642 1000; #X text 292 642 2000; #X text 331 642 5000; #X text 379 642 12500 Hz; #X text 94 625 0; #X text 82 596 0.1; #X text 82 567 0.2; #X text 82 537 0.3; #X text 82 507 0.4; #X text 82 476 0.5; #X text 82 446 0.6; #X text 82 416 0.7; #X text 82 387 0.8; #X text 82 356 0.9; #X text 82 328 1; #X text 79 87 [ESPACO]: liga/desliga compensacao de amplitude; #X obj 461 205 vradio 15 1 0 2 metodo empty Método_de_Compensação 0 -8 0 10 -262144 -1 -1 0; #X text 478 203 iso 226; #X text 478 218 dBA; #X text 78 36 Exemplo de compensacao de amplitude (ISO226/dBA); #X connect 11 0 18 0; #X connect 15 0 17 0;