Dúvidas EP3 Maior

Dúvidas EP3 Maior

por Vito Romanelli Tricanico -
Número de respostas: 25

Olá professor. Estou com algumas dúvidas sobre entrada/saída dos objetos. Não entendi como funciona o objeto coll para leitura de arquivos txt. Gostaria também de saber como implementar uma função "floor", pois não encontrei nenhum objeto que faz isso (se houver fale por favor). Outra dúvida é onde devo colocar os dados de saída da resposta impulsiva para depois transformá-la em um arquivo .wav (seria em um array?). Grato desde já.

Em resposta à Vito Romanelli Tricanico

Re: Dúvidas EP3 Maior

por Marcelo Queiroz -

Oi, Vito!

A documentação do objeto [coll] é bastante completa, por isso seria importante você colocar sua dúvida de forma mais específica.

O objeto [int] (e também a função int() dentro de um [expr]) trunca um valor fracionário na sua parte inteira. Isso é exatamente um floor no caso de um argumento positivo, e no caso de um argumento negativo isso produz um valor uma unidade acima do que seria o floor correto (então precisa tratar separadamente o caso positivo e negativo).

A resposta impulsiva deve ser produzida em um array sim, dimensionado conforme o tamanho estipulado na entrada. Lembre-se que os raios entram na resposta impulsiva de forma cumulativa, então sempre precisa ler o valor antigo, somar o novo, e armazenar.

Abraço,

Marcelo

Em resposta à Marcelo Queiroz

Re: Dúvidas EP3 Maior

por Alessandro Palmeira -

Também não me dei bem com o [coll], preferi usar o [textfile] seguido de um [unpack] gigante.. Funcionou direitinho..

Em resposta à Marcelo Queiroz

Re: Dúvidas EP3 Maior

por Vito Romanelli Tricanico -

No caso o textfile me pareceu mais coerente mesmo. Mas estou testando o patch em fase final, e estou em dúvida quanto ao valor I que foi citado no EP. Ele deve der dado em porcentagem (exemplo I = 0.7 = 70%), ou deve ser o numerador da fração, onde 100 já é o denominador citado na fórmula? Pois os valores de Ae e Ad estão dando muito baixos mesmo para coeficientes de absorção baixíssimos (0.2).

Em resposta à Vito Romanelli Tricanico

Re: Dúvidas EP3 Maior

por Marcelo Queiroz -

Olás!

Vito, a descrição "Fração (%)" está mal-escrita... Em todas as fórmulas onde aparece I*T/100 está implícito que I é o numerador (I=70 em 70%). Para que eu possa testar os programas usando os mesmos arquivos de entrada, vamos convencionar que essa é a interpretação correta (e que a palavra "Fração" estava errada), ok?

Marcelo

Em resposta à Vito Romanelli Tricanico

Re: Dúvidas EP3 Maior

por Antonio Abello -

Eu estou com algumas dúvidas na primeira parte da resposta impulsiva...

Se eu entendi até aqui, no final precisamos aplicar aquele grupo de laços, substituindo o comentário /*processa raio da sala (i, j, k)*/ por aquela fórmula para a amplitude no ouvido esquerdo e no ouvido direito; Ai = ( (1 - alpha) ^ (|i| + |j| + |k|))/ci

Minha dúvida então é: como eu sei em que posição do vetor entra essa amplitude que eu acabei de calcular?

Obrigado,

Antonio

Em resposta à Antonio Abello

Re: Dúvidas EP3 Maior

por Marcelo Queiroz -

Oi, Antonio!

A posição no vetor corresponde ao tempo de atraso de chegada dessa reflexão (te e td no enunciado) convertidos em índice de amostra (levando em consideração que o vetor representa um sinal com 44100 amostras por segundo).

Marcelo

Em resposta à Marcelo Queiroz

Re: Dúvidas EP3 Maior

por Antonio Abello -

Obrigado, professor!
É possível fazer um vetor com esse tamanho no puredata? Ou teremos que usar algum truque para guardar eficientemente?

Antonio

Em resposta à Antonio Abello

Re: Dúvidas EP3 Maior

por Marcelo Queiroz -

Oi, Antonio!

Consegui criar um vetor no Pd com tamanho 1000000 sem grandes problemas... isso daria 22 segundos de áudio, é muito tempo para uma resposta impulsiva (a Notre Dame tem reverberação de 8.5 segundos...). Acredito que você não terá problemas, mas poste aqui qualquer dúvida.

Marcelo

Em resposta à Marcelo Queiroz

Re: Dúvidas EP3 Maior

por Vito Romanelli Tricanico -

Professor, o tamanho do array é o tempo da resposta impulsiva (definido no arquivo texto) vezes 44100, certo? Meu problema está sendo definir os índices.

Em resposta à Vito Romanelli Tricanico

Re: Dúvidas EP3 Maior

por Bruno Maldonado Brisola -

Professor,  fiquei com duas dúvidas:

- No calculo das posições das fontes virtuais (PX, PY e PZ), o que  significam os colchetes utilizados na formula ? Suponho que seja uma operação "div".

-Os expoentes "i" de "(-1)^i", não deveriam ser "i" para calcular PX, "j" para calcular  PY e "k" para calcular PZ? No enuciado é utilizado "i" como expoente para todos...

Em resposta à Bruno Maldonado Brisola

Re: Dúvidas EP3 Maior

por Vito Romanelli Tricanico -

Bruno, se me permite explicar, aquilo são na verdade símbolos de floor, função "chão" (exemplos: floor(3.45)=3, floor(5.1112)=5, floor(-4.3)=-5 ), que no pd se calcula com [int], ou "int" dentro do [expr], e quanto aos expoentes, acho que saiu errado no enunciado mesmo rs. Tem que tomar cuidado com o floor para valores negativos, pois no Pd ele calcula com uma unidade acima do que devia. Para resolver isto usei um [moses 0] fora do [expr], e um [- 1] para as saídas negativas.

Em resposta à Vito Romanelli Tricanico

Re: Dúvidas EP3 Maior

por Igor Oliveira Borges -

Professor seria possível adiar a entrega do EP3 pra 14/12, ajudaria bastante pra que terminasse todos os objetivos propostos, sei que dificulta um pouco no seu prazo de correção, mas ainda assim seria de grande ajuda. Imagino que muitos tenham se enrolado com tantas provas do final de semestre e estejam um pouco atrasado.

Por isso peço que reconsidere tal prazo.

Abraço.

Igor Oliveira Borges

Em resposta à Igor Oliveira Borges

Re: Dúvidas EP3 Maior

por Marcelo Queiroz -

Pessoal, vamos por partes:

Vito: o tamanho de cada vetor da resposta impulsiva é 44100*T. Se você quer colocar uma informação no instante correspondente a t segundos, o índice correspondente é int(t/44100+0.5) (o +0.5 é para arredondar, mas se quiser deixar truncado sem +0.5 também não há grande problema).

Bruno: a resposta do Vito para as suas dúvidas está quase perfeita. O símbolo corresponde ao floor() e os expoentes são i, j e k. A única observação é que int() (truncamento da parte fracionária) e floor() (maior inteiro menor ou igual ao argumento) são operações diferentes, e o Pd computa *corretamente* o int(), ou seja int(-2.9)=-2, e para se obter floor(-2.9)=-3 deve-se adaptar a saída do int() (se x<0 e x<int(x) então floor(x)=int(x)-1; se x<0 e x==int(x) então floor(x)=x <== atenção a este caso!).

Igor: como eu expliquei antes as notas têm que estar no Júpiter no dia 15. Fica impossível deixar a entrega para o dia 14. O máximo que dá para ajudar é mudar a entrega para o sábado dia 13 até 23:55. Vou fazer a alteração no PACA agora.

Marcelo

 

Em resposta à Marcelo Queiroz

Re: Dúvidas EP3 Maior

por Vito Romanelli Tricanico -

Professor, o índice correspondente não seria int(t*44100)? Pois dividindo, a resposta impulsiva fica com apenas um pico gigante no inicio, agora vezes, que é o que eu acho que era pela equação de conversão ( T(ms) = N (amostra)/44100 ), fica com cara de resposta impulsiva, com os valores decaindo com o tempo.

Em resposta à Vito Romanelli Tricanico

Re: Dúvidas EP3 Maior

por Marcelo Queiroz -

Sim, Vito, claro, int(t*44100). Desculpe-me, estou fazendo muitas coisas simultaneamente, e o chaveamento mental está começando a dar tilt.

Em resposta à Marcelo Queiroz

Re: Dúvidas EP3 Maior

por Vito Romanelli Tricanico -

Haha sim, compreendo, acontece rs.

Em resposta à Vito Romanelli Tricanico

Re: Dúvidas EP3 Maior

por Thilo Koch -

Tenho uma pergunta sobre o desempenho da auralização~: Como eu entendi devemos implementar a convolução no domínio do tempo. Então temos (com uma resposta impulsiva de 1s) pelo menos 44100 multiplicações, 44100 adições etc. para cada amostra de entrada. Com uma SR de 44100/s temos então 22 micro segundos para fazer tudo isso ... Na minha experiência isso não é viável.

Minhas perguntas: Entendi mal? Não estou vendo o truque?

Em resposta à Thilo Koch

Re: Dúvidas EP3 Maior

por Marcelo Queiroz -

Oi, Thilo!

Você terminou a implementação e ela não funcionou? Funciona com uma resposta impulsiva menor?

Não há nenhum truque esperado na implementação. É natural que cada máquina tenha um limite diferente para a quantidade de operações factíveis em 22 microssegundos (ou melhor dizendo, em 1.45 milissegundos, que é o tamanho do bloco default). A partir desse ponto a operação do Pd em tempo real irá "engasgar", o que não quer dizer necessariamente que a implementação esteja errada.

Minha sugestão pragmática é testar o objeto [auraliza_sala~] gravando a saída dele com um [writesf~ 2] (ao invés de usar o [dac~] ou [output~]). Se a saída gravada em arquivo estiver correspondendo ao esperado, então está tudo bem, não se preocupe! Se preferir, dá até para fazer esses testes com "pd -batch arquivoteste.pd" (basta criar um arquivo que dispare com [loadbang] todas as mensagens de inicialização necessárias para começar a auralização).

Marcelo

Em resposta à Marcelo Queiroz

Re: Dúvidas EP3 Maior

por Thilo Koch -

Obrigado pela resposta.

Sim implementei e funciona. Os problemas na minha implementação começam +/- com 15 amostras na IR (até agora). Alguém consegue muito mais?

Vou implementar sua sugestão.

Thilo.

 

Em resposta à Marcelo Queiroz

Re: Dúvidas EP3 Maior

por Vito Romanelli Tricanico -

Professor, o senhor não fez a alteração da data de entrega no PACA. A data ainda está adiada para amanhã às 23:55?