ADSR~

ADSR~

por Athos Petri Damiani -
Número de respostas: 6

Olá professores! Pode ser um pouco tarde para ter essa dúvida, mas acho que será útil mais para frente. Estou com dificuldades em encontrar onde estou pecando ao fazer o envelope ADSR. Quando eu simplesmente pressiono uma tecla rapidamente, tudo ocorre como esperado, mas o problema aparece quando eu mantenho a tecla pressionada. Quando eu mantenho a tecla pressionada, o som fica pulsando, como se o ataque ficasse recomeçando, causando um som totalmente fora do esperado.

O que eu reparei é que quando se pressiona uma tecla do teclado, o objeto [key] fica lançando várias vezes o seu output. Por exemplo, quando eu pressiono a tecla A, o [key] dá print de vários 97's, como aconteceria se pressionasse uma letra num editor de texto (acontece até aquele lance de demorar um pouquinho mais entre a primeira e a segunda letra antes  dele começar a repetir a letra rapidamente). 

Tentei algumas gambiarras, mas sem sucesso. Também falhei em encontrar algo no Google (procurei até nas segundas páginas =]).

O que preciso é que ele identifique a tecla pressionada e não fique interpretando cada outuput repetido do key como um 'bang'.

Abraço!

Em resposta à Athos Petri Damiani

Re: ADSR~

por Brian Vasconcelos -

Olá. Não sou um dos professores mas tive um problema semelhante com meu sintetizador. Creio que esteja usando Linux? Enfim, se não estiver a causa do problema ainda deve ser semelhante para você.

Pelo menos aqui, isso acontecia porque o X implementa repetição de teclas da maneira mais bruta possível, mandando uma porrada de pares keypress/keyrelease com um intervalo pré-determinado. Então a não ser que uma aplicação tome controle do teclado ela vai ficar recebendo esses sinais e é impossível(a meu conhecimento) distingüir entre eles e o usuário realmente pressionando/soltando uma tecla.

Você pode testar se é esse o problema mexendo nas configurações de repetição automática de teclas do seu sistema e vendo se melhora alguma coisa, provavelmente dá para desligar essa função completamente também.

Aqui os comandos para ligar e desligar isso são xset r on e xset r off. Você pode mandar eles como mensagens para um objeto [shell] (o que eu fiz) ou usar um shell script que desliga a função, roda o pd e liga ela denovo quando o processo do pd termina (o que eu deveria ter feito).

Enfim, aqui está uma thread de uma lista de discussão que me ajudou com o problema, tem informações de como mexer com repetição de teclas no Mac também, se for o caso: http://markmail.org/message/mdll42gjybjcuomb .

Espero ter ajudado, bom dia.

Em resposta à Brian Vasconcelos

Re: ADSR~

por Antonio Deusany de Carvalho Junior -

Eu resolvi o problema de repetição utilizando um patch deste forum:

http://puredata.hurleur.com/sujet-7295-double-triggers-keyboard

Mas, pelo link que o Brian passou, vi que é muito mais fácil utilizar o [hid] . Testei pelo help dele, e ele trata tecla pressionada como tecla pressionada, pois mesmo que o sistema fique repetindo, ele não muda nada na saída.

= )
DJ

Em resposta à Antonio Deusany de Carvalho Junior

Re: ADSR~

por Brian Vasconcelos -

Fantástica essa abstração do fórum. Obrigado pelo link.

[hid] é uma boa mas infelizmente não quebra o galho para quem ainda usa teclado PS/2.

Em resposta à Brian Vasconcelos

Re: ADSR~

por Marcelo Queiroz -

Oi, pessoal!

Legal essa discussão. Eu não tinha antecipado esse problema... fiz um patch que é uma alternativa àquele do fórum, ao meu ver mais interessante porque não depende de uma instância para cada tecla. Basicamente eu filtrei keys iguais repetidos só deixando passar o primeiro, e filtrei keyups repetidos, só deixando passar o último.

O patch funciona bem para o keydown, mas não é perfeito para o keyup pois depende de atrasar a resposta alguns milissegundos (esperando por eventuais keyups repetidos). No meu computador o atraso de 70ms funcionou bem sempre, ao passo que 60ms ou 50ms às vezes produziam algum keyup repetido (se bem que para o sintetizador isso não seria grave, me parece).

Abraços,

Marcelo

 

Em resposta à Marcelo Queiroz

Re: ADSR~

por Fernando Aluani -

Eu só lembrei de mencionar isso agora que eu vi a correção do primeiro trabalho, onde o monitor notou que o meu tinha o problema de ataque das notas quando segura o botão.

 

Esse problema não acontece no Windows, que foi onde desenvolvi. Mas vi um colega testando no Linux o trabalho dele e tinha esse problema lá.

Em resposta à Fernando Aluani

Re: ADSR~

por Marcelo Queiroz -

Oi, pessoal!

Conversando com o Antonio nós achamos que, embora os comentários da correção em relação a este problema das teclas sejam pertinentes de modo geral, não havia necessidade de descontar nota de quem não observou o problema ou mesmo de quem observou e não soube como resolvê-lo, dada a especificidade em relação ao sistema operacional. Por isso as notas serão revisadas e atualizadas no PACA em breve.

No futuro, será bastante produtivo para a turma compartilharmos sempre no fórum as experiências e dificuldades encontradas em cada plataforma, porque embora o núcleo de processamento sonoro do Pd seja bastante genérico e independente de plataforma, alguns objetos específicos, especialmente aqueles ligados a interfaces, podem se comportar diferentemente nos diversos SOs que usamos. Não é assim em geral, mas pode acontecer.

Abraços,

Marcelo