Primeira aula prática e primeiro trabalho menor

Primeira aula prática e primeiro trabalho menor

por Marcelo Queiroz -
Número de respostas: 4

Boa tarde, pessoal!

Hoje tivemos nossa primeira aula prática, e com ela alguns contratempos que prejudicaram o planejamento do trabalho de implementação que iríamos entregar. Escrevo esse e-mail para pedir um pouco de paciência a vocês: faremos todo o possível para que as próximas aulas práticas sejam muito mais produtivas. Enquanto isso, algumas observações e dicas:

1) Farei testes essa semana no laboratório para garantir que não teremos problemas técnicos com o som ou com a interface na próxima aula: as falhas intermitentes que observamos hoje não são uma característica nem do Pd nem do Linux. Por outro lado, quem quiser trazer seu próprio computador continua sendo muito bem-vindo a fazê-lo.

2) O roteiro para o primeiro trabalho prático não foi pensado como uma corrida contra o tempo, e sim como uma sessão experimental onde poderíamos testar ideias, brincar com as expressões e parâmetros, e mapear representações matemáticas em propriedades perceptuais da nossa escuta. Só que era muita coisa... (fui muito otimista em relação à duração da aula). Considero muito importante que tentemos todos fazer o roteiro até o fim, mesmo que leve bastante tempo: vou deixar a entrega no PACA aberta durante duas semanas, até a próxima aula prática. Tenham em mente que muitas expressões estão naquele roteiro apenas para provocar nossa curiosidade em relação a técnicas que serão discutidas ao longo do semestre: não seria possível nessa altura entender porque os sons modificados soam como soam, mas é possível prestar atenção neles e tentar descrever intuitivamente suas propriedades e as diferenças entre eles (esse é o único objetivo dos comentários que vocês devem incluir nas implementações).

3) A partir das próximas aulas vou trazer vários exemplos em Pd, nos quais veremos que muitas coisas que fizemos hoje podem ser feitas de várias maneiras diferentes. O uso da linguagem Lua no Pd abre muitas portas para coisas que faremos durante o semestre, razão pela qual a estamos usando desde o início, porém algumas coisas podem parecer um pouco burocráticas, especialmente os métodos de acesso a posições de vetores. Para relembrar, um vetor do Pd é acessado em Lua através de uma variável local, como

local v = ofArray("array1");

(no ofelia 2.3 use pdArray ao invés de ofArray), e os métodos para acessar e modificar o vetor são chamados v:getAt e v:setAt; especificamente, quando quisermos usar v[i] em uma expressão, usaremos v:getAt(i), e quanto quisermos fazer uma atribuição do tipo v[i] = expressão, usaremos v:setAt(i,expressão); Essa é só uma adaptação sintática que logo nos acostumamos.

Especialmente quando estivermos usando dois ou mais vetores, pode ser útil armazenar os resultados intermediários em outras variáveis para aumentar a legibilidade: assim, poderíamos escrever sequências como

local v = ofArray("array1");
local w = ofArray("array2");
for i=0,88199 do;
  x = v:getAt(i);
  y = math.sin(2*math.pi*550*2^(a/12)*i/44100);
  w:setAt(i,x+y);
end;

Agora algumas dicas adicionais para a continuação do roteiro:

4) Lembrem-se que ao "disparar" um valor numérico para dentro de um script ofelia, o parâmetro correspondente é chamado de a (o valor a nas expressões em Lua será substituído pelo valor inteiro do seletor). No exemplo acima, esse a é o expoente associado ao "fator semitom" = 2^(1/12). Por sinal, quem escreveu essa expressão deve ter percebido que Lua usa a divisão inteira em 1/12, resultando em 2^0 = 1 (isso pode ser evitado escrevendo 2^(1.0/12)).

5) No item 8, todas as transformações produzem valores na faixa correta de representação [-1,...,+1] (não é necessário ajustar nenhuma das fórmulas).

6) No item 10 usaremos a função math.random(), que produz valores aleatórios entre [0,...,1].

7) No item 11, combinem as expressões para expressar a Amplitude (que é o fator multiplicativo que colocaremos na frente da expressão) em função do Loudness (que deveria representar nossa escala perceptual); para isso, mapeiem os valores a= 0, 1,..., 19, 20 produzidos pelo seletor horizontal em valores de Loudness iguais a 0, 0.05, 0.1,..., 0.95, 1, para então transformar esses valores em fatores multiplicativos de amplitude também entre 0 e 1. Certifiquem-se de compreender a transformação: nesse mapeamento, as Amplitudes são menores ou maiores do que os valores equivalentes de Loudness?

8) As manipulações dos itens 12, 13 e 14 envolvem duas tabelas simultaneamente, a primeira (denotada por x) inicializada com um ruído branco e outra (denotada por y) que vai sendo preenchida com valores novos dentro de um laço. Observe que y[n] pode depender tanto de mais de um valor de x como também de outros valores de y computados anteriormente. Nessas expressões, não se preocupem em verificar se os índices (n-1 ou n-2) existem ou fazem sentido: transcrevam as fórmulas da maneira mais simples e direta possível (valores diferentes nas duas ou três primeiras amostras não mudarão em nada o som resultante).

9) No item 13, vocês precisarão calcular o máximo valor absoluto produzido na segunda tabela, para em seguida (em um novo laço) dividir  todas as amostras por esse valor. O cálculo do máximo valor absoluto pode ser feito no mesmo laço que computa a expressão y[n]=x[n]+y[n-1], usando uma variável max e as funções math.max() e math.abs().

10) No item 15, para atualizar as variáveis x2,...,x6 apenas nos índices correspondentes, utilize o comando if e o teste de divisibilidade por 2, 4, 8, 16 e 32; por exemplo:

if i%8==0 then x4 = 2*math.random()-1 end

só vai atualizar o x4 quando i=0,8,16,24,32,...

Fiquem à vontade para postar quaisquer dúvidas aqui nesse tópico de discussão. Para esse primeiro trabalho — excepcionalmente — vocês podem anexar o programa ou partes dele na mensagem para ajudar a formular suas dúvidas.

Bom trabalho!

Marcelo

 

Em resposta à Marcelo Queiroz

Re: Primeira aula prática e primeiro trabalho menor

por Paulo Roberto Bezulle -
Boa tarde, prof. Só compartilhando que, mesmo com os contratempos, a aula prática foi muito útil. (construção escala cromática, adição de ondas, iniciação pd, etc)
Em resposta à Paulo Roberto Bezulle

Re: Primeira aula prática e primeiro trabalho menor

por Marcelo Queiroz -
Obrigado pelo feedback, Paulo!

Sobre o item (1) da minha mensagem anterior, acredito que os problemas técnicos de som e interface travando no laboratório já estão resolvidos. Passei um bom tempo no lab hoje para entender o que estava causando os problemas, e acho que as soluções que encontrei podem ajudar a quem esteja passando por dificuldades semelhantes em seus computadores pessoais.

A mudança mais importante - essencial - é que agora todas as contas de usuários puredata.NN pertencem ao grupo "audio" e têm permissão de rodar processos com prioridade realtime e uso ilimitado de memória. A página que explica como configurar isso no Linux é essa: https://puredata.info/docs/faq/how-can-i-run-pd-with-realtime-priority-in-gnu-linux. Quem quiser compartilhar dicas de instalação/configuração do Pd em outros sistemas operacionais aqui no fórum, fique à vontade!
 
Existem algumas tecnicalidades no acesso à placa de som que faz com que programas diferentes às vezes sejam mutuamente incompatíveis. O Pd em particular não é compatível com o Pulseaudio, que é o middleware default em várias distribuições Linux (Ubuntu, Debian...). Um jeito de forçar o Pulseaudio a sair de cena ao rodar o Pd é executar
 
pasuspender -- puredata
 
Desse jeito é quase certo que aquele teste de som que fizemos no Pd funcione de primeira. Acredito que esse caminho (dar prioridade realtime + memória + suspender o Pulseaudio) seja a solução mais simples e rápida para quem teve em seu computador pessoal problemas parecidos com os da aula prática.
 
Um outro caminho possível - mas não necessário - é rotear o som do Pd pelo servidor Jack (http://jackaudio.org/). Uma interface bastante amigável para o Jack, que promete inclusive resolver as incompatibilidades entre ALSA, Pulseaudio e Jack é a Cadence, que pode ser encontrada nos repositórios KXStudio (https://kx.studio/Repositories). Não consegui ainda testar essa alternativa no laboratório, mas pretendo fazê-lo antes da próxima aula prática. Provavelmente isso não será necessário, mas se funcionar fica como alternativa para quem quiser usar.
 
Abraços,
 
Marcelo
 
Em resposta à Marcelo Queiroz

Re: Primeira aula prática e primeiro trabalho menor

por Gustavo Chicato -
Só deixando registrado que, aqui no meu desktop, tentei a solução completa (dar prioridade realtime + memória + suspender o Pulseaudio) e mesmo assim não saia som de jeito nenhum do meu monitor. Até que optei pelo simples e decidi plugar fones de ouvido; no que funcionou sem nem precisar desabilitar o Pulseaudio.

Na dúvida, usem fones de ouvido!
Em resposta à Gustavo Chicato

Re: Primeira aula prática e primeiro trabalho menor

por Marcelo Queiroz -
Oi, Gustavo!

Usar fones de ouvido é conveniente por outras razões (nos permite perceber melhor algumas nuances e diferenças entre sons, além de não incomodar os vizinhos), porém não há razão para o som não sair no seu monitor. Pra mim não ficou claro se o seu monitor é um monitor de vídeo com saída de áudio (via HDMI) ou um monitor de áudio (caixa de som) ligado na placa de áudio. Em qualquer um desses casos, no menu Mídia->Configurações de Áudio, seção Dispositivos de Saída, deveriam aparecer outras alternativas lá além do microfone. Se a alternativa aparece, você consegue aplicar as configurações sem nenhuma mensagem de erro (Device or resource busy), mas o som não sai, eu tentaria ver com o alsamixer (ou gnome-alsamixer) se aquele dispositivo de saída está mutado ou com volume 0. Se dá a mensagem "Device or resource busy", é porque o pulseaudio está usando essa saída (provavelmente para o browser ou algum outro serviço), e o pasuspender deveria permitir você aplicar essa configuração no Pd com sucesso. A única alternativa que tornaria realmente impossível usar essa saída a partir do Pd é se ela não estiver mapeada em nenhum dispositivo ALSA, (nesse caso não haveria nenhum controle de volume correspondente no alsamixer), mas acho isso improvável pois o pulseaudio também usa ALSA.

Abraço,

Marcelo